Lead Source Attribution: Knowing Which Channel Actually Produced the Lead
Most businesses allocate marketing budget on an impression of what is working. The fix is not a new dashboard; it is four unglamorous changes to what your form captures and what your CRM stores.

Ask most owners of a New Jersey or New York service business which channel produced last month's best lead and you will get a confident answer. Ask how they know and the answer gets thinner. Usually it rests on an impression, a dashboard nobody configured, or whichever channel the person answering happens to own.
This matters because the next budget decision depends on it. If you cannot attribute leads to sources with reasonable accuracy, you are allocating spend by anecdote. Here is what is actually broken in most setups, and the minimum needed to fix it.
The question attribution is trying to answer
Be precise about the question first, because the reporting you need differs by question.
"Which channel sent the most traffic" is a web analytics question and the easiest to answer. "Which channel produced the most inquiries" is harder. "Which produced the most revenue" is harder still, and it is the only one that should drive budget. A channel sending plenty of inquiries that never close is a cost center that looks like a win in every report stopping at the form submission.
So the goal is not a traffic report. It is a path from first touch to closed deal, with the source attached to the record the whole way.
Why your analytics and your CRM will never agree
They count different things, and expecting reconciliation wastes time. The gap is structural:
- Analytics counts sessions and events in the browser. Your CRM counts people and deals. One person across three devices over two weeks is several sessions and one contact.
- Analytics loses anyone who blocks scripts, declines cookies, or arrives in a privacy-restricted browser. Those people still fill in forms and still appear in your CRM.
- Analytics attribution windows expire. A buyer who researched you in March and called in June is a direct visit in analytics and a six-month consideration cycle in reality.
- Phone calls and walk-ins do not exist in web analytics at all unless you deliberately make them exist.
The resolution is to make the CRM your system of record for leads. Analytics tells you about behavior on the site; the CRM tells you what happened to the lead. Attribution lives in the CRM, fed by what your forms can pass to it.
Tag everything you control
Any link you create yourself should carry campaign parameters. This is the cheapest accuracy you will ever buy, and it is routinely skipped. Paid ads, email sends, social posts, directory listings, the QR code on a truck or flyer, your email signature, the vendor who listed you on their partner page. If you made the link, tag it.
Two rules separate useful data from a mess. First, follow a convention exactly: lowercase, hyphens not spaces, and a fixed vocabulary for source and medium. Analytics treats "Facebook" and "facebook" as two sources, and a year of inconsistent casing produces a report nobody trusts. Second, write that convention down where the agency, the freelancer and whoever runs the email list can all see it.
Never tag internal links on your own site. Doing so restarts the session and reassigns the source, erasing the real origin and inflating whatever you tagged. It is a common mistake that quietly poisons the whole dataset.
The channels that arrive untagged
Everything you did not create a link for lands in a few buckets, each needing separate handling.
Organic search is identifiable, but the query usually is not. Search Console withholds most individual queries, so attribute at the page level instead. If inquiries arrive on a specific service page, that page is doing the work regardless of the phrasing that brought them.
Direct is a label for "we could not tell," not a channel. It collects people typing your domain, clicking links in documents and apps, and returning after their prior session data expired. A large direct share usually means earlier marketing worked and the credit was lost.
Referral is genuinely useful and under-read. Check it monthly. It tells you which directories, partners and community sites actually send people, which is frequently not where you assumed.
AI assistants are the newest gap. When someone asks an assistant for a recommendation and then visits you, the visit usually arrives as direct or as a referral from the assistant's domain, and the recommendation leaves no trace. If prospects start saying an assistant suggested you, track it by asking, because analytics will not show it.
Phone calls are the hole in most local setups
For contractors, medical practices, law firms and most local businesses across New Jersey and New York, the phone is the main conversion path. If calls are not attributed, the largest part of your lead flow is invisible and your reporting systematically favors whatever drives form fills.
Two approaches work. Call tracking numbers, where the number displayed changes with how the visitor arrived, give automatic source attribution at the cost of a monthly fee and some care keeping your main number consistent in your Google Business Profile and directory listings. Or you ask every time, and record the answer in the CRM as a required field.
Asking is less accurate than it sounds, because people genuinely do not remember and will say "I found you on Google" for anything involving a browser. But a required dropdown is far better than nothing and costs no money. The failure mode to avoid is a free-text field half the team leaves blank.
Put the source on the record, not just in the report
This is the step that turns analytics into attribution, and it is the one most often missing.
Your inquiry form should capture the campaign parameters, the landing page and the referrer as hidden fields, and write them into the CRM record along with the name and phone number. Then the source travels with the lead through qualification, proposal and close, and you can report on revenue by source instead of sessions by source.
Without it the chain breaks at the form. You know 40 people came from paid search and 30 leads arrived that month, but not which of the three closed deals came from where, which is the only fact that would have changed the budget. Writing those hidden fields reliably into the right objects is standard work in a CRM implementation, and worth insisting on before anyone builds you a dashboard.
First touch, last touch, and why you want both
Last touch credits the final interaction before the inquiry. First touch credits the one that introduced you. Both are simplifications, and they answer different questions.
Last touch overvalues channels that catch demand which already exists. Branded search is the clearest case: someone who already knows your name searches for it and converts, and branded search takes credit for a decision that content, a referral or an ad produced weeks earlier. First touch has the opposite bias: it overvalues discovery and tells you nothing about what closes.
Store both on the lead record. It is two fields, and the comparison is immediately informative. When a channel shows up heavily in first touch and barely in last touch, it is doing real introduction work that a last-touch report would have you cut. For most businesses this pair is enough. Multi-touch models need data volumes a business generating tens of leads a month cannot support, and tend to produce false precision.
What to do with the unknown bucket
You will always have leads whose source cannot be determined. Keep that share small enough that it does not change your conclusions, and state it in reporting rather than silently redistributing it.
If unknown runs high, the usual causes in order are: forms that do not capture hidden source fields, unattributed calls, untagged links you created, and internal links carrying campaign parameters. Work that list before buying any new tool.
Report the unknown share explicitly every month. A report that shows 100% of leads neatly attributed is a report that has quietly assigned the unknowns somewhere.
A minimum viable setup
For a business doing dozens of leads a month this is enough, and takes days rather than months:
- Analytics installed correctly, with form submissions and phone-number taps recorded as events.
- A written tagging convention, applied to every link you create, enforced on the agency too.
- Hidden source fields on every form, written into the CRM record.
- One required source field on manually created records, with a fixed dropdown.
- First touch and last touch stored on the lead.
- Deal outcome and value on the same record, so revenue by source is a query rather than a project.
- A monthly review of leads and revenue by source, with the unknown share stated.
Notice what is not on the list: a new platform, a data warehouse, or a multi-touch model. Those are reasonable at larger scale. At this scale they are a way of avoiding the unglamorous fixes that actually determine whether your numbers mean anything.
Where to start
If your reporting cannot answer "which source produced the deals we closed last quarter, and what did we spend on it," start there rather than with a dashboard redesign. The fix is almost always upstream of the reporting layer, in what the form captures and what the CRM stores.
We build this layer as the first phase of any engagement, because every later decision about web analytics and conversion reporting depends on it. Businesses working with us on marketing and AI automation in New Jersey get the attribution plumbing done before anyone proposes spending more on traffic.
If you want to know what your current setup can and cannot tell you, send us the channels you are running and we will map what is being counted and what is being lost.