GA4 Troubleshooting

HubSpot GA4 Attribution Mismatch? Fix Source/Medium Drift First

If HubSpot says a campaign influenced pipeline but GA4 splits the same traffic across Direct, Email, or Unassigned, start with source/medium drift before blaming the model.

Jul 1, 2026 10 min readBy The UTM Drift Guard team
GA4 Troubleshooting
EmailEMAILe-mailemail

HubSpot says the email, paid social, or landing page did its job. GA4 says the same traffic arrived as Direct, Unassigned, or three different source / medium rows. That is the classic HubSpot GA4 attribution mismatch pattern. In most accounts, the first problem is not the attribution model. It is upstream labeling drift: one campaign tagged five ways, a landing page that drops UTMs, or a HubSpot handoff that makes one acquisition path look like several.

Why HubSpot and GA4 disagree so often#

HubSpot and GA4 are not trying to answer the same exact question. HubSpot cares about campaign influence, lifecycle progression, and CRM-linked outcomes. GA4 cares about sessions, channels, and on-site behavior. Some difference is normal. The real problem is when the difference becomes too big to explain with model logic alone. If HubSpot says email created demand but GA4 spreads that same traffic across hubspot / email, email / email, direct / (none), and Unassigned, you are not looking at a subtle modeling disagreement. You are looking at a classification problem.

That matters because GA4 is case-sensitive, so email, Email, and EMAIL are different mediums. On top of that, 10–20% of GA4 sessions commonly land in Unassigned, and as much as 26% of conversions can be credited to the wrong channel when UTM data is fragmented. Once the account has that kind of drift, every HubSpot-to-GA4 comparison becomes noisier than it should be.

  1. 1Campaign builtHubSpot email, ad, or landing page is tagged
  2. 2Click happensThe browser opens a tagged URL
  3. 3Landing page loadsUTMs must survive redirects and consent timing
  4. 4Form or checkout pathSession context must persist to conversion
  5. 5Reports comparedHubSpot and GA4 disagree if one hop failed
Most HubSpot-to-GA4 mismatches happen because one handoff rewrites, strips, or fragments the original campaign label.

The practical rule

If one acquisition path is labeled three different ways, fix the labeling first. Do not waste the first hour arguing about first-touch, last-touch, or data-driven attribution on top of unstable inputs.

Run the HubSpot GA4 mismatch audit in 6 steps#

  1. 1

    1) Export raw source / medium and campaign rows from GA4

    Start with the raw acquisition rows, not a dashboard screenshot. Look for the same traffic lane split across values like hubspot, HubSpot, newsletter, email, hs_email, or (direct) / (none). If the export is already fragmented, the mismatch is visible before you touch any campaign settings.

  2. 2

    2) Compare one HubSpot email link and one landing-page CTA link

    Open the exact live URLs. Confirm utm_source, utm_medium, and utm_campaign are present on the final landing-page URL, not only in the builder. If the final URL is clean for one path but not the other, you have narrowed the break to a specific template or redirect chain.

  3. 3

    3) Standardize utm_medium before you do anything else

    A team often invents descriptive mediums like newsletter, workflow, hs-email, or lead-nurture. They feel useful, but they split one lifecycle lane into several GA4 rows. Use one stable medium policy and move extra detail into utm_campaign or utm_content. UTM naming convention for teams explains the governance side.

  4. 4

    4) Check whether campaign names are drifting by case, spaces, or encoding

    A campaign should not appear once as q3_demo_push, once as Q3 Demo Push, and once as q3-demo-push. That is not three campaigns. It is one campaign reported three ways. This is the same pattern behind many GA4 UTM not working complaints.

  5. 5

    5) Trace the conversion path after the first page view

    If the landing page keeps the UTMs but the final conversion still lands in Direct or Unassigned, the leak is later in the journey. Check consent timing, redirects, embedded forms, booking links, subdomains, and checkout or meeting-booking handoffs. The original session may be arriving cleanly and then getting reset before the conversion is recorded.

  6. 6

    6) Grade the drift before you rewrite templates

    Do not make changes one link at a time without preserving the before-state. Grade the export first, cluster the biggest duplicates, and rank them by traffic impact. That gives you a clear cleanup queue and a proof asset you can share with operators, leadership, or clients.

A
B
C
D
F
D56 / 100D - reporting is usable for rough trends, but channel trust is weakened by drift and session loss
A simple grade makes the mismatch legible to non-specialists before the deeper cleanup starts.

What to score inside a HubSpot source/medium audit#

The fastest agency or RevOps-friendly audit is a source/medium audit, not a giant attribution workshop. You are checking whether acquisition labels are stable enough for leadership decisions. If one email program appears under four mediums and two sources, the reporting layer is already unstable even if every dashboard still loads.

