From the November 4th, 2026, edition of How Teams Work
It's the end of the quarter, and your sales leader pulls up the pipeline report.
The question is simple: where did these deals come from?
Everyone assumed HubSpot was tracking that. But a big chunk of the source column says "Offline sources." Some records have nothing in the custom source field at all. Others have source data split across three custom fields, each with different values.
The deals are real. The pipeline is there. But nobody can say which channels generated it.
And that's the report leadership uses to plan next quarter. Another BDR or another demand gen marketer? Back to the trade show next year? More budget into Google or LinkedIn? Without source data you trust, those calls come down to gut feel.

How source data stops being trustworthy
It usually starts with something reasonable.
Your team attends a trade show. Someone says, “We need to track everyone we talk to,” so the leads go on a list and get imported into HubSpot. But after the import, HubSpot lists the source for those contacts as “Offline sources.”
So someone creates a new lead source field and tags everyone from the show.
It solves the immediate problem. The team can now report on trade show leads. But nobody steps back to think about how lead source should be tracked across every channel, not just this one.
Fast forward a year or two, and this is what we tend to find when we open a portal:
- Several versions of lead source, none of them complete or used consistently.
- A workflow someone built to fill in those fields, but it hasn’t been updated in a year and is missing dropdown values.
- Dropdown values like “Trade Show - [Show Name] - [Year].” Every new show means a new value, which treats source like a campaign.
- No process for adding new sources.
- No way to check whether source is being filled in correctly across the database.
Every one of these decisions made sense at the time, but nobody owned the whole thing. No one defined what the business needed from its source data, what the source categories should be, or how new values would get added over time.
So marketing built one version, sales built another, and partners built a third.

What HubSpot tracks, and what it misses
HubSpot does track source out of the box. Every contact gets a Record Source, an Original Traffic Source, and a Latest Traffic Source, each with drill-downs for more detail. HubSpot sets them automatically from your website tracking code and from how each record was created.
Those fields work well for online sources like search, social, email, and paid ads. They don't work as well for offline sources because HubSpot has no web activity to tie them to. Imports, purchased lists, contacts from BDRs, and records created through integrations all land in a catch-all called "Offline sources." And if a rep meets someone at an event, never logs them, and that person later finds you through search and fills out a form, HubSpot credits organic search. The event never shows up.
If you run the portal, it helps to know which tool answers which question. Source tells you where someone came from. Campaigns and events tell you what they interacted with.
Where they came from:
- Record Source tells you how a record got into HubSpot, like an import, a form, a workflow, or an integration. Its three detail properties add specifics, such as the name of the import or form. It shows how a record entered the system, which isn’t always where the lead came from.
- Original and Latest Traffic Source show where a contact first came from and where their most recent visit came from. Each has two drill-downs for more detail.
- UTMs tell HubSpot which campaign, source, and medium sent someone to your site. Without them, more of your traffic gets labeled as direct. To capture UTM values on the contact record, create UTM properties and add them to your forms as hidden fields.
What they interacted with:
- Campaigns group your assets around a business initiative, like a Q4 webinar series that runs across email, LinkedIn, and paid. The UTM tracking link builder lives inside campaigns in Marketing Studio. When someone converts from a campaign, HubSpot records it in the first touch and last touch converting campaign properties.
- Marketing events track how people interacted with a specific event, like registering for it or attending it. They’re typically used for in-person events and webinars.
This is where campaign reporting gets confusing. HubSpot’s first touch and last touch converting campaign properties only fill in from activity that leads someone to become a contact, like visiting a campaign page and converting on a form. Remember that trade show list? If you add it to a campaign, those contacts count as influenced by the campaign. They won’t show up as new contacts from it.
Attribution reports have the same blind spot. They can only credit what HubSpot tracked.
That gap is usually what pushes teams toward a custom setup.

First, decide: fix the defaults or build your own
This is the first call we make on every lead source project. Five questions decide it:
- Do a lot of your leads come in through offline channels like trade shows and imported lists?
- Do partners or affiliates send you leads?
- Do leads get created in other software first, like Outreach, Apollo, or a partner portal?
- Do your UTMs use custom values? (HubSpot sorts traffic by fixed rules. A custom medium like “partner” lands in “Other campaigns.”)
- Does leadership need to see more than where someone first came from?
If you answered yes to several of these, you probably need a custom model.
If most of your leads come in online and you answered mostly no, the defaults can work. Your job is to make the data going into them more reliable. Agree on what counts as a source, set a UTM standard, and put a process around events and imports so offline records come in with a name you can trace back.
If you do go custom, the model doesn’t replace HubSpot’s source properties. It treats them as one input alongside the others: UTMs, imports, sales-sourced leads, partner leads, and leads created in other software. Automation runs each input through the same set of rules and writes the result to one set of source properties, so every team reports from the same place.
Before you pick that path, know what you’re signing up for. A custom model is closer to custom software than a one-time setup. Someone has to maintain it as your channels and reporting needs change. If you don’t have the team or budget to keep it up, the default path is the better fit. But if leadership is asking questions the defaults can’t answer, don’t let the size of the project stop you.

