The short answer
HubSpot can tell you which contacts and deals LinkedIn Ads touched, but only if you feed it three things: a connected ad account, a form that carries the campaign through to the record, and a first-touch field that nothing else is allowed to overwrite. Miss any of the three and HubSpot falls back to whatever the last visible touch was, which on a nine-month B2B cycle is almost never the ad.
And once it is set up, the numbers still will not match Campaign Manager. That is expected. LinkedIn counts a lead the moment somebody submits inside the app. HubSpot counts a contact once it exists in your database with a valid email that survived deduplication. Different event, different clock, different deduplication rules.
Connect the ad account properly
The LinkedIn Ads integration in HubSpot's ad tools is the plumbing everything else runs through. Connect it with an account that holds actual admin rights on the ad account, not a personal login that will vanish when someone changes job. We have inherited more than one account where the whole attribution chain was hanging off a departed contractor's LinkedIn profile.
Turn on ad tracking so HubSpot appends its own tracking parameters to destination URLs, and check what it does to URLs you already tagged. If you run your own UTM taxonomy, decide which one wins before you switch it on, then apply it across every live ad in one go rather than half the campaigns.
- Connect via an admin-level LinkedIn user on a company account, and note who owns it somewhere the whole team can see.
- Enable ad tracking, then open three live ads and confirm the destination URL is what you expect after HubSpot has had its way with it.
- Decide your naming convention for campaign, medium and content, and stick to it. Inconsistent casing alone will split one campaign into four rows in reporting.
- If you already run a UTM standard, keep it and treat HubSpot's parameters as additive rather than replacing yours.
Lead Gen Forms into HubSpot without losing the campaign
LinkedIn Lead Gen Forms convert well because they pre-fill from the profile and never leave the app. The trade-off is that the submission happens entirely inside LinkedIn, so nothing about your website tracking applies. If the sync is not carrying campaign data through, you get a contact with a name, an email and no idea which ad produced it.
The native integration will map the standard fields. The campaign context is the part that needs deliberate work: map the LinkedIn campaign and creative into dedicated HubSpot properties, not into a generic notes field that reporting cannot filter on.
- Create custom contact properties for LinkedIn campaign name, campaign ID and creative, then map the sync into them explicitly.
- Add hidden fields on the Lead Gen Form itself so the campaign travels with the submission rather than being inferred afterwards.
- Submit a test lead from your own phone and follow it all the way to the HubSpot record before you scale spend.
- Set a workflow that stamps the original campaign on the associated company as well as the contact, because deals are worked at account level.
"A lead with no campaign on it is not a lead you can optimise against. It is just an email address."
Not sure whether your HubSpot is actually recording the campaign?
Book a 30 minute call and walk us through your setup. We will tell you what is likely missing.
Hidden fields: the bit everyone skips
HubSpot stores an original source and a latest source. Both get set by whatever touch was visible at the time, and the latest source gets overwritten constantly. On a long cycle, the ad in February loses to the branded Google search in September, every single time, because the branded search is the one that happened nearest the form.
The fix is unglamorous. Capture the first-touch parameters when somebody first lands, hold them for ninety days, and write them into hidden fields on every HubSpot form. Those fields land on properties that nothing else touches, so the original stays put no matter how many times HubSpot rewrites its own source field.
- Create first-touch source, medium, campaign, landing page and date properties, set to store the first value only.
- Populate them via hidden fields on every embedded HubSpot form, including the ones marketing forgot about.
- Cover the booking handoff too. If a visitor jumps to a scheduler on another domain, append the stored attribution to the link before the click.
- Keep a self-reported "how did you hear about us" field on the booking form. It catches the journeys no tracking can.
Why the numbers never match
Once the setup is right, you still get two different totals. Here is where the difference actually comes from, so you can stop treating a normal gap as a broken system.
LinkedIn counts a form submission inside the app. HubSpot counts a contact record after deduplication. Two people from the same company submitting with the same shared inbox is two leads and one contact.
LinkedIn attributes to the click or impression date. HubSpot attributes to the create date. A lead that submits at 23:50 on the last day of the month lands in a different month depending on which report you read, and time zones make it worse.
LinkedIn's default view-through and click windows are its own. HubSpot's attribution models are separate and configurable. Neither is wrong, but comparing them like for like is meaningless.
If somebody already exists in HubSpot, a new submission updates the record instead of creating one. LinkedIn still counts a new lead. On a retargeting-heavy account this alone explains most of the gap.
Website-based tracking loses a share of sessions before anything is recorded. Lead Gen Forms are unaffected by this, which is why the two channels drift apart differently.
What matters is whether the gap is stable. A consistent gap of ten to twenty percent, month after month, is arithmetic. A gap that jumps to half in one month is a bug, and it is usually a form somebody rebuilt without the hidden fields.
Reporting that survives a board meeting
Single-touch reporting will always undersell LinkedIn on a long cycle, because the ad is rarely the last thing that happens. If you have Marketing Hub Enterprise, the multi-touch revenue attribution reports do most of the work. If you do not, you can get surprisingly close with the first-touch properties from step three and a couple of custom reports.
Then add the layer HubSpot cannot see on its own: company-level ad exposure. Export the companies LinkedIn served impressions to, match them against accounts that entered your pipeline, and you get influenced pipeline alongside directly tracked pipeline. That comparison is usually the moment the conversation about whether ads work ends.
- Directly attributed deals, using first-touch properties rather than HubSpot's overwritten source field.
- Influenced deals, from the company-level match between ad exposure and pipeline accounts.
- Cost per qualified pipeline opportunity, not cost per lead. Lead cost flatters the wrong campaigns.
- The gap between HubSpot and Campaign Manager, tracked as a trend line so anomalies are obvious.
The setup checklist
- LinkedIn ad account connected through an admin user that will still exist next year.
- One UTM taxonomy, applied to every live ad, with consistent casing.
- Custom properties for LinkedIn campaign, campaign ID and creative, mapped in the Lead Gen Form sync.
- First-touch properties set to store the first value only, populated by hidden fields on every form.
- Attribution appended to outbound booking links, and the booking domain excluded from referral traffic.
- Self-reported source question on the booking form.
- A monthly company-level match between ad exposure and new pipeline accounts.
- A documented, expected gap between HubSpot and Campaign Manager, reviewed rather than argued about.
Most of that is an afternoon of configuration and one developer task. The company-level match is the ongoing bit, and it is the one that actually changes what people believe about the channel.
Common questions
If you would rather we set the HubSpot side up properly
- Full audit of your HubSpot ad connection, forms, properties and source fields.
- First-touch properties built and populated across every live form and booking handoff.
- Lead Gen Form sync mapped so campaign and creative land on filterable properties.
- A reconciliation view showing the expected gap between HubSpot and Campaign Manager.
- Monthly company-level influence matching so you see influenced pipeline, not just directly tracked leads.
Starter £975/mo, Growth £1,725/mo, Scale £4,025+/mo. Tracking rebuilds usually take two to three weeks and sit inside the monthly retainer rather than as a separate project fee.

