Home»Playbooks»Attribution

Playbook

How we attribute AI search pipeline when no single source can be trusted

Your dashboard says one thing, your buyers say another. Neither is the truth on its own, so we read every contact against both and resolve the conflict by rule.

Last month we pulled 8,307 contacts from a growth-stage B2B SaaS company's HubSpot and read the same funnel two ways.

The first read was the one their dashboard gives anyone who asks: HubSpot's Original Source field, built from referring URLs. It reported 11 leads from AI referrals across the window.

The second read was the intake form. On "How did you hear about us?", 809 buyers named ChatGPT, Claude, Perplexity, Gemini, or just "AI."

Figure 1

The Same Funnel, Read Two Ways

CRM Original Source
Buyer self-report

A 70x+ gap on the channel the CMO was being asked to make a budget call on. Neither number is the truth on its own, which is the entire point of what follows.

Source: HubSpot contact records, 8,307 contacts across one window

Here's the part most attribution content gets wrong, though. The instinct is to declare the form the truth and the dashboard a liar.

It's not that simple. The form has its own biases, and they run in the opposite direction. If you replace blind faith in the dashboard with blind faith in self-reports, you've traded one wrong number for another.

So this article is our full methodology for reading AI search and SEO in long B2B buying cycles. We call it the Two-Witness Rule, after the oldest standard of proof in law: nobody gets convicted on the testimony of a single witness.

Same principle here. No channel gets credit, and no channel gets cut, on one signal's word alone.

The method uses exactly two fields that already live in your HubSpot, treats both as witnesses rather than truth, and produces a number you can put in front of a CFO without getting picked apart.

01

The problem

Two witnesses, each unreliable in a known way.

Witness one

The CRM source field

HubSpot builds Original Source from the referring URL plus first page seen. The failure is structural, not a settings mistake.

When an AI assistant sends a buyer to your site, the referrer is frequently stripped or rewritten by the in-app browser, the mobile app, or a copy-link handoff. Statcounter data show that 35 to 70 percent of AI referral sessions arrive with no referrer at all.

ChatGPT paid accounts apply a no-referrer attribute to outbound links. Google AI Overviews pass no distinct referrer, so that traffic reads as ordinary organic.

With nothing to read, HubSpot's best available answer is Direct. AI gets none of the credit.

Blind to: AI search, communities, word of mouth
Reliable for: Paid clicks, direct branded

Witness two

The self-report field

The form recovers what the referrer lost, but it measures perceived influence rather than causal attribution.

Buyers name the most familiar or most recent touch, not the most influential one. Culturally dominant names like Google get over-selected because they're top of mind.

A channel the buyer can't easily name (an AI assistant, a Slack thread, a podcast) gets under-selected. And a large share of buyers skip the question entirely, and the skippers are not a random sample.

Catches: Demand creation
Biased by: Recall and familiarity

In the audit above, buyers who explicitly named AI on the form had been machine-tagged as Direct, Organic, and even Paid Search. Zero landed in an AI bucket.

The contradiction hiding in your form data

There's a problem here that most attribution takes never confront.

Branded Google search is partly the downstream echo of an upstream AI conversation. A buyer hears your name from ChatGPT, then Googles the brand to verify.

That buyer writes "Google" on your form. They're reporting AI without knowing it.

You can't call the form the truth and simultaneously claim one of its top answers is secretly something else.

The fix is to stop treating either signal as truth and start treating both as witnesses, then read what their agreement and disagreement tells you. That's the whole model, and the rest of this article is the procedure for weighing the testimony.

Example 01Witness two, exactly as configured
Field label
How did you hear about us?
Field type
Single-line text · not a dropdown
Placement
Demo request form, last field, above the submit button
Required
No. A required field costs you conversions and buys you guesses.
Internal name
hdyhau · one field, one name, every form, forever
Why text
The dropdown is the bug
A dropdown offers Google, Referral, Social, Other. A buyer who found you through ChatGPT picks Other or Google, and the signal is destroyed at the point of collection. Free text is what recovered 809 answers in the audit.

This is the entire instrumentation cost of the method. One text field, added once, never renamed.

