Why Your Best Leads Show Up as “Unknown” in the CRM
It usually surfaces in a pipeline review. Marketing reports that lead volume is up. Sales says the new leads are not converting. Someone opens the CRM, sorts by lead source, and finds that a large share of recent leads have no usable source at all: “Unknown,” “Direct,” “Web,” or simply blank.
Those leads are not just unlabeled. A lead with no source cannot be prioritized by intent, cannot be credited to the campaign that produced it, and quietly disappears from every report that decides where next quarter’s budget goes. The channels that are tracked look better than they are, and the ones that lost their tracking look like they stopped working.
The visible symptom is a lead quality debate. The root cause is almost always somewhere between the ad click and the CRM record, where the source data was supposed to travel with the lead and silently didn’t.
The Blame Game It Creates
Consider a typical version of this pattern. Over one quarter, roughly a third of new CRM leads arrive with no source. Each team reads the same situation through its own report:
- Marketing points to its platform dashboards: “Paid search conversions are up. We are delivering more leads than ever.”
- Sales points to the CRM: “Half of these leads have no source and never respond. We can’t tell the real buyers from the noise, so we work them last.”
- Finance points to the budget: “Cost per customer went up while spend stayed flat. Paid media isn’t working anymore.”
The Silent Gap: Nothing errors out. The form still submits, the lead still lands in the CRM, and every dashboard still loads. The only evidence is a field that used to be filled in and now isn’t.
Step One: Measure the Gap Over Time
Before debating causes, measure the symptom. We export lead records from the CRM into BigQuery and look at the share of leads with no usable source, week by week. The goal is not the total. It is the shape of the line.
-- Share of CRM leads with no usable source, by week
SELECT
DATE_TRUNC(DATE(created_time), WEEK(MONDAY)) AS week,
COUNT(*) AS leads,
COUNTIF(lead_source IS NULL OR lead_source IN ('', 'Unknown', 'Web')) AS no_source,
ROUND(SAFE_DIVIDE(
COUNTIF(lead_source IS NULL OR lead_source IN ('', 'Unknown', 'Web')),
COUNT(*)) * 100, 1) AS pct_no_source
FROM `your_project.crm_export.leads`
GROUP BY week
ORDER BY week;
A steady, low percentage is normal: some visitors block tracking, and some leads arrive by phone. A step change is the clue. If the share of unsourced leads jumped from single digits to a third of all leads in a specific week, something changed that week: a form redesign, a new landing page builder, a website migration, or an update to the CRM integration. That date tells you where to look.
The Usual Fifth Drivers
In practice, lost lead source data usually traces back to one of four causes.
1. A Form Change Dropped the Hidden Fields
Most lead source tracking depends on hidden form fields such as utm_source, utm_medium and utm_campaign that are filled in automatically and passed to the CRM with the submission. When a form is rebuilt, moved to a new form builder, or redesigned, those hidden fields are easy to lose. Sometimes they are removed outright. More often they are renamed, so the Google Tag Manager variables and CRM field mappings that depend on the old names stop matching. The form still works perfectly for the visitor, which is exactly why no one notices.
2. Campaign Parameters Don’t Survive the Visit
UTM parameters live in the landing page URL. If the visitor clicks through to a second page before converting, the parameters are gone unless something saved them. The same thing happens when the form lives on a different domain, when it is embedded in an iframe (which cannot read the parent page’s URL), or when a redirect strips the query string on the way to the landing page. The lead converts, but by the time it does, the campaign information is no longer on the page.
3. The CRM Overwrites the Source
Even when the source arrives correctly, it does not always stay. Integrations that sync records between systems, workflows that set a default value such as “Web,” and returning visitors who submit a second form can all overwrite the original source with something less useful. A lead that first arrived from a paid search campaign ends up labeled “Direct” because its most recent visit was typed in from memory.
4. Leads That Never Touched a Form
Phone calls, live chat, events and walk-ins are often entered into the CRM by hand, without a source. These leads are frequently the highest intent of all, and when they are left unsourced, the channels that drove them never get the credit.
Recovering the Source You Already Lost
Fixing tracking going forward is essential, but leadership usually also wants to know what happened to the leads already in the CRM. If the form captures the Google Analytics client ID in a hidden field, many of those leads can be matched back to their original traffic source using the GA4 export in BigQuery:
-- Recover first-touch source for unsourced leads, using the GA4
-- client ID captured in a hidden form field (ga_client_id)
WITH first_touch AS (
SELECT DISTINCT
user_pseudo_id,
traffic_source.source AS source,
traffic_source.medium AS medium
FROM `your_project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20260101' AND '20260630'
)
SELECT
ft.source,
ft.medium,
COUNT(*) AS recovered_leads
FROM `your_project.crm_export.leads` AS l
JOIN first_touch AS ft
ON l.ga_client_id = ft.user_pseudo_id
WHERE l.lead_source IS NULL OR l.lead_source IN ('', 'Unknown', 'Web')
GROUP BY ft.source, ft.medium
ORDER BY recovered_leads DESC;
The traffic_source fields in the GA4 export describe how each user was first acquired, which is exactly the information the CRM lost. If the client ID is not being captured today, adding it is one of the most valuable changes you can make, because it creates a permanent link between website behavior and CRM records.
The Fix
The remediation is rarely a new tool. It is a small set of changes that make source data durable from the first click to the final record:
- Persist attribution on arrival. Use Google Tag Manager to read UTM parameters and ad click IDs on the landing page and store them in a first-party cookie, so they survive page changes until the visitor converts.
- Fill hidden fields at submission. Populate the form’s hidden fields from that cookie, along with the GA client ID, so every submission carries its source no matter which page the form is on.
- Protect the field in the CRM. Keep a write-once “original source” field alongside a separate “latest source” field, and review every integration and workflow that is allowed to update either one.
- Monitor it like revenue. Add a Looker Studio chart of the weekly share of unsourced leads with an agreed threshold, and add one step to every form or website release: submit a test lead with test UTMs and confirm it arrives in the CRM with its source intact.
What Changes When Every Lead Has a Source
| Question | With “Unknown” Leads | With Complete Source Data |
|---|---|---|
| Which campaigns produce customers? | Platform-reported leads | Customers and revenue by campaign |
| Which leads should sales call first? | Whoever arrived first | Prioritized by source and intent |
| Where should budget go next? | Whoever argues best | Cost per customer by channel |
The result: the lead quality debate stops being a matter of opinion. Marketing is measured on the customers its campaigns produce, sales can see which leads deserve a call first, and finance can compare channels on cost per customer instead of cost per form fill. None of it requires more leads. It requires keeping the information that came with the ones you already have.