Evergreen Growth & Marketing - B2B LinkedIn Ads Agency
    Tracking · HubSpot

    How to track LinkedIn Ads in HubSpot, and why the numbers never match

    Campaign Manager says 31 leads. HubSpot says 19. Your sales team swears they spoke to four people who mentioned an ad, and none of those four have LinkedIn on their record. Nobody is lying. The two systems count different things, at different moments, using different rules, and until you know which of your gaps is a real bug and which is just arithmetic, you will keep re-litigating the same argument every month.

    13 min read• James Green• Updated 2026
    5
    Setup steps
    1 hr
    For the core config
    90 days
    First-touch window
    2
    Sources of truth, reconciled

    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.

    Ad account
    Step 1
    Form sync
    Step 2
    Hidden fields
    Step 3
    Reconcile
    Step 4
    01
    The lever

    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.

    What to do
    • 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.
    Screw-up to avoid
    Connecting it and assuming attribution is now handled
    The connection populates ad-level cost and click data. It does not, on its own, guarantee that a contact created six months after the click carries the campaign on their record. That is the hidden field job in step three.
    02
    The lever

    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.

    What to do
    • 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."

    Want this run for you?

    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.

    03
    The lever

    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.

    What to do
    • 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.
    04
    The lever

    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.

    1
    Different events

    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.

    2
    Different clocks

    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.

    3
    Different attribution windows

    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.

    4
    Deduplication and existing contacts

    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.

    5
    Consent, blockers and in-app browsers

    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.

    Screw-up to avoid
    Trying to force the two numbers to reconcile exactly
    They will not, and chasing it burns weeks. Pick one system as the operational source of truth for spend decisions, use the other as the sanity check, and report the gap openly rather than quietly picking whichever number looks better that month.
    05
    The lever

    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.

    What to report
    • 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

    1. LinkedIn ad account connected through an admin user that will still exist next year.
    2. One UTM taxonomy, applied to every live ad, with consistent casing.
    3. Custom properties for LinkedIn campaign, campaign ID and creative, mapped in the Lead Gen Form sync.
    4. First-touch properties set to store the first value only, populated by hidden fields on every form.
    5. Attribution appended to outbound booking links, and the booking domain excluded from referral traffic.
    6. Self-reported source question on the booking form.
    7. A monthly company-level match between ad exposure and new pipeline accounts.
    8. 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

    Typical engagement: Starter (£1,250/mo) for tracking work, Growth if campaigns come with it

    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.
    Pricing

    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.