Do this todayInstrument both witnesses in under an hour

  1. 01

    Add How did you hear about us? as a single-line text field on the demo form. Not required, last position.

    Where
    HubSpot · Forms
    Time
    10 min
  2. 02

    Confirm the CRM source field is being written on contact creation, and export the last 12 months of it to a sheet.

    Where
    Contacts · Export
    Time
    15 min
  3. 03

    Add both columns to one view: CRM source, form answer. Nothing else. This view is the audit.

    Where
    Saved view
    Time
    10 min
  4. 04

    Record today's form completion rate on that field. You need it for the correction later, and it changes over time.

    Where
    Form analytics
    Time
    5 min
  5. 05

    Write the field definition down in one line so the next person does not create a second version of it.

    Where
    Internal doc
    Time
    5 min

Done whenOne saved view shows both witnesses side by side for every contact, and the field has one documented name.

02

The reframe

Presence, not source.

Dreamdata's 2026 benchmarks put the average B2B journey at 272 days, 88 touchpoints, 4 channels, and 10 stakeholders before a deal closes.

Days in the average B2B journey272
Touchpoints before close88
Channels involved4
Stakeholders10

When a single deal is touched dozens of times across four channels over nine months, "what was the source?" is the wrong question. There is no source. There's a set of channels that each played a part.

A deal can be touched by AI search, Google, and a peer referral. We record what the evidence supports.

Channel totals are allowed to sum past 100 percent on purpose, because that's what a multi-touch journey looks like.

This is a harder position to attack than a precise per-lead number, because it concedes the uncertainty up front and still produces a clear, trendable answer.

03

The method

The classification matrix.

Every contact gets read against both witnesses and classified into one of five cases. Select a tier to see how it resolves.

Tier A

Confirmed

CRM saysOrganic Search

Buyer says“Google”

HubSpot says Organic Search; the buyer wrote “Google.” Both witnesses agree. Highest confidence, reported as a hard count.

Tier B

Recovered

CRM saysDirect

Buyer says“ChatGPT”

HubSpot says Direct; the buyer wrote “ChatGPT.” The dashboard was blind because the referrer was stripped; the self-report recovers the channel. This tier is the core of the whole method. It’s where the 809 lives.

Tier C

Single-signal

CRM saysA named channel

Buyer saysBlank

HubSpot says a channel; the form is blank. One witness, no contradiction. Counted, labeled probable.

Tier D

Conflict

CRM saysOne channel

Buyer saysA different channel

The two witnesses name different channels. Resolved by rule, and flagged, so conflicts get monitored as a share of volume rather than silently absorbed.

Tier E

Dark

CRM saysDirect

Buyer saysBlank

HubSpot says Direct; the form is blank. This can’t be recovered from the data, so it’s reported openly as a named bucket, never forced into a channel.

Example 02Five contacts, run through the matrix
CRM saysBuyer typedResolves toWhy
Organic Search"google search"Tier A · ConfirmedBoth witnesses agree. Counted at full confidence.
Direct"chatgpt recommended you"Tier B · RecoveredReferrer was stripped. The CRM could not see this event; the buyer could.
Paid Search"asked claude for alternatives"Tier D · ConflictThe paid click was capture, not creation. AI takes influence credit, paid keeps the click.
Organic Search(blank)Tier C · Single-signalOne witness, and it is the one that is reliable for this channel. Counted, lower confidence.
Direct(blank)Tier E · DarkNeither witness saw anything. Reported as its own named bucket, never merged into Direct.

Row three is the one that starts arguments. The paid team keeps the click; AI search gets the influence credit. Both facts are recorded, so nobody has to win the argument to run the report.

The conflict rule

This is where the thinking lives. When the two witnesses disagree, we resolve by asking which one was in a position to see the event.

01

The human witness wins for demand creation

AI search, communities, word of mouth, referrals. These are exactly the channels a referrer-based classifier structurally cannot see, so the self-report is the better testimony.

02

The machine witness wins for demand capture

Paid search, direct branded traffic. The click record is more reliable than recall there.

And when HubSpot says "Paid Search" but the buyer says "AI," AI gets the influence credit.

That paid tag can itself be a downstream echo: the buyer searched a brand they first learned from an AI answer, clicked a brand ad, and HubSpot logged the click. The paid click was the capture step, not the cause.

Why rules instead of an algorithm

One more design choice worth defending.

