
Here is the uncomfortable truth about marketing channel attribution: most B2B teams are making million-dollar budget decisions using data that captures only a fraction of the real buyer journey.
I know that because I have run a 7-figure ABM program on LinkedIn and spent more hours than I would like trying to work out which channels actually drove pipeline.
The answer was never neat. It was never simply “LinkedIn did it” or “Google did it.”
It was usually a messy mix of ad impressions, clicks, content consumption, outbound touches, and timing, while the tools in front of us showed only isolated fragments.
In this post, I will cover:

Short on time?
Here’s a quick summary:
The core problem with marketing channel attribution is simple: every channel gives you different data, at different levels of granularity, under different constraints.
Most teams still talk about channels as if they all work the same way.
They do not.
That is the starting mistake.
LinkedIn Ads is the outlier.
Its API returns engagement data, impressions, clicks, and engagements, broken down by company.

That means you can see that Acme Corp got 47 impressions, 3 engagements, and 1 click on your product comparison campaign last month.
There is no guessing and no reverse engineering.
The data is already structured at the company level.
That is also why LinkedIn is such a strong fit for account-based marketing. It is the only major ad platform that gives you company-level engagement data natively.
Google Ads, Reddit Ads, organic search, AI referrals, email, and direct traffic do not work like that.
Their APIs can tell you that a click happened, a visit happened, or a conversion happened, but they do not tell you which company that person belongs to.
That is a major gap in B2B attribution, because you cannot confidently attribute a deal to a channel if you cannot tie that channel activity back to a company.
If Google Ads, Reddit, and organic search do not tell you which company clicked, how do you connect those touchpoints to revenue?
In practice, there are two workable approaches.
When someone clicks a Google Ad and lands on your website, their IP address can sometimes be matched to a company using IP intelligence databases.
Tools like Vector, RB2B, Leadfeeder, and Clearbit do exactly that.
They take anonymous web traffic and resolve a share of it to company names.
The workflow usually looks like this:
The limitation is the match rate.
Reverse IP usually identifies around 40% of traffic, depending on the tool, your traffic mix, and whether visitors are browsing from corporate networks or home WiFi.

It tends to work better for enterprise and mid-market audiences than for SMB traffic.

For contacts who have already filled out a form and exist in your CRM, especially in HubSpot, you can take a more accurate route.
HubSpot stores the activity history of known contacts, including page views and UTMs.
That makes it possible to reconstruct which campaigns and channels they engaged with before they converted. The process looks like this:
utm_source=google and utm_campaign=competitor_keywordsThis method is more precise than reverse IP because you know exactly who the person is.
The trade-off is that it only works for known contacts.
It tells you nothing about anonymous visitors who never fill out a form.
That is why the best practical setup combines both methods: reverse IP for anonymous traffic, CRM matching for known contacts.
Once you have mapped channel touchpoints to companies and deals, the next decision is how to distribute credit.
This is where attribution models come in, and it is also where many teams go wrong.

Last-touch gives 100% of the credit to the final touchpoint before conversion.
So if a prospect saw 12 LinkedIn ads, read 3 blog posts, attended a webinar, and then clicked a Google Ad before booking a demo, last-touch says Google Ads drove the deal.
That is like saying someone got home because of the front door.
The front door was the last thing they touched, yes, but it was not the reason they arrived there.
Last-touch consistently over-credits bottom-funnel channels like branded search, retargeting, and direct traffic, while under-crediting the channels that created awareness and consideration earlier in the journey.
First-touch does the opposite.
It gives all the credit to the first recorded interaction.
If someone first discovered your company through a LinkedIn Thought Leader Ad and converted four months later through a direct visit, first-touch says LinkedIn drove the deal.
That can be useful when you want to understand which channels start conversations, but it ignores everything that happened between awareness and conversion, which in B2B is often months of nurturing.
Multi-touch attribution distributes credit across the full journey.
There are several ways to do that:
| Model | How It Works | Best For |
|---|---|---|
| Linear | Equal credit to every touchpoint | Simple, fair baseline |
| Time-decay | More credit to touchpoints closer to conversion | Shorter sales cycles (under 3 months) |
| Position-based (U-shaped) | 40% to first touch, 40% to last touch, 20% split across the middle | Balanced view of acquisition and conversion |
| W-shaped | Credits first touch, lead creation, and opportunity creation most heavily | B2B funnels with clear stage transitions |
| Data-driven/AI | Machine learning assigns credit based on measured statistical impact | High-volume teams with enough data to support modeling |
For most B2B SaaS teams, position-based attribution is the safest place to start.
It respects both the channel that created awareness and the channel that captured conversion, while still acknowledging the middle touches that moved the account forward.
I have seen how different the budget conversation becomes once you look at multi-touch. In my own ABM work, LinkedIn ads rarely appeared as the final touch before a demo.
But when we looked at full journeys, LinkedIn showed up in more than 60% of closed-won paths.
If we had relied only on last-touch, we would have cut spend on the very channel that was warming up the accounts in our pipeline.
ZenABM, by the way, provides multi-channel attribution for each deal in one place based on LinkedIn ads engagement data pulled from the LinkedIn API and other data pulled from your CRM.


