Measurement & Reporting

When HubSpot, GA4 and Your Pipeline Report Disagree

Different reports can all be accurate. How to separate expected measurement differences from tracking faults and CRM data problems before a budget decision.

Take, as an example, a B2B software company selling to mid-sized firms in Ireland and the UK. It runs HubSpot’s Marketing Hub and Sales Hub on Professional, has GA4 on its website behind a cookie banner, and uses a sales-engagement tool that creates contacts and logs activity in the CRM.

At the quarterly review, three reports tell three different stories. GA4 shows paid social sessions flat and organic search growing. HubSpot shows paid social as the leading source of new contacts. The pipeline report shows a large share of new opportunities under “Offline sources” or “Direct traffic”, and several deals with no contact attached at all.

The CFO asks a fair question: can we cut the LinkedIn budget?

Nobody in the room can answer it with confidence, and it is tempting to start by arguing about which report is right. I think that is the wrong first question. Reports that disagree are not necessarily wrong. They often count different things, for different people, over different periods. Some of the difference is expected. Some of it comes from tracking or CRM records that genuinely need fixing. And some of what the CFO is asking cannot be answered by any of these reports, however well they agree.

This article works through those in order, using the LinkedIn question as the thread.

First, check whether the reports measure the same thing

Before comparing numbers, write down what each report counts. Four things can differ: the population, the event, the date the report uses, and the commercial outcome it stands for.

Four reports that can disagree, and what each one is actually counting.
Report What it counts Which date it uses What it can stand for
GA4 acquisition reports Users, sessions and key events that GA4 was able to record When the visit or event happened Website behaviour by channel
HubSpot traffic analytics Sessions, new contacts and customers, by source Visit date for sessions; the contact’s creation date for new contacts and customers Which sources bring visitors and new contacts
HubSpot contact attribution Contacts created, with credit shared across the interactions HubSpot recorded When the contact was created Which interactions preceded a contact being created
Pipeline report Deals by stage, amount and owner The deal’s create date or close date, depending on the report Opportunities and revenue the sales process recognised

Seen this way, the company’s three stories are not necessarily in conflict. Paid social can produce flat sessions and a rising number of new contacts in the same quarter. Sessions and contacts are different populations: many sessions never lead to a contact, a new contact may have visited in an earlier quarter, and a contact can be created manually, by an import or by an integration without any tracked visit at all.

The dates matter as much as the populations. HubSpot’s traffic analytics counts new contacts and customers in the period the contact was created (see Analyze your site traffic (opens in a new tab)). A pipeline report filtered on close date counts a deal in the quarter it closed. By default, HubSpot sets the close date to the current day when a deal moves into a closed stage; the automation can be switched off for each pipeline (see Customize close date automation (opens in a new tab)). A buyer who first arrived from a LinkedIn ad in March, became a contact in May and signed in October appears in three different quarters, depending on which report you open.

The same care applies within GA4. Its user acquisition report credits new users to the source of their first visit, its traffic acquisition report credits each session to that session’s source, and key events are credited under the property’s attribution settings. Google advises against comparing metric values across the two acquisition reports, because they are scoped differently (see User acquisition report vs. Traffic acquisition report (opens in a new tab)). A paid social figure taken from one of them is not directly comparable with a figure from the other.

So the first step is a comparison of definitions, not of totals. If two reports count different people over different periods, a difference between them tells you nothing on its own.

Expect some differences, and record why

Even when two tools look at the same visitors, they will not record them identically. HubSpot’s own guidance says its numbers and Google Analytics’ “are not expected to match exactly” (see HubSpot analytics and Google Analytics don’t match (opens in a new tab)). The useful work is knowing which differences are expected in your set-up, and which point to something broken.

How each tool is implemented. The two tracking codes may not run on the same pages. Cross-domain tracking may be set up in one tool and not the other. Internal traffic and bots may be filtered differently. The tools also define a session differently: HubSpot documents that its sessions restart at midnight in the account’s time zone and when a visitor returns from a different source, which Google Analytics does not do. And HubSpot groups sessions by referring domain and its own source categories, while Google Analytics uses source, medium and its channel groupings. Differences in definition are expected. Differences in implementation are not always: a tracking code missing from the pricing pages, or filters that exclude the sales team in one tool but not the other, is a fault worth fixing.