Some platforms distribute credit with data-driven models, Shapley values and Markov chains. We use rules instead, deliberately.

At the volumes most B2B SaaS companies run (tens of customers, modest lead counts), an algorithmic model overfits thin data and produces a number nobody can explain to a CFO.

04

Correction

Correcting for the silent half, without lying.

Self-report is incomplete. Some share of your inbound never answers the question, and the honest way to handle that is a correction.

The naive version divides observed self-reports by the form completion rate and calls it a day.

We don't report that single point, because it rests on an assumption you can't verify: that the buyers who skipped the form have the same channel mix as the buyers who answered.

Instead, we report a band built from three explicit scenarios.

01

Conservative floor

Assumes the channel is over-represented among people who bothered to answer.

02

Base case

Assumes the silent half mirrors the vocal half.

03

Ceiling

Assumes the channel is under-represented among answerers, which is likely for AI, where buyers often don't know how to name the source.

Then one formatting rule, enforced on every deliverable: every gap ships as a pair, raw and corrected, both labeled, every time.

The raw ratio in this funnel is 11 reported versus 809 self-reported. The corrected figure is a stated range with its base case, never a single false-precise point.

Nobody comparing two of our reports ever finds two different definitions of the same multiplier.

And the Dark bucket stays named. Reporting a bucket labelled "we cannot see this" is the single most credibility-building move in the whole report.

Example 03The correction, worked
Observed self-reports naming AI
809
Contacts in the window
8,307
Answered the field
62%
Silent contacts
3,157
Floor 809 + (3,157 × 0.5 × observed rate) → channel over-represented among answerers Base 809 ÷ 0.62 → silent buyers mirror answering buyers Ceiling 809 + (3,157 × 1.5 × observed rate) → channel under-represented, hardest to name

1,150Base case, inside a stated band of roughly 980 to 1,420. Reported as the band with the base named, never as a single point.

The floor and ceiling are not decoration. They are the two assumptions a CFO will challenge, priced in advance so the challenge has already been answered.

05

The finding

What the recovered view actually showed.

Classification is plumbing. The finding is what made this audit worth publishing.

Figure 2

Recovered Pipeline · Back Half Vs Front Half

Change across the window
Direct

Recovered AI search pipeline rose the steepest of any channel, and daily lead pace ran at 2.3 times the prior period. Direct stayed flat, which is the tell: if the lift had been generic brand awareness, Direct would have moved with it.

Source: Client CRM, back half against front half of the window

Read through the model; this funnel's recovered organic pipeline rose 106 percent, comparing the back half of the window to the front half.

Recovered AI search pipeline rose 237 percent in the same comparison, the steepest lift of any channel. Daily lead pace ran at 2.3 times the prior period.

Direct stayed flat. That's the tell.

If the lift had been generic brand awareness, Direct would have moved with it. Instead the growth concentrated entirely in the two channels the dashboard underreports, and they rose together, not at each other's expense.

The defensible read: organic and AI are sequential surfaces in the same buyer journey.

The same content that earns rankings gets cited by assistants, and the same AI mentions come back as branded search. The dashboard files most of that story under Direct and calls it a mystery.

One quality note on those recovered buyers, from a parallel engagement running the same model: buyers who named AI search qualified to MQL or beyond at 89 percent, roughly double the inbound baseline.

Small channel, highest intent in the funnel. The buyer arrives having already received a recommendation.

They're not browsing. They're validating.

Example 04How the number ships, every time
ChannelReported asConfidence
AI search11Machine-tagged, raw. What the dashboard sees.Stated
AI search809Self-reported, observed. Buyers who named it in their own words.Stated
AI search1,150Corrected for the silent half, band 980 to 1,420.Modelled
Dark3,157Neither witness saw anything. Named, not distributed.Unknown

Four lines, three labels, one gap shown as a pair. A reader comparing two of these reports finds the same definitions in both, which is the only reason the 73× gap survives scrutiny.

06

Why not triangulation

Why the paid playbook doesn't transfer.

If you've read attribution content from paid media agencies, you've seen the triangulation model: CRM data, platform data, self-reports, and you act where all three agree.

It's good thinking, and it doesn't survive contact with organic unchanged, for two reasons.

01

The middle leg changes character

On paid, the platform is an ad network actively claiming conversions, and triangulation exists to discount that over-claim.