What this looks like in practice
One software company we worked with answered yes to almost every one of those questions.
Marketing, sales, and partners each brought in leads, and between them they had built nine custom source fields. When it came time to report, each team had a different answer.
Marketing’s report showed 65% of leads were marketing-generated. Sales had a property showing 65% were sales-sourced, because it counted anyone who had ever been on one of their import lists. That’s 130% of the leads.
The overlap was real. A rep would meet a contact at an event or over dinner, then go back and change the source to the event or update their own sales properties. Then it turned into a battle over which came first. And the imports weren’t all the same. Some were giant lead lists that nobody ever worked, which shouldn’t give anyone credit. Others were worked, and sales outreach was the first real introduction to the company.
Everybody was analyzing sources their own way, and for their own benefit. There was no shared language across the company. That’s what had to change first.
We started with the source data that was already being captured automatically, then defined a way to capture the sources that weren’t:
- Marketing sources came from HubSpot’s tracking, since most of them were online.
- Sales sources came from Salesforce. Did the rep pull the list from Clay, find the contact on LinkedIn, or meet them at a trade show?
- Partner sources came from the channel program.
Everything ran through one automation in HubSpot that set a single group of custom source properties.
Leadership defined how they wanted to track first source and source at each lifecycle stage. Now they could see where marketing and sales each had an impact: what sourced the lead first, and what moved it forward at each stage.

How to build it
If you're keeping the defaults, steps 1, 2, 4, and 7 still apply. If you're building a custom model, you need all seven.
- Start with the decisions. Ask leadership which reports they need and what they'll decide from them. Which channels bring in our best customers, not just the most leads? Is the trade show worth going back to? Then agree on the rules everyone will use, including what counts as first when touches overlap. That's the shared language. It also tells you how much detail the model has to support.
- Audit what exists. List every property that tries to capture source, the workflows that update them, and the values in each. Then export the source data HubSpot has already collected to see what's coming in.
- Build the hierarchy. Use what the audit found to define a short list of main sources, with a subtype and a detail layer underneath for specifics like an event name. That way, “Trade Show” is the main source, and the show name and year go in the detail, instead of adding a new dropdown value for every event. Start by tracking the first source and the most recent one. Once that structure is in place, you can use it to capture source at any moment that matters, like each lifecycle stage. Then the journey is built right on the contact, which makes analysis much easier.
- Set the UTM standard. Review the UTMs already in use, decide on the medium and source values going forward, outline how UTMs will be used, and give the team a UTM builder so links are created the same way every time.
- Automate it, including the offline sources. Workflows set the source from UTMs and HubSpot's traffic source data. Imports, sales-sourced leads, and partner leads each get a defined way in, including whether an unworked list gets credit at all. Records that don't match a rule go to a review list instead of landing in "Other."
- Backfill the historical data. Map the historical source data into the new structure so you don’t start from zero. We typically go back about 12 months, which brings over the older data that’s still useful.
- Build the reports. Set up the reports and dashboards leadership asked for in step 1, so they can see source across the pipeline.

Keeping it accurate over time
Lead source isn’t a project you finish. Like any other process in your business, it needs an owner, and it needs regular review so it keeps up with how your business runs. That owner is usually RevOps or marketing ops, and more and more, we’re seeing those folded into one team.
Your business won’t stay the same. You’ll take on new channels. A channel may grow until it has sub-channels of its own. A new leader may want to see source broken out differently. If nobody adjusts the structure, the data drifts. We’ve seen teams set everything up, leave it alone for six months, and then wonder why the reporting is off.
So check that the output matches what you expect and that the data coming in is consistent. When something in the business changes, update the structure on purpose. Don’t create another property to patch it. That’s how the trade show field started.
A few habits make that easier:
- Every new campaign, tool, and list follows the rules you set in step 1.
- Gate the doors. When everyone is a super admin, things break, and settings get changed. Your BDRs shouldn’t be importing whatever they want without a process in place.
- Start broad and get more specific as channels grow. We’ve seen teams come out of the gate with 30, 40, or 50 sources, and a lot of them barely get used.
- Make every bucket earn its place. If leadership will never make a decision based on the difference between two values, you’ve broken it down too far. And every bucket has to be something you can fill in reliably.
AI helps with two jobs here. The first is setup. Once your structure is defined, AI can create your UTMs, campaigns, and marketing events using your naming convention, and prep import files so the data goes in clean. The second is validation. You can set up agents in HubSpot that run on a schedule, check whether source fields are being filled in consistently, and show which sources have the best win rates.

The simplest check: ask them how they found you
This sounds like old advice. We think it still works.
We spent years building more technical ways to track source, and now we’re back to asking the customer. Even when their answer isn’t the first source, it’s the reason they remember coming to you.
That makes a “How did you hear about us?” field one of the easiest ways to check whether your source structure is working. Your tracking might say direct traffic, but the person writes in that they met someone at an event two weeks ago, or read one of your blogs. That’s what your tracking never saw.
Keep it as an open text field so people can say exactly what it was. Then use AI to sort those answers into a dropdown property that uses the same categories as your lead source. That turns open answers into something you can report on.
Once a month, compare those answers against what your source properties say. Where they don’t match, you’ll see what your setup is missing.
What does your source report say for your biggest deal this quarter? If the answer is “Offline sources,” I’m happy to talk it through.
Want to get the "How Teams Work" newsletter sent to your inbox? Subscribe Now.