Marketing Attribution in Practice: A Real Example
A CMO once told me her paid search "didn't work." Google Ads reported 140 conversions that month, but the sales team closed eight deals and she had no idea which ads produced them. The platform counted form fills. She needed to count revenue. Those are not the same number, and the gap between them is where most B2B marketing budgets quietly leak.
This article walks through one full attribution build for a fictional but realistic B2B company. You will see the exact tracking, the data that flows where, the model we picked and why, and the report leadership actually read. Every number here is illustrative, chosen to make the math legible, not pulled from a real account. The point is the wiring, not the figures.
The company and the problem
Meet Northbridge Systems (made up), a 40-person firm selling a workflow platform to mid-market operations teams. Average deal size around $18,000. Sales cycle of roughly three months. They run Google Ads, LinkedIn Ads, organic search, and a monthly webinar. Leads land in HubSpot, deals close in HubSpot, and finance tracks revenue in a separate spreadsheet that nobody connected to marketing.
The symptom was familiar. Each channel claimed credit in its own dashboard. Add up the platform-reported conversions and you got 312 "leads" in a quarter. The CRM showed 180 actual contacts. Finance counted 22 closed deals worth $410,000. Three systems, three truths, zero agreement.
The goal we set was narrow and answerable: for every closed deal, know which channels touched the buyer and how much each channel cost. Once you can do that, the budget conversation stops being about opinions.
Step 1: Decide what counts as a conversion
Before any tracking, Northbridge wrote down the events that matter and ranked them. This sounds obvious. Most teams skip it and end up measuring whatever the pixel happened to fire on.
Their list, from soft to hard:
- Newsletter signup (low intent, not a lead)
- Gated content download (marketing-qualified signal)
- Demo request (sales-qualified signal)
- Closed-won deal (the only event finance cares about)
The decision that mattered: a "conversion" for optimizing ad bidding would be the demo request, not the newsletter signup. Optimize toward the soft event and the algorithm floods you with cheap, junk leads. Northbridge had been doing exactly that, which explained the 312-versus-22 spread. Decide which event your bidding optimizes toward before you write a single line of tracking code.
Step 2: Tag the traffic consistently
Attribution falls apart at the source when traffic is untagged or tagged sloppily. Every paid and campaign link needs UTM parameters, applied to one convention, no exceptions.
Northbridge standardized on lowercase values and a fixed taxonomy:
| Parameter | Value rule | Example |
|---|---|---|
| utm_source | the platform | google, linkedin, newsletter |
| utm_medium | the channel type | cpc, paid-social, email |
| utm_campaign | campaign name, dated | demand-q2-2026 |
| utm_content | ad or asset variant | carousel-a, text-b |
The rule they enforced: if a link is untagged, it does not get published. Google Ads auto-tagging (the GCLID) handles the click-to-CRM match for paid search, but everything else, social posts, email, partner links, needed manual UTMs. Inconsistent casing alone (Google versus google) splits one channel into two rows and ruins the report. Our walkthrough on UTM parameters has the full naming convention if you want to copy it.
Step 3: Connect the click to the CRM record
Tagging tells you how someone arrived. To tie that to revenue, the source data has to ride along with the lead into the CRM and stay attached to the deal.
Here is the chain Northbridge built:
- A visitor clicks a tagged ad and lands on the site. A small script reads the UTM values (and the GCLID) and writes them to hidden form fields and a first-party cookie.
- When the visitor submits a demo request, those hidden fields post into HubSpot as contact properties:
original_source,original_medium,original_campaign, plusgclid. - HubSpot stamps the contact with first-touch and last-touch source automatically, but the custom properties preserve the exact campaign, which the native fields blur.
- When sales converts the contact to a deal and later marks it closed-won, the source properties are already on the record. No re-keying.
The one piece people forget is the offline conversion loop. A demo request is not revenue. Northbridge pushed closed-won deals (with their GCLID) back into Google Ads as offline conversions, so the bidding algorithm learned which clicks became money, not which clicks became forms. That single change is what makes CRM and ads integration worth the setup effort: the platform finally optimizes toward the event finance counts.
Step 4: Pick an attribution model on purpose
With touchpoints captured, Northbridge had to decide how to split credit when a buyer touches several channels. There is no universally correct model. There is a correct model for the question you are asking.
They looked at a typical winning buyer's path:
Last-touch would hand the entire $18,000 deal to Google Ads and tell them to cut organic and LinkedIn. First-touch would do the reverse. Both are wrong for a four-touch journey, and choosing between them is the heart of which attribution model to pick.
Northbridge chose two models and ran them side by side:
- Last non-direct touch for day-to-day ad bidding, because it is simple, stable, and matches how the ad platforms optimize.
- Linear (even credit across touches) for the quarterly budget review, because it stops the team from starving the early-funnel channels that introduce buyers.
Running both is not a hedge. Each answers a different question, and showing leadership the spread between them was more honest than pretending one model is the truth.
Step 5: Read the report
Here is the simplified quarterly view Northbridge built, with revenue assigned under each model. Numbers are illustrative.
| Channel | Spend | Deals (last-touch) | Revenue (last-touch) | Revenue (linear) |
|---|---|---|---|---|
| Google Ads | $34,000 | 12 | $216,000 | $138,000 |
| LinkedIn Ads | $22,000 | 4 | $72,000 | $104,000 |
| Organic | $9,000 | 3 | $54,000 | $96,000 |
| Webinar | $6,000 | 3 | $54,000 | $72,000 |
Read the two revenue columns together and the story changes. Under last-touch, Google Ads looks like the whole business and LinkedIn looks marginal. Under linear, LinkedIn and organic carry far more weight, because they keep showing up in the middle of winning journeys. The truth is somewhere between the columns, which is the point of looking at both.
The action items wrote themselves. Google Ads return on ad spend was real, so its budget held. LinkedIn was not a closer but it was a frequent assister, so cutting it would have quietly hurt Google's numbers. Organic punched above its cost and deserved more investment. Webinar paid for itself and stayed. None of that was visible when each platform graded its own homework.
Common ways this build breaks
A few failure modes show up almost every time.
Untagged traffic collapses into "direct" or "(not set)" and silently steals credit from the channel that earned it. If your direct traffic is suspiciously large, you have a tagging hole.
The CRM and the ad platform disagree on what a conversion is. The platform counts a form fill the moment it fires; the CRM only counts a lead after deduplication and spam filtering. Expect the platform number to run higher, and reconcile to the CRM as the source of truth. This is the core of closed-loop reporting: every closed deal traces back to a first click.
Long sales cycles outrun the lookback window. If your buyers take four months and your analytics window is 90 days, the first touch falls off the record and organic looks weaker than it is. Match the window to your actual cycle.
FAQ
Which attribution model should I start with?
Last non-direct touch. It is the default in most platforms, it is easy to explain, and it gives you a stable baseline. Add a multi-touch view (linear or position-based) once you trust your tracking and want to value the early-funnel channels.
Do I need an expensive attribution tool?
Usually not at the start. A correctly tagged site, a CRM that stores source data on the contact and deal, and offline conversion upload back to the ad platform will answer most questions. Dedicated attribution software earns its cost when you have many channels, high volume, and a need for data-driven or algorithmic models.
How long until the data is trustworthy?
Plan for one full sales cycle plus a few weeks of clean tracking before you make budget decisions. For a three-month cycle, that means roughly a quarter. Acting on two weeks of data in a long-cycle business is how channels get cut by mistake.
What is the difference between conversions in Google Ads and leads in my CRM?
The platform counts an action on your site (a form submit, a call). Your CRM counts a real, deduplicated person who passed spam and qualification checks. The CRM number is lower and more honest. Reconcile to it, and push closed deals back to the platform so it optimizes toward revenue instead of raw form fills.
Can I attribute revenue without connecting finance data?
Partly. You can attribute deal counts and pipeline value from the CRM alone. To attribute actual recognized revenue, you need the finance number tied to each deal, even if that link is a monthly export rather than a live integration. Start with CRM deal value, then tighten it.
How does this differ for a long, multi-stakeholder B2B deal?
More touches, more people, and a longer window. First-touch and last-touch both mislead badly, so a multi-touch model matters more. You also need to track the account, not just the individual lead, because three people from one company may each arrive through a different channel.
Putting it together
Attribution is plumbing. It is not glamorous, and it rewards consistency over cleverness. The Northbridge build came down to five moves you can copy:
- Define your conversion events and pick the hard one (demo, not newsletter) for bidding.
- Tag every link with one strict UTM convention, no exceptions.
- Carry source data from the click into the CRM and keep it on the deal.
- Push closed-won deals back to the ad platform as offline conversions.
- Run a simple model for daily bidding and a multi-touch model for budget reviews.
Get those right and the monthly "is marketing working?" meeting turns from a debate into a reading of one table.
If your channels are each claiming credit and the numbers never reconcile, that is a tracking problem with a known fix. We help B2B teams wire attribution end to end, from UTM convention to closed-loop revenue reporting. Send us your current setup and we will run a short audit to show you exactly where credit is leaking and what it is costing you.