SEO and AI search have no equivalent. The nearest thing is a visibility layer: Search Console for clicks and positions, AI visibility tracking for mention rate and share of voice.

That layer is a leading indicator at the query level, not a per-contact revenue claimant. So it corroborates aggregate trends and is never assigned to an individual lead.

02

Agreement-based rules defund AI search

This is the one that costs companies real money.

"Scale what all three sources agree on" structurally defunds AI search. AI is the one channel where the witnesses almost never agree, because the platform is blind to it, the CRM tags it Direct, and only the self-report catches it.

Agreement is rarest exactly where the measurement gap is biggest. Follow that rule faithfully and you'll systematically cut the channel that's actually growing.

Our Tier B logic is the correction: we don't require agreement; we use one witness to recover what the other is blind to.

The decision layer

The action framework that emerges on the other side has three moves and requires a signal to hold across two paired periods before acting.

  1. Scale
    When both per-lead witnesses support it, and the visibility layer is rising.
  2. Deprioritize
    When traffic and impressions are present but no pipeline recovery follows. Deprioritize, not delete, because organic compounds.
  3. Test
    When the sources split: build out the cluster, watch recovered pipeline and visibility, then decide.
07

Limits

What this method doesn't claim.

Stating the limits is part of why it holds up in the room.

  1. It's not per-lead precision
    After referrer stripping, nobody can hand you a certain source for every lead, and anyone who says otherwise is selling you a dashboard. The method produces corroborated ranges and trends.
  2. It's not causal proof
    It shows presence and influence, which are the right inputs for a budget decision. Proving causation takes incrementality testing, which needs volumes most B2B SaaS companies don't have.
  3. Self-report stays biased even after correction
    The band adjusts for who answered, not for what they misremember. Open text dampens the familiarity bias a dropdown would create, but it doesn't eliminate recall error.
  4. The Dark bucket is an estimate
    Reported as a named range, never blended into the confirmed counts.

Do this todayRun the first classification pass

  1. 01

    Read every form answer as written. Do not clean the text yet. The phrasing is the evidence.

    Output
    Raw answer column

  2. 02

    Tag each answer to a channel by what the buyer named, not by what you wish they had named.

    Output
    Channel column

  3. 03

    Set the tier: both agree (A), one recovers the other (B), one witness only (C), the two disagree (D), or neither saw anything (E).

    Output
    Tier column

  4. 04

    Apply the conflict rule where they disagree. Demand creation goes to the human witness; clicks stay with the machine.

    Output
    Resolved channel

  5. 05

    Run the correction, report the band, and name the Dark bucket at its real size.

    Output
    Raw + corrected pair

Done whenEvery contact carries a tier, every tier traces to two named fields, and a finance reviewer can follow any single row end to end.

08

The takeaway

A number the CFO can't dismantle.

Two witnesses already on record in your HubSpot. A five-tier matrix anyone in finance can audit. Conflict rules that respect which witness could see which channel.

Corrections shown as bands, not points. A Dark bucket you name instead of hide.

Rolled up to accounts, because deals close at accounts, and trended over paired periods so one hot month can't write the story.

That's the Two-Witness Rule, and it's a more truthful picture of an 88-touch, multi-stakeholder journey than either signal pretending to be the source.

And it's the difference between defending a channel with a number the CFO can dismantle in one question, and walking in with a picture they can't.

We run AI search and SEO programs exclusively for B2B SaaS companies. If you want a senior operator to audit your category's AI search landscape, map the prompts that matter for your ICP, and hand you a prioritized 90-day plan, let's talk

Next step

Your GEO plan, built on your numbers.

Give us your domain and your pipeline goal. We map the prompts your buyers are asking, build your GEO marketing plan against them, and forecast the pipeline the next 90 days can realistically produce.

Your plan · Walked through live
Founder-built
Justin Berg
Founder · Rock the Rankings

What we walk through

01Your prompt map: the buying prompts and queries that land you on a vendor shortlist.
02Where you show up today vs. your three closest competitors and where the gaps exist.
03The 90-day sequence: what we would ship, in what order.
04The 3-scenario ROI forecast, run on your actual numbers.
No SDRs · ONLY SENIOR OPERATORS · 300+ B2B SAAS ENGAGEMENTS