Here is the setup I would recommend if you want attribution that is actually useful.
I am being deliberately specific because generic advice like “implement multi-touch attribution” is meaningless if no one explains the mechanics.
You need three connected data streams:

Every paid click, every content asset, and every email should follow the same naming logic:
utm_source: Channel, for example linkedin, google, reddit, organicutm_medium: Type, for example paid, cpc, social, emailutm_campaign: Campaign name that matches your internal naming structureutm_content: Specific ad, creative, or variationIf your UTMs are inconsistent, your attribution output will be inconsistent too.
It is the least glamorous part of the setup and one of the most important.
For each closed-won deal, reconstruct the company journey:
This is the point where attribution becomes genuinely useful.
A deal that appears “organic” in a last-touch report can look very different once you rebuild the full timeline.
You may discover months of LinkedIn ad exposure, a content journey, a few outbound touches, and then an organic conversion at the end.
Without the timeline, one channel gets all the credit, and the rest disappear from view.
Apply your selected model to the touchpoint data.
For most B2B teams starting out, position-based attribution is the best default.
If you are working with high volume and strong data hygiene, you can start testing W-shaped or data-driven models as well.
Run first-touch, last-touch, and multi-touch on the same data set. The difference between those models is where the insight lives.
If LinkedIn looks strong in first-touch but almost invisible in last-touch, that tells you it is acting as a demand creator.
If branded Google search dominates last-touch but barely appears in first-touch, it is acting more like a conversion closer than a demand source.
Not all channels are equally measurable. Here is the practical reality of what each one gives you:
| Channel | Company-Level Data from API? | How to Attribute to Companies |
|---|---|---|
| LinkedIn Ads | Yes, impressions, engagements, and clicks by company | Use the native API data directly, or a tool like ZenABM to pull and structure it. |
| Google Ads | No | Use reverse IP on landing pages plus CRM contact matching via gclid and UTMs. |
| Reddit Ads | No | Use reverse IP on landing pages plus CRM matching via UTMs. |
| Organic Search | No | Use reverse IP on the website plus CRM contact matching via landing page URLs and session history. |
| AI Referrals | No | Track referrer URLs in analytics, then combine that with reverse IP and CRM matching. |
| Yes, at the contact level | Use CRM activity data, since the contact is already associated with a company. | |
| Direct Traffic | No | Use reverse IP plus CRM matching, although this is often the hardest channel to attribute confidently. |
The key takeaway is that LinkedIn is the only paid ad channel that gives you company-level engagement data natively.
Everything else requires a stitching layer, usually some mix of reverse IP and CRM activity matching.
That is not a minor technical footnote. It fundamentally changes what you can measure cleanly and what you can only estimate.
Some common mistakes related to marketing channel attribution that you must avoid:
Marketing channel attribution gets much more useful once you stop treating every channel as if it gives you the same kind of data.
LinkedIn gives you native company-level engagement.
Google, Reddit, organic, and direct do not, so you need a stitching layer through reverse IP, CRM activity, and clean UTMs to rebuild the real journey.
That is why B2B attribution is not just about picking a model. It is about connecting fragmented touchpoints to companies and then to revenue.
If LinkedIn is one of your main growth channels, ZenABM helps you do exactly that by pulling company-level LinkedIn ad engagement, mapping it to CRM deals, and showing cross-channel touchpoints in one company journey, so you can make budget decisions based on actual pipeline influence, not partial reports.
Try ZenABM for free (37-day free trial) or book a demo to know more!
Some common questions about Marketing channel attribution:
Marketing channel attribution is the process of connecting revenue and deals back to the marketing channels that influenced them.
In B2B, that means mapping touchpoints across LinkedIn, Google, organic, email, and other channels to specific companies and deals in your CRM, then distributing credit using an attribution model such as first-touch, last-touch, or multi-touch.
B2B buying cycles usually involve multiple stakeholders, long consideration windows, and touchpoints spread across several channels.
A single deal can include dozens of ad impressions, multiple content interactions, and several people from the same company.
That makes account-level attribution necessary, and it also means you need much longer lookback windows than in most B2C setups.
For most B2B teams, position-based attribution is the best place to start. It gives meaningful credit to both the first touch and the conversion touch, while still acknowledging the middle of the journey.
If you have more mature data and clearer funnel-stage tracking, W-shaped or data-driven models can add more nuance. What most teams should avoid is relying only on last-touch.
Google Ads does not provide company-level identity in its API.
The two practical methods are reverse IP lookup, which identifies a company when a visitor lands on your website, and CRM contact matching, where gclids and UTMs stored in HubSpot or Salesforce are mapped back to the contact’s company.
Using both methods together gives you the fullest picture.
Yes, you can start with solid UTM tagging and CRM reporting.
HubSpot’s attribution reports already give many teams a workable starting point. For LinkedIn-specific company-level attribution, ZenABM starts at $59/month and now includes cross-channel touchpoint tracking alongside LinkedIn ad engagement data.
More complex multi-channel setups may still benefit from dedicated platforms like Dreamdata or HockeyStack.