Why Your CRM and Analytics Tell Different Stories (And How to Handle It)
HubSpot says 42 leads. GA4 says 57 conversions. Salesforce says 38 opportunities. None are wrong. Here is why they disagree and how to report the full picture.
Updated 5 min read
Your marketing team runs Google Ads. They check GA4: 57 conversions this month. They check HubSpot: 42 new leads. They check Salesforce: 38 opportunities created. Three systems, three numbers, same time period, same campaign.
The CEO asks how many leads came from Google Ads. You realize you do not have one answer. You have three, and none of them are wrong.
Why the Numbers Always Disagree
This is not a data quality problem. It is a measurement definition problem. Each system counts a different thing, at a different time, using a different method.
GA4 counts events, not people. When GA4 reports 57 conversions, it means the generate_lead event fired 57 times across all sessions attributed to Google Ads. That includes the same person submitting the form twice, visitors attributed through data-driven attribution, and modeled conversions estimated under Consent Mode.
HubSpot counts contacts, not events. When HubSpot reports 42 new leads, it means 42 new contact records were created. HubSpot deduplicates by email address. If someone submits the form twice with the same email, HubSpot counts one contact. If the form validation fails and the submission does not reach HubSpot, it counts zero.
Salesforce counts opportunities, not leads. Salesforce's 38 opportunities means a sales rep reviewed the leads, qualified 38 of them, and created opportunity records. The gap between HubSpot's 42 leads and Salesforce's 38 opportunities is the qualification filter.
The Four Sources of Divergence
| System | What It Counts | Deduplication Method |
|---|---|---|
| GA4 | Events (form_submit, purchase) | By session (once per session or every event) |
| HubSpot | Contact records | By email address |
| Salesforce | Opportunity records | By sales rep judgment |
| Google Ads | Conversion actions | By conversion window (1-90 days) |
Attribution model. GA4 uses data-driven multi-touch attribution. Google Ads uses its own model with separate conversion windows. HubSpot uses the UTM parameters from one specific visit (first or last, depending on your settings). Three different attribution models produce three different numbers from the same underlying visitor behavior. For a deeper comparison, see marketing attribution models.
Time boundaries. GA4 attributes conversions to the session when the event fired. Google Ads attributes conversions to the click date, not the conversion date. HubSpot records the contact creation date. Salesforce records the opportunity creation date. A visitor who clicks an ad on March 15, returns direct on March 28, and submits the form produces four different dates across four systems from one outcome.
Data completeness. GA4 only sees visitors who consented to analytics tracking. In the EU, a substantial share of visitors decline analytics cookies. HubSpot sees everyone who submitted a form, regardless of cookie consent, because form submission is a server-side event. Your CRM has leads that your analytics literally cannot explain.
Stop Trying to Make Them Match
The instinct is to find the right number. There is not one. Each system is accurately measuring what it is designed to measure:
- 57 = how many times did Google Ads contribute to a conversion event (GA4's question)
- 42 = how many new people entered our system from Google Ads (HubSpot's question)
- 38 = how many qualified opportunities came from Google Ads (Salesforce's question)
Instead of reconciling them into one number, use each where it is strongest. GA4 for channel comparison, traffic quality, and website behavior. CRM for lead volume, lead quality, pipeline value, and revenue attribution. Cross-source comparison for validation: when both systems directionally agree, you can report with confidence. When they disagree, the disagreement itself is the signal worth investigating.
Building Cross-Source Reports
Instead of one number, report the funnel with source-appropriate metrics at each stage. A well-structured cross-source report looks like this:
- Top of funnel (GA4): Sessions, engaged sessions, form submissions as key events
- Middle of funnel (CRM): Contacts created, MQLs, SQLs
- Bottom of funnel (CRM): Opportunities, closed-won, revenue
This format is honest. It shows what each system knows. It names the attribution model difference so the reader understands why the absolute numbers differ. And it traces the full funnel from click to revenue without pretending any single number tells the whole story. For more on structuring these reports, see cross-source reconciliation.
Practical Fixes to Reduce the Gap
You cannot eliminate the disagreement, but you can reduce it.
Align conversion counting: set GA4 to count conversions once per session for lead-gen events to reduce double-counting
Align timezones: set GA4, Google Ads, and your CRM to the same timezone to eliminate day-boundary shifts
Use consistent UTM parameters: standardize naming across all campaigns so both systems attribute to the same campaign
Track server-side events where possible: server-side form submissions close the consent gap between GA4 and your CRM
Monitor the agreement rate over time: a stable gap is normal; a sudden change means something broke
How SyncingBeam Fits In
SyncingBeam is designed to surface cross-source context rather than hide the gap. When it collects from GA4 and Search Console today, it labels every metric by source and shows per-source timestamps so you know exactly what each number represents.
CRM connectors for HubSpot and Salesforce are being validated. When available, the comparison engine is designed to compare metrics under declared rules: it flags when sources use different attribution models, when day boundaries do not align, and when a comparison is directional rather than absolute. The goal is not to merge numbers into one figure but to present each source's measurement alongside enough context that the reader understands what they are looking at.