Every marketing team using HubSpot eventually hits the same meeting: HubSpot says 4,120 sessions and 38 conversions, GA4 says 4,870 sessions and 31 conversions, and nobody can explain the gap. The instinct is that one tool is broken. Neither is. They are answering different questions with different rules, and once you know which rules differ, the numbers stop being a mystery and start being useful.
The gap is normal. In the portals we audit, a 5–15% difference in sessions between HubSpot and GA4 is expected behaviour. What is not normal is a 40% gap, conversions that appear in one tool and not the other, or a source breakdown where half your traffic lands in direct — those are real tracking faults worth fixing.
This guide separates the two. First the structural differences you should stop trying to reconcile, then the genuine misconfigurations we look for during HubSpot technical SEO work — and a simple rule for which tool owns which answer.
1. Sessions are defined differently, so totals can never match
HubSpot's analytics are contact-centric: it tracks visits with its own tracking code and stitches activity onto contact records once someone is identified through a form, a tracked email click or chat. GA4 is event-centric and privacy-modelled: it counts events, groups them into sessions, and applies its own timeout and attribution logic on top.
The practical consequences are unavoidable. HubSpot's session window and GA4's session window end at different moments, GA4 resets a session on a new campaign parameter, and GA4 applies data thresholds and modelling to sparse segments while HubSpot does not.
Chasing a match here is wasted effort. Use each tool's own numbers consistently over time — a 12% gap that stays a 12% gap month after month is a healthy sign, and a sudden change in the gap is the alert worth watching.
2. Cookie consent hides different amounts of traffic from each tool
If you run a consent banner, both tools lose visitors who decline — but rarely the same ones. HubSpot's tracking code respects its own consent settings and cookie categories; GA4 respects your consent mode implementation. Configure one strictly and the other loosely and you have manufactured a permanent gap.
This is the single biggest cause of large discrepancies we see in EU-facing portals. A banner that blocks HubSpot analytics until explicit opt-in while GA4 runs in a modelled consent mode will show two completely different worlds.
Fix it by deciding your consent policy once and implementing it identically in both: the same categories, the same default state, the same regions. Then document it, because in six months someone will ask why the numbers moved.
3. Source attribution rules disagree — especially on 'direct'
HubSpot assigns an original source and a latest source per contact; GA4 assigns a session-scoped source plus a data-driven or last-click model for conversions. So a contact HubSpot files under organic search — because that is how they first arrived in March — can convert in a GA4 session credited to paid social in September. Both are correct answers to different questions.
A bloated direct bucket, though, is a real fault. Its usual causes: internal links or email links stripped of tracking parameters, redirect chains that drop the referrer, links inside PDFs and documents, QR codes without UTMs, and pasted URLs where the campaign parameters were trimmed.
We standardise UTM conventions, remove redirect hops on campaign URLs and make sure email and CTA links carry parameters through to the landing page. The landing page checklist covers the campaign-side details.
| Question | Trust | Why |
|---|---|---|
| Which page produced this deal? | HubSpot | It joins page views to the contact and the deal record |
| How much organic traffic did we get? | GA4 | Broader session modelling and Search Console pairing |
| What is our form conversion rate? | HubSpot | Form submissions are first-party objects, not events |
| Which channel drove the most sessions? | GA4 | Session-scoped channel grouping is purpose-built |
| What is pipeline value by source? | HubSpot | Only HubSpot knows the deal amount |
| How do users move through the page? | GA4 | Event-level scroll, click and engagement data |
| Did this email lead to revenue? | HubSpot | Email, contact and deal live in one system |
4. Conversions are counted on completely different objects
In HubSpot a conversion is usually a form submission tied to a contact — deduplicated, so the same person filling in three forms is one contact with three submissions. In GA4 a conversion is an event you flagged as a key event, counted per session or per user depending on the setting.
That is why HubSpot commonly shows fewer conversions than GA4: duplicates, test submissions and repeat downloads collapse onto existing contacts, while GA4 counts each firing event. Add a thank-you-page event that also fires on refresh and the gap widens further.
The fix is definitional, not technical. Write down what counts as a conversion for the business, then configure both tools to that definition and stop comparing the raw totals across them.
5. Tracking code faults that are worth hunting down
Some gaps really are bugs. The list we work through: the HubSpot tracking code missing from non-HubSpot pages such as a WordPress blog on a subdomain, GA4 present twice so sessions inflate, the code sitting below other scripts that break execution, and tracking absent from thank-you pages so conversions never register.
Cross-domain setups cause more damage than anything else. If your site is on one domain and your booking tool or checkout on another, a visitor crossing the boundary starts a fresh session and loses the original source unless cross-domain measurement is configured in both tools.
Speed matters too: scripts blocked by a slow third-party tag or a heavy hero can fail to fire on mobile entirely. Our Core Web Vitals guide walks through the loading order we use.
The rule we give every client
Use HubSpot for anything that touches a person, a deal or revenue: which page produced the enquiry, what the pipeline is worth by source, whether this campaign generated customers rather than clicks. That join between behaviour and money is the reason to run marketing on the same platform as the CRM.
Use GA4 for anything that touches traffic and behaviour: channel volumes, landing page performance, engagement, search visibility paired with Search Console. It sees the anonymous majority HubSpot never identifies.
Then pick one tool per report and never mix them in the same chart. Most of the reporting arguments we walk into are not analytics problems at all — they are two definitions competing for one slide. If the underlying CRM data is also inconsistent, start with the CRM data cleanup guide first, because clean attribution on dirty records still lies.