A practical scorecard for HubSpot-to-GA4 cleanup triage.
Audit areaWhat to look forWhy it breaks trust
Source consistencyhubspot, HubSpot, newsletter, or custom source names for the same laneOne acquisition source becomes multiple rows, so comparisons stop being apples to apples
Medium consistencyemail, Email, workflow, hs-email, lead-nurtureGA4 treats one lifecycle lane as several channels
Campaign formattingCase drift, spaces, date suffix drift, or encoded tokensOne campaign looks like several campaigns in reporting
Landing-page integrityUTMs present in the builder but missing on the final pageThe session arrives already stripped or rewritten
Post-click persistenceForms, meetings, or checkout paths reset the sessionRevenue or conversion reporting falls into Direct or Unassigned
hubspotHubSpotnewsletter
hubspot
emailEmailworkflowhs-email
email
demo-request-q3Demo Request Q3demo_request_q3
demo-request-q3
paid-socialpaid_socialPaid Social
paid-social
Most “mismatch” screenshots are really one lifecycle program split across avoidable naming variants.

A mini example: one HubSpot campaign, four different realities#

This is the pattern agencies and in-house ops teams keep running into. One team launches an email, a paid-social retargeting push, and a landing page using slightly different naming habits. HubSpot can still show campaign influence because the activity exists in the CRM. GA4, meanwhile, receives several versions of what should be one clean path. The mismatch feels mysterious until you line up the actual query strings.

Four links from one promotion, tagged four different ways.
https://example.com/demo?utm_source=hubspot&utm_medium=email&utm_campaign=demo-request-q3
https://example.com/demo?utm_source=HubSpot&utm_medium=Email&utm_campaign=Demo Request Q3
https://example.com/demo?utm_source=newsletter&utm_medium=workflow&utm_campaign=demo_request_q3
https://example.com/demo?utm_source=hubspot&utm_medium=lead-nurture&utm_campaign=demo-request-q3-2026

Before cleanup

One HubSpot campaign split across several mediumsCampaign names vary by case and separatorLeadership sees Direct or Unassigned growingRevOps spends time defending the data instead of using it

After cleanup

One canonical source policyOne canonical medium policyCampaign tokens follow one structureHubSpot and GA4 still differ, but the difference is explainable
The cleanup goal is intentionally boring: fewer labels, fewer debates, and cleaner attribution handoffs.

A good client-facing question

Ask whether the team would feel comfortable defending last month's email or campaign totals in front of finance. If the answer is hesitant, start with the source/medium audit, not a long attribution theory session.

The 5 most common root causes behind HubSpot GA4 mismatch#

  • The same lifecycle or paid campaign uses multiple utm_medium values across HubSpot assets.
  • Case-sensitive source and medium drift splits one channel into several GA4 rows.
  • Campaign names change format between email, landing page, and ad handoff.
  • Redirects, embedded forms, meeting links, or subdomains strip or reset the original UTMs.
  • Teams compare modeled influence in HubSpot against unstable raw acquisition labels in GA4 and mistake that instability for a pure attribution-model issue.

Notice that only the last item is really about models. The first four are data-hygiene problems. That is why a quick audit before a QBR or a one-account pre-audit scorecard often closes the gap faster than another cross-functional reporting meeting. Clean the input labels first. Then compare models on top of a dataset you can actually trust.

How agencies and RevOps teams should use this in practice#

If you sell cleanup, do not position this as a vague analytics health check. Position it as a short proof object: export the rows, grade the drift, show the top clusters, and recommend the next cleanup step. That works especially well for HubSpot-heavy teams because the buyer already feels the commercial pain. The CRM says one story. GA4 says another. A source/medium audit gives them a concrete place to start.

Before you call the mismatch “just attribution”

  • Confirm one canonical source policy is used across HubSpot email, landing pages, and paid handoffs
  • Confirm one canonical medium policy is used for the same acquisition lane
  • Compare live final URLs, not only what the campaign builder shows
  • Export the raw GA4 rows and rank duplicate labels by traffic impact
  • Check whether forms, meetings, redirects, or subdomains reset the session after the first page view
  • Only after that, compare HubSpot and GA4 model logic

Why does HubSpot attribution not match GA4?

Some difference is normal because HubSpot and GA4 measure different parts of the journey. The serious mismatches usually come from source/medium drift, missing or inconsistent UTMs, landing-page redirects, or conversion paths that reset the original session before GA4 records it cleanly.

What is the fastest way to audit a HubSpot GA4 attribution mismatch?

Export raw session source / medium and campaign rows from GA4, then compare the live final URLs used in HubSpot email, landing pages, and paid handoffs. Look for case drift, medium drift, campaign-name drift, and any step where the original UTMs disappear before conversion.

Should HubSpot use different utm_medium values for campaigns and workflows?

Usually no. If the same lifecycle lane uses several medium labels, GA4 splits one channel into several rows. Keep the medium policy stable and use utm_campaign or utm_content to describe the message or send type instead.

Why does GA4 show Direct or Unassigned for HubSpot traffic?

That usually means the original tagged session did not survive cleanly. Common causes are UTMs stripped by redirects, consent timing problems, embedded forms, cross-domain issues, or later conversion steps that reset attribution before GA4 stores the final event.

Can a cleanup audit help agencies sell HubSpot reporting remediation?

Yes. A short export-based audit gives you a proof object you can forward internally or use in discovery. Instead of saying “reporting feels off,” you can show the exact source, medium, and campaign splits that justify the cleanup project.

See where HubSpot traffic is splitting before revenue reporting breaks again

Paste a GA4 export and get an A-F UTM health grade, drift clusters ranked by impact, and a cleanup-ready view of the rows warping HubSpot comparisons.

Run a free audit