Consent. What each tool records after a visitor accepts or declines cookies depends on how your site is configured, so it is worth checking rather than assuming. If a consent tool blocks a script until the visitor accepts, that tool cannot directly record what the visitor does before accepting, or anything at all if they decline. If the HubSpot tracking code loads and the visitor rejects non-essential cookies, HubSpot says it still registers page views in an aggregated, anonymised way that is not linked to the visitor or any contact (see Cookie banner API (opens in a new tab)). Google’s consent mode has two forms: in the basic form, Google’s tags send nothing until consent is given; in the advanced form, they send cookieless pings while consent is denied, which Google can use for modelling once a site meets its thresholds (see Consent mode overview (opens in a new tab)). The practical step is simple: load your own site, decline and accept in turn, and note which scripts run. That tells you how consent affects the numbers on your site.

Identity. GA4 recognises users through the identifiers available to it: a device identifier from the browser, a User-ID if the site sends one for signed-in users, and, depending on the property’s reporting identity setting, modelling (see About reporting identity (opens in a new tab)). HubSpot tracks a visitor anonymously through a cookie and, when that visitor submits a form, associates their earlier page views with the contact. A visitor who clears their cookies becomes a new visitor. A contact created manually, by import or by a sync has no page views associated with it until they submit a HubSpot form or click through a tracked marketing email (see Track visitors in HubSpot (opens in a new tab)). A buyer who researched on a phone and enquired from a work laptop may appear as two users in GA4 unless the site can identify them across devices, and as one contact in HubSpot with only part of that history attached.

How credit is assigned. Each tool applies its own rules about which interaction gets credit, and over what period. HubSpot’s attribution reports let you choose between models; GA4 applies its own. Two reports using different models can disagree while both are working exactly as designed.

The output of this step is a short note, agreed once, that says which differences are expected on your site and why. Without it, the same explanation can be rediscovered at every review. With it, a new gap that the note does not explain stands out as something to investigate.

Then read what the CRM records say about the pipeline

The pipeline report is where commercial decisions are made, and its source figures are only as meaningful as the records behind them. Several conditions can make a deal’s source look wrong. Whether each is a problem depends on what the business intends the source to mean.

On a deal, HubSpot’s Original Traffic Source is “the original traffic source of the associated contact with the earliest activity for the deal”, falling back to the associated company’s values if there is no contact (see HubSpot’s default deal properties (opens in a new tab)). That definition explains most of what follows.

Four pipeline conditions, and when each becomes a defect.
Condition A limitation when A defect when How to check
Deal with no associated contact The sale genuinely has no identifiable buyer in the CRM yet The process expects every opportunity to name its buyers Count open and recent deals with no contact association
Deal created by Sales before the buyer converted Outbound or partner-led opportunities are part of the model The business wants the deal’s source to mean “what started this opportunity” Compare deal create dates with the associated contacts’ create dates
Contact or deal source shown as “Offline sources” or from an import or integration The record really did arrive that way Records are being created by a route nobody intended Review Record source on a sample of contacts and deals
Missing amount or close date Early-stage deals not yet valued Closed-won deals without the fields revenue reporting relies on Filter closed-won deals for empty amount or dates

The second row matters most for the LinkedIn question. If an account executive creates a deal from outbound work and associates a contact who attended a webinar three years ago, the deal inherits that contact’s original source. The record is accurate; it answers “how did we first meet this person?”, not “what started this opportunity?”. If the CFO’s question is the second one, the report is answering a different question, and no amount of reconciling GA4 will change that.

Lifecycle stages can shift for a similar reason. HubSpot has a setting that sets a chosen lifecycle stage for associated contacts and companies when their first deal is created. It only moves stages forward, and a contact already at Customer stays there (see Automatically set and sync record lifecycle stages (opens in a new tab)). Funnel reports built on lifecycle stages therefore reflect how and when Sales creates deals, as well as what buyers did. I discuss why lifecycle and the commercial relationship need to be designed together in Why HubSpot Lead Management Breaks as B2B Teams Grow.

Where a condition is a defect, check whether it is being re-created by the way records are written: a sales tool that creates deals without contacts, an import that runs every month, a habit nobody agreed. If it is, cleaning up the current records will not stop it. The approach in Why CRM Data Becomes Unreliable Again After a Clean-up applies here: agree what the field should mean, then change the process that writes it.

Know what your reports can support

The last step is about claims rather than causes. A subscription does not make two reports disagree, but it does determine which questions the reports can answer.

HubSpot’s dedicated attribution reporting comes in three types. Contact create attribution is available with Marketing Hub or Content Hub on Professional or Enterprise. Deal create attribution and revenue attribution are available with Marketing Hub Enterprise only. For a deal to be included in revenue attribution, it must be closed-won, have at least one associated contact, and have an amount, a create date and a close date. Interactions also have to be recorded to count: ad clicks, for example, are included only from connected Facebook, Instagram, LinkedIn or Google ad accounts (see Understand attribution reporting (opens in a new tab) and Create attribution reports (opens in a new tab)).

Without Enterprise, the company in this example cannot produce a deal or revenue attribution report that shares credit across a buyer’s interactions. That does not make source reporting on the pipeline impossible. Deals carry source properties of their own, including Original Traffic Source and Record source. HubSpot’s sales analytics suite, available with Sales Hub from Starter upwards, includes a deal revenue by source report that splits deal amounts by the deal’s original source (see Create sales reports in the sales analytics suite (opens in a new tab)). That is a source-based breakdown of deal amounts, not multi-touch attribution: what it shows depends on how the deal’s source is defined and which records are included. Professional subscriptions can also build custom reports on deals. A view of the pipeline by the deal’s original source is a legitimate, single-touch measure, provided everyone reading it knows what that property means and which of the conditions above apply.

The honest options here are to narrow the claim to what the reports can support, to use a simpler measure with its limits stated, or to decide that the question is valuable enough to justify investing in better attribution. None of them requires pretending a report says more than it does.

Back to the LinkedIn question

Once the reports are compared on the same basis, the known differences recorded, and the CRM conditions checked, the CFO can be given an answer about evidence. That answer can be narrower than the original question.

What the reports can reasonably show: whether paid social’s recorded contribution is consistent across tools once definitions and expected differences are allowed for; how many contacts and opportunities have paid social as an original or recent source; and whether those opportunities progress at a different rate from others. Paid social is a category, not a platform. LinkedIn can be separated from it only where the records carry the detail, such as HubSpot’s source drill-down naming the social media site, consistent campaign tagging or connected advertising data. Where that detail is missing, the honest answer is about paid social as a whole.

What stays uncertain: whether those buyers would have arrived anyway without the spend; how many people saw the ads and then came in through search, a referral or a colleague; and how much activity consent, devices and cleared cookies kept out of view. Making the dashboards agree does not resolve any of this. Reconciled reports describe what was recorded; they do not measure what the spend caused.

What the business needs before deciding: an agreed statement of the question (cut, keep or reallocate, and over what horizon); a time window long enough for its sales cycle to show up in the pipeline; the tracking faults and CRM defects that affect the answer fixed or at least sized; and, if the budget at stake is significant, evidence designed to show impact, such as a planned change in spend with a comparison agreed in advance. Smaller decisions may reasonably rest on directional evidence, as long as it is described as directional.

The disagreement between HubSpot, GA4 and the pipeline report is often several things at once: definitions that were never comparable, differences that are expected, faults in tracking or records that need fixing, and questions the reports cannot answer. Separating them is what turns an argument about numbers into a decision the business can defend.

MarOps Lab works on CRM architecture, data and the revenue processes that reporting depends on. Often the useful work is making the records and definitions trustworthy before anyone builds another dashboard. Explore revenue systems work.


Product documentation and further reading

These are primary HubSpot and Google sources used to verify product-specific statements. Features, subscription requirements and interfaces change; check the relevant account before implementation.

  1. HubSpot analytics and Google Analytics don’t match (opens in a new tab).
  2. Analyze your site traffic with web traffic analytics (opens in a new tab).
  3. Track visitors in HubSpot (opens in a new tab).
  4. Cookie banner API (opens in a new tab).
  5. Understand attribution reporting (opens in a new tab).
  6. Create attribution reports (opens in a new tab).
  7. HubSpot’s default deal properties (opens in a new tab).
  8. Understand traffic source properties (opens in a new tab).
  9. Customize close date automation for objects (opens in a new tab).
  10. Create sales reports in the sales analytics suite (opens in a new tab).
  11. Automatically set and sync record lifecycle stages (opens in a new tab).
  12. Consent mode overview (opens in a new tab) (Google).
  13. About reporting identity (opens in a new tab) (Google).
  14. User acquisition report vs. Traffic acquisition report (opens in a new tab) (Google).

Working on something this touches?

Tell me what happens today and what needs to happen instead. We can establish where I can help and how to begin.

Discuss a requirementAll Insights