Export the last hundred leads out of your CRM and look at the column that says where each one came from. If most of it is blank, or says "website" for everything, you are not looking at a data entry problem. You are looking at the far end of a chain that starts at an ad click and ends at a database row, and that chain has roughly nine links in it. It breaks quietly, it breaks after site releases, and it almost never announces itself, because a broken source field produces a lead that looks completely normal. This piece explains each link in ordinary language and then gives you the checks to run yourself.
Two kinds of label: the receipt and the tag
When somebody clicks an ad and lands on your site, the address they arrive at can carry extra information after a question mark. There are two different kinds of information in there and they do different jobs.
The first is a click id: a receipt the ad platform staples on at the moment of the click. It is a long meaningless string, you did not write it, and you cannot read anything from it yourself. Its only purpose is that the platform can later match it back to the exact click, campaign, ad and keyword. Every major platform has its own, and they are all documented by the platform itself.
| Platform | Parameter it adds to the link |
|---|---|
| Google Ads | gclid, and gbraid or wbraid on some iOS traffic |
| Microsoft Advertising | msclkid |
| Meta (Facebook and Instagram) | fbclid |
| TikTok | ttclid |
| li_fat_id |
The second is a UTM: a label you write, in readable words, so your own analytics can group traffic sensibly. The five standard ones are utm_source, utm_medium, utm_campaign, utm_term and utm_content. Nobody stapled these on for you — somebody on your side chose them, which is why they are inconsistent in almost every account we open, with "facebook", "Facebook", "fb" and "FB-Ads" all counted as different sources.
You want both. The click id is how the ad platform reconciles a sale back to a click. The UTM is how you describe traffic in your own reports without depending on anybody's platform. And they fail in different ways, which is diagnostically useful: a missing UTM is nearly always a link somebody built by hand, while a missing click id is nearly always a redirect or a switched-off setting.
The nine places the source dies
- 01 Auto-tagging is off. The ad platform has a setting that adds the click id automatically. If somebody turned it off years ago to keep URLs tidy, there is no receipt to lose, because one was never issued.
- 02 A redirect eats the query string. The most common cause of all. A non-www to www correction, an http to https upgrade, a shortened link, a plugin that tidies URLs — any of them can rebuild the destination address without the part after the question mark. The visitor lands on the right page and nothing looks wrong.
- 03 The form lives somewhere else. A booking widget, a quote tool or a scheduler on a different domain, often inside an embedded frame, starts a fresh context that knows nothing about how the visitor arrived unless it was deliberately connected.
- 04 The form has nowhere to put it. Source data has to be captured into hidden fields on the form. If those fields do not exist, the information was on the page and then the page closed.
- 05 The handler drops unknown fields. Plenty of form processors and CRM connectors forward only the fields they were configured for. Name, email and phone go through; the six hidden fields you carefully added do not, and nothing errors.
- 06 The CRM has no field. The record arrives complete and the destination has nowhere to store the source, or stores it in a note nobody can report on.
- 07 The visitor took too long. Source data held in the browser has a shelf life. Apple's WebKit team described a seven-day cap on script-writable storage in Safari in its March 2020 post "Full Third-Party Cookie Blocking and More", and other browsers have their own limits. Someone who clicks an ad on Monday and calls a fortnight later can be genuinely unattributable.
- 08 Consent was declined. If the visitor said no to the storage or advertising purposes your banner asked about, the tags that would have written the identifiers should not run. That is the system behaving correctly and it still produces a blank field.
- 09 They phoned. A phone call is invisible to a pixel. Without call tracking, the entire share of your demand that prefers to speak to a human is a permanent blank in the source column.
Note the shape of that list. Two of the nine — the shelf life and the declined consent — are expected and cannot be engineered away. The other seven are ordinary configuration faults, and every one of them can be fixed in an afternoon by somebody who knows to look. The reason they persist is not difficulty. It is that nobody owns the chain end to end: the ad platform is someone's job, the website is someone else's, the form vendor is a third party and the CRM belongs to sales.
Nothing in this chain throws an error when it breaks. It just produces a lead that looks completely normal and cannot be traced.
Consent, briefly and carefully
Consent is where a measurement problem becomes a legal one, so it deserves a paragraph of its own and a warning that this is not legal advice. The mechanism is simple enough: a consent banner asks the visitor about specific purposes — storing things on their device, using data for advertising, personalising ads — and a properly implemented site withholds the tags that depend on a purpose the visitor declined. Google's consent mode is the common implementation of this on the Google side, and it works by passing consent signals that tags then respect.
Two commercial consequences follow. First, a site with a working banner will record fewer sources than a site without one, and that is the system doing its job rather than a fault to be engineered around. Any vendor who tells you their product "recovers" the data of people who declined is selling you a compliance problem with a dashboard attached. Second, and more usefully: you need to know how much of your blank column is consent and how much is breakage, because the first is expected and the second is fixable, and they look identical from the outside.
Requirements differ by jurisdiction and they change. Treat the banner as a legal question with a technical implementation, not a technical question with a legal footnote, and get the wording and the default states reviewed by somebody qualified in the places you actually operate.
The phone call, which is most of the problem for service businesses
If you sell anything urgent, expensive or complicated, a large share of your best enquiries arrive as a phone call, and a phone call carries no query string. Call tracking closes that gap with dynamic number insertion: the number displayed on the page is swapped depending on how the visitor arrived, so a call can be tied back to the campaign, keyword or listing that produced it.
Two rules keep it from causing new problems. First, keep your published business number consistent everywhere it corroborates your listings, and use tracking numbers where the platform expects them rather than scattering them across directories — inconsistent name, address and phone details are a real drag on local and maps visibility, and it would be a poor trade to fix attribution by damaging rankings. Second, push the outcome back rather than the ring. A call is only useful as a conversion signal if the result returns to the ad platform as an offline conversion, qualified by what actually happened on the call. Optimising toward raw call volume teaches the bidding system to find people who dial, not people who buy.
Ten minutes of checks you can run yourself
None of these needs a developer, a login you do not have, or any technical vocabulary beyond what is above. Do them in order and stop at the first one that fails, because the failures cascade.
- 01 Export a hundred leads. Pull the last hundred records out of your CRM with the source column and count how many are populated. Write the number down. This is your baseline and it is the only number in this article that describes your business.
- 02 Click your own ad. From your phone, search for something that triggers your ad, click it, and look at the address bar the instant the page loads. If there is nothing after a question mark, stop — you have found the problem and it is either auto-tagging or a redirect.
- 03 Add a parameter by hand. Type your homepage address with ?test=hello on the end and press enter. If it survives on the loaded page, your redirects preserve query strings. If it vanishes, they do not, and every ad you run is losing its receipt at the door.
- 04 Walk your own funnel. Repeat the click, then navigate the way a real visitor would — homepage, service page, contact page. Check the parameter is still there, or that something on the site clearly carried it forward, by the time you reach the form.
- 05 Submit a real test lead. Use your own name with a word like TEST in it so it can be found and deleted. Then open the record in the CRM and look at the source field. This one check covers links four, five and six of the chain at once.
- 06 Check the notification email. If your form also emails somebody, look at whether the source fields are in that email. A source present in the email and absent in the CRM narrows the fault to the connector, precisely.
- 07 Do it on every form. Most businesses have more than one: the contact form, the quote tool, the booking widget, the chat handoff, the footer newsletter. They are frequently different vendors with different behaviour, and the one nobody tests is usually the one that produces the best leads.
- 08 Call your own number. Ring the number shown on the page after clicking an ad, then check whether that call appears anywhere as an attributed call. If you have no call tracking at all, you now know the size of that blind spot.
- 09 Decline your own banner. In a private window, refuse consent, then submit another test lead. Whatever you see now is what your declining visitors look like, which tells you how much of the blank column is lawful rather than broken.
- 10 Diarise it. Put the same ten checks in the calendar for the first working day after every site release. This chain does not stay fixed; it decays every time somebody edits a form, changes a plugin or migrates a page.
What fixed looks like
Fixed is not a hundred percent. Some people genuinely will type your address from memory, arrive on a device you never saw, decline consent, or take a month to call. Fixed means the unknown bucket is small, stable, and understood — you know roughly how big it is and roughly why. Practically, that is: auto-tagging on, redirects that preserve query strings, hidden fields on every form, a connector that forwards them, a real reportable field in the CRM, call tracking on the channels that ring, and a re-check after every release.
The single case study published on this site is a measurement engagement of exactly this shape, and its disclosure belongs before its numbers. It is an engagement with a company under common ownership with CurrentAds, published anonymised for that reason. No revenue increase is attributable to the work and none is claimed. CurrentAds has no paying clients yet. With that stated: before the work, no inbound lead in that business carried a recorded source at all; afterwards, all 48 inbound leads in the measured period carried one. That is a plumbing result, not a marketing result, and it is not offered as evidence that any advertising made money. It is offered as an illustration of what the column looks like on either side of the fix. The figures and their sources are on the results page, carrying the same disclosure.
If the ten checks above turn up something, the repair is ordinary analytics and tracking work and it should be done before any more money goes through paid media, because algorithmic bidding treats your conversion signal as ground truth and will confidently spend against a broken one. The order to rebuild in is in the measurement floor, and the reason a blank source column quietly invalidates your monthly reporting is in is your agency report telling you anything.