
Key terms
Terms that prevent false comparisons
- Metric contract: the written definition of what is counted, why it matters, and which system owns the decision.
- Grain: the level represented by one row or observation, such as event, session, user, contact, lead, order, opportunity, or day.
- Identity key: the field used to connect records, such as transaction ID, contact ID, email hash, user ID, or another approved stable identifier.
- Date basis: the timestamp and timezone used to place a record inside a reporting period.
- Attribution: the rule that assigns credit for a key event or sale to a channel, campaign, or interaction.
- Freshness: how recently the source and connector processed or refreshed the data being viewed.
- Reconciliation: explaining the difference between two totals with row-level evidence, documented rules, and an owner decision.
Use this lesson safely
Apply the idea only after the affected path is clear.
- Identify the exact handoff, customer path, field, tag, trigger, report, or access rule before changing tools.
- Test with a low-risk example before touching live leads, payments, course access, reporting, support, or AI responses.
- Keep private client names, screenshots, customer records, payment data, passwords, and API keys out of public forms and messages.
- Document what changed, what was tested, what remains risky, and who owns the next step.
- Start with a Systems Audit when the problem touches several tools or the team cannot explain the current path.
Teams often ask which number is correct when GA4, the CRM, and Looker Studio disagree. That question is too broad. The useful question is: which number answers this specific business decision under an agreed definition? A source of truth should be assigned per metric, not declared once for every number in the company.
Why a mismatch can be valid
The three surfaces can describe different parts of the same customer journey:
- GA4 records measured website or app behavior. Its event, session, active-user, total-user, and attribution concepts are not interchangeable. Google documents the distinctions between GA4 user metrics and notes that reports and explorations can differ because of fields, filters, retention, thresholds, modeling, and processing.
- A CRM stores operational records and state. A contact may have been imported, created manually, merged, duplicated, updated after the original visit, or associated with several forms, opportunities, and purchases. The exact object model depends on the CRM and its configuration.
- Looker Studio displays the result of connector queries, calculated fields, filters, blends, and chart aggregation. Google's GA4 connector uses the Analytics Data API and is intended to match GA4 reporting rather than GA4 explorations, according to the official connector documentation.
Even two views inside GA4 can differ. Google lists supported fields, filter matching, segments, comparisons, retention, low-user thresholds, behavioral modeling, and processing time among the reasons for report and exploration differences. Treat the name of the metric as a starting point, not proof that two queries are equivalent.
Start with a metric contract
Before opening the dashboard, write one sentence such as: How many completed, non-test orders were paid in the store's timezone during June, excluding cancellations and including refunds as a separate measure? Then document:
- Business question: the decision this number changes.
- Metric name and owner: who defines it and who signs off on it.
- Grain: event, session, person, contact, lead, order, opportunity, line item, or another object.
- Numerator and denominator: especially for rates such as lead conversion or purchase conversion.
- Date field and timezone: event time, contact create time, opportunity close time, order paid time, refund time, or another agreed timestamp.
- Inclusions and exclusions: test records, spam, internal traffic, duplicates, failed payments, cancelled orders, refunds, offline sales, and missing consent.
- Identity and deduplication rule: which stable key connects or separates records.
- Freshness and tolerance: when the data is considered closed and what difference requires investigation.
Use a seven-layer discrepancy workflow
- Metric contract: confirm that the labels describe the same business question, grain, period, and inclusion rules.
- Collection: confirm the source event or CRM action occurred once, reached the intended property or account, and carried the required fields.
- Identity and joins: inspect transaction IDs, contact IDs, user IDs, merge rules, deduplication, and the join keys used by any blend.
- Time and attribution: align timezone, timestamp, reporting window, channel scope, attribution model, and lookback rule.
- Processing: allow the source and connector to finish processing before declaring a recent-period discrepancy.
- Transformation: inspect filters, calculated fields, row limits, blending, aggregation, and chart-level settings.
- Reconcile and decide: trace a known sample, classify the remaining delta, record the accepted definition, and name the owner.
Compare a closed period before comparing today
Google says GA4 processing can take 24 to 48 hours and that report values may change during processing. Daily attribution credit for key events can also change later. See the official GA4 data-freshness guidance. Looker Studio can serve a previous query result from memory while a data source remains inside its freshness threshold; connector refresh settings and blends therefore belong in the evidence log. See Looker Studio data freshness.
For the first reconciliation, use a completed historical period that is old enough for the relevant sources to finish processing. Save the exact date range, timezone, filters, connector, chart, and export time. Once that period reconciles, test recent data separately rather than mixing processing delay with definition problems.
Record evidence before changing the implementation
- The exact GA4 property, stream, report or exploration, dimensions, metrics, filters, comparisons, and date range.
- The CRM account, object, saved view or report, lifecycle or pipeline state, create or close field, deduplication rule, and export timestamp.
- The Looker Studio report, data source, connector owner, data credentials, freshness setting, blend, join keys, calculated fields, chart filters, and aggregation.
- One small privacy-safe sample of known events, contacts, orders, or opportunities that can be traced without publishing customer data.
- The expected total, observed totals, explained difference, unexplained difference, decision owner, and next review date.
GA4, CRM, and Looker Studio discrepancy matrix
Start with the symptom, then test the narrowest boundary that could create it. Do not change the tracking or dashboard until the evidence identifies the layer.
| Observed mismatch | Likely boundary | Evidence to compare | First action |
|---|---|---|---|
| GA4 users vs CRM contacts | Different grain and identity | Active or total users, cookie and user-ID behavior, CRM create source, imports, merges, duplicates, and existing contacts | Do not force equality. Define whether the decision needs measured people, identifiable contacts, or newly created records. |
| GA4 sessions vs CRM leads | Visit vs business record | Session definition, repeat visits, form completion, lead-creation rules, spam, manual records, and deduplication | Compare sessions to sessions and qualified lead records to the exact form or conversion event that creates them. |
| GA4 key events vs CRM form submissions | Event collection or trigger logic | Event name, form success condition, property and stream, duplicate tags, blocked scripts, CRM automation history, and test submissions | Trace one fresh test submission from public form success to GA4 event to CRM record and workflow history. |
| GA4 purchase events vs ecommerce orders | Transaction state and collection | Transaction ID, payment state, test order, cancellation, refund, duplicate event, consent, checkout path, and offline order | Use the commerce platform as the order-state owner, then reconcile which completed orders should produce one GA4 purchase. |
| GA4 revenue vs paid or net revenue | Definition and lifecycle | Gross value, tax, shipping, discounts, currency, refunds, cancellations, chargebacks, and reporting timestamp | Create separate gross, paid, refunded, and net metrics instead of labeling each total simply as revenue. |
| Today or yesterday differs | Processing and freshness | GA4 processing state, source timezone, connector freshness, report refresh time, late events, and attribution updates | Repeat the comparison on a closed period before diagnosing the recent window. |
| GA4 report vs GA4 exploration | Reporting surface | Supported fields, filter match type, comparisons, segments, retention, thresholds, modeling, sampling, and processing | Rebuild both queries with the same supported dimensions, metrics, date range, and filter logic, then inspect data-quality indicators. |
| GA4 report vs Looker Studio | Connector query and freshness | GA4 Data API fields, property, data source, chart date range, filters, comparisons, quotas, and last refresh | Compare Looker Studio with the equivalent GA4 report, not an exploration, using the same fields and closed period. |
| Looker scorecard vs Looker table | Aggregation and chart scope | Dimensions, default aggregation, chart filter, calculated metric, date field, optional metrics, and row-level duplication | Remove dimensions and calculated fields one at a time until both components query the same grain. |
| Blended report drops records | Join type and leftmost source | Leftmost data source, join operator, key values, nulls, type and case differences, date alignment, and unmatched keys | Export the join keys from each source and classify matched, left-only, right-only, duplicate, and null records. |
| Blended report multiplies totals | Many-to-many join | Uniqueness of each join key, contacts with several events, orders with several line items, and grouped date keys | Aggregate each source to the intended grain before blending and prove one row per join key. |
| CRM pipeline value vs sales revenue | Forecast vs completed transaction | Opportunity amount, probability, stage, close date, won state, order state, payment state, and duplicate opportunities | Keep pipeline, weighted forecast, booked revenue, paid revenue, and net revenue as separate metrics. |
| Channel totals differ | Attribution scope and model | First-user, session, or event-scoped channel; attribution model; lookback window; CRM original source; and campaign overwrite rules | Name the attribution question explicitly and compare only metrics using the same scope and rule. |
| Totals differ by day or month | Date field and timezone | Property timezone, CRM account timezone, UTC conversion, event timestamp, create date, close date, paid date, refund date, and daylight-saving boundary | Choose one reporting timezone and one date basis per metric, then regenerate the period from both systems. |
24-check discrepancy worksheet
Complete these checks for one metric and one closed period. Your selections stay in this browser; no customer records or form data are requested.
How to reconcile one metric without guessing
- Choose one closed period: avoid the current day while processing and freshness are still moving.
- Export the smallest useful detail: use transaction IDs, contact IDs, dates, states, and values rather than comparing only two headline totals.
- Normalize the contract: align timezone, date basis, grain, status, filters, currency, and exclusions.
- Classify every unmatched record: missing collection, duplicate, late processing, excluded status, identity failure, join failure, attribution difference, or transformation error.
- Prove the first divergence: find the earliest layer where the same known record stops matching.
- Repair only that layer: do not rebuild tags, CRM workflows, connectors, and dashboards at the same time.
- Repeat the closed-period test: confirm that the repair changes the expected records without creating duplicates or a new reporting break.
- Publish the contract: document the accepted number, owner, refresh rhythm, known limits, and response when the threshold changes.
Expected difference or broken implementation?
A difference can be expected when two views use different grains, reporting surfaces, freshness windows, attribution rules, consent or modeled data, or lifecycle states. Google explicitly documents differences among GA4 reports, explorations, the Data API, and BigQuery in its reporting-surfaces comparison.
Investigate as an implementation problem when a stable closed-period delta cannot be explained, a known record disappears at a specific handoff, the same transaction appears more than once, totals multiply after a blend, a change creates a permanent step shift, or a metric cannot be reproduced from its written contract.
Choose a source owner by metric
- Website and app behavior: use a validated analytics implementation and the GA4 surface defined in the contract.
- Contact state, lead ownership, and opportunity stage: use the CRM object and lifecycle rules approved by the operating team.
- Order and payment state: use the commerce, payment, or finance system that controls completed, cancelled, refunded, and net states.
- Dashboard presentation: use Looker Studio to communicate an agreed metric, not to silently redefine its owner.
There is no universal source of truth for every metric. One business may use the commerce platform for paid orders, the CRM for sales ownership, GA4 for measured acquisition behavior, and Looker Studio for a documented cross-source review.
Watch joins and aggregation in Looker Studio
Google documents that a blended source needs shared join keys and that included records depend on the join configuration and source order. A non-unique key can multiply rows; an unmatched key can drop expected records. Review the official join-key definition. Aggregation also changes the result when a chart groups or summarizes a metric at a different dimension set. Some Google Analytics metrics use automatic aggregation because the connector does not expose raw data for reaggregation; see Looker Studio aggregation.
Do you need BigQuery?
Not for every discrepancy. Start with a metric contract, source exports, known record IDs, and the equivalent GA4 report. BigQuery becomes useful when the business needs event-level analysis, repeatable SQL reconciliation, longer transformation history, or controlled joins beyond the dashboard connector. It also represents a different reporting surface, so it should not be expected to reproduce every modeled or attributed GA4 report value automatically.
Keep the evidence privacy-safe
Use redacted IDs, masked emails, test orders, limited date windows, and approved exports. Do not paste customer names, payment details, access credentials, API keys, full CRM exports, or private screenshots into a public form. A useful first message can name the metric, systems, period, observed totals, likely boundary, and business decision without exposing customer data.
When a reporting audit is worth it
If the mismatch spans collection, CRM state, ecommerce transactions, attribution, connector rules, and dashboard calculations, an isolated chart edit is unlikely to resolve ownership. Arifur Rahman uses the same contract-to-reconciliation method shown here: define the decision, trace a known sample, locate the first divergence, then document the smallest repair and its proof test. Use the related Looker Studio dashboard setup when the source path is already clear, or start with a Systems Audit when several live tools and owners are involved.
Article FAQ
GA4, CRM, and Looker Studio discrepancy questions
Why are GA4 leads lower than CRM leads?
GA4 and a CRM may not count the same object. GA4 depends on measured events, identity, consent, browser behavior, and event rules. A CRM can include existing contacts, imports, manual records, duplicates, merged records, spam, and leads created outside the measured website path. Compare one specific form or lead-creation path under the same period and rules.
Why does Looker Studio show a different GA4 total?
Check whether you are comparing Looker Studio with the equivalent GA4 report rather than an exploration. Then align the property, Data API fields, date range, timezone, filters, data freshness, chart dimensions, calculated fields, blends, joins, aggregation, thresholds, sampling, and quota state.
Which tool should be the source of truth?
Assign a source owner per metric. GA4 can own validated measured behavior, the CRM can own contact and opportunity state, the commerce or finance system can own order and payment state, and Looker Studio can present the documented result. The business question and metric contract decide the owner.
What should I do after I learn what is broken?
Choose the smallest safe next step. Test one low-risk handoff yourself when the path is clear, use the related service when the failure is specific, start with the Systems Audit when several tools or live customers are involved, and keep learning when the evidence is still vague.
Sources and context
Official documentation used for this discrepancy guide
Related eArif context
Official references
- Google Analytics: Data freshness
- Google Analytics: Data differences between reports and explorations
- Google Analytics: Reporting surfaces comparison
- Google Analytics: Understand user metrics
- Google Analytics: Session definitions
- Google Analytics: Attribution settings
- Google Cloud: Connect Data Studio to Google Analytics
- Google Cloud: Manage Data Studio freshness
- Google Cloud: Data Studio aggregation
- Google Cloud: Data Studio join keys
- HubSpot: Why HubSpot and Google Analytics do not match
Reconcile the decision before rebuilding the dashboard.
When several live systems, owners, and definitions are involved, map the source path and evidence first. A Systems Audit can separate collection, CRM-state, transaction, attribution, and dashboard problems before implementation scope is chosen.
Start with a Systems Audit