Metric Discrepancies & Attribution

Why Your ROAS in Google Ads Never Matches Your ROAS in Your CRM / Backend Database

By Chinmay Raibagkar·August 26, 2026·9 min read·Some SQL·Updated August 28, 2026

The 60-second version

Google Ads, Meta, and your CRM or backend database each attribute revenue differently. Here is exactly why the numbers disagree, and how to reconcile them without picking one to trust blindly.

  • What happened, in one line
  • What to do about it this week
  • What you can safely ignore

You log into Google Ads and it proudly reports that your latest campaign generated 4.2x ROAS ($42,000 in sales from $10,000 in ad spend). Encouraged, you check Meta Ads, which claims another 3.5x ROAS ($35,000 in sales from $10,000 in spend).

Together, the ad platforms claim they brought in $77,000 in new customer revenue.

Then you open your CRM, Shopify, or central backend database — where actual customer credit cards get charged — and total revenue across your entire company for that period was only $50,000.

Nobody hacked your accounts, and nobody made a math error. Both the ad platforms and your internal database are reporting what they were engineered to report. This discrepancy is the single most common source of confusion in performance marketing, and understanding why it happens is the difference between making profitable budget decisions and burning cash on phantom metrics.

The short version: Why ad dashboards and databases disagree

Google Ads, Meta, GA4, and your CRM or backend database are each answering fundamentally different questions when they say "revenue from this campaign":

  • Google Ads asks: "Did this customer click (or view) one of our ads at any point in the last 30 days before completing an order?" If yes, Google claims credit for the sale — regardless of whether the customer also saw ten other ads elsewhere.
  • Meta Ads asks: "Did this customer click one of our ads in the last 7 days or see an impression in the last 24 hours?" If yes, Meta claims credit for the sale.
  • Your CRM or Backend Database asks: "Did a real customer order get placed and paid for in our system?" It records real financial transactions with no inherent knowledge of ad interactions unless you have explicitly built tracking and attribution logic into your checkout flow.
  • GA4, sitting in the middle, applies its own multi-channel data-driven attribution model across whichever sessions it successfully observed via UTM parameters and tracking cookies.

None of these systems is lying. They are simply operating under completely different definitions of what "caused" a sale.

The Golden Rule of Marketing Data: Ad platforms measure attributed influence (which is naturally optimistic). Your CRM or backend database measures actual financial truth (which is grounded in real bank deposits).


The Four Core Causes Behind the ROAS Discrepancy

The Disconnect in the Tracking Pipeline

Data Journey
Stage 1Self-Reported
Ad Interaction

Google and Meta both observe ad clicks/impressions and claim 100% credit for the upcoming conversion.

Google + Meta claim: $200
Stage 2Privacy Drop
Checkout Session

Apple ITP, cross-device browsing, or redirect link cleansers drop the UTM parameters before checkout completes.

Session: Direct / Organic
Stage 3Financial Truth
Backend Database

Only 1 physical transaction occurs and settles in your merchant bank account.

Database: 1 Order ($100)

1. Attribution Window Mismatches (The "Coupon Expiry" Rule)

An attribution window is the time limit an ad platform gives itself to claim credit for a sale after someone interacts with an ad.

  • Google Ads defaults to a 30-day click and 1-day view-through window (frequently using Data-Driven Attribution).
  • Meta Ads defaults to a 7-day click and 1-day view window.
  • Your CRM / Database has no attribution window — an order placed on August 26 is recorded on August 26, period.

Layman Example: If a shopper clicks your Google ad on Day 1, thinks about it for 3 weeks, and finally returns via direct bookmark to purchase on Day 22:

  • Google Ads claims 100% of the conversion value.
  • Your backend database records an order on Day 22 with no active click session, categorizing it as "Direct" or "Organic" unless you maintain a persistent user identity table.

2. Multi-Touch Double Counting (The "Two Salesmen" Problem)

Ad platforms operate in total isolation from one another. Google has no idea what ads a user saw on Instagram, and Meta has no idea what keywords a user searched on Google.

If a buyer:

  1. Searches on Google, clicks an ad, and visits your site on Monday.
  2. Sees an Instagram retargeting ad and clicks it on Wednesday.
  3. Completes a single $150 purchase on Thursday.

What happens to your reporting?

  • Google Ads claims $150 in revenue.
  • Meta Ads claims $150 in revenue.
  • Sum of ad platform dashboards: $300 in reported revenue.
  • Real money in your bank account / database: $150.

If you evaluate each channel in its own silo, you will believe your marketing is twice as effective as it actually is.

To connect an ad click to a purchase in your database, tracking parameters like gclid (Google Click Identifier), fbclid, or UTM tags must survive from the landing page all the way through to the final "thank you" page.

In practice, this connection breaks frequently:

  • Apple Safari ITP (Intelligent Tracking Prevention): Automatically caps client-side cookie lifespans to 7 days (or 24 hours under certain redirect conditions), wiping the attribution trail for considered purchases.
  • Cross-Device Browsing: A user clicks an ad on their mobile phone during their morning commute, but completes the purchase in the evening on their desktop work laptop. The ad platform can often connect this via signed-in user graphs, but your website checkout sees a completely new, untagged session.
  • Ad Blockers & Privacy Extensions: Strip query parameters and block client-side JavaScript tags from firing, leaving your database with an order but zero attribution tags.

4. Financial Mechanics: Refunds, Taxes, and Timezones

  • Timezone Drift: Ad accounts frequently run on the company's local business timezone (e.g. America/New_York or Asia/Kolkata), while databases and server logs almost universally store timestamps in UTC. An order placed at 9:00 PM EST on Monday lands on Tuesday in UTC, creating daily ROAS mismatches.
  • Refunds and Cancellations: Google and Meta report gross transaction value at the moment of conversion. They rarely subtract cancellations, chargebacks, or customer returns processed 5 days later in your CRM.
  • Taxes and Shipping: Ad pixels frequently record the gross checkout value (including sales tax and express shipping), whereas internal reporting often measures net product revenue.

Comparison Matrix: How Platforms Measure Revenue

FeatureGoogle AdsMeta AdsGA4CRM / Backend Database
Default Window30-day click / 1-day view7-day click / 1-day view30-day / 90-day key eventsExact transaction time
Cross-Platform VisibilityNone (Google only)None (Meta only)Partial (via UTMs)Full (all actual orders)
View-Through Included?Optional (separate column)Included by defaultExcluded from standard reportsNone
Deducts Refunds?No (unless offline sync)No (unless offline sync)NoYes (exact net truth)
Primary Use CaseBidding & ad group tuningCreative & audience tuningCross-channel journey pathsExecutive & financial truth

How to Reconcile Discrepancies: A Practical Framework

You will never get ad platform numbers to match your database penny-for-penny — and attempting to do so is a waste of engineering time. Instead, adopt a 3-tier reporting framework:

The 3-Tier Multi-Touch Reconciliation Framework

Reporting Hierarchy
Tier 1
Top-Line MER / Blended ROAS

Executive source of truth for the Board & CFO. Compares total revenue against all marketing spend without attribution fighting.

Total Database Revenue ÷ Total Ad Spend
Tier 2
CRM First-Party Attribution

Used by Marketing Leadership for channel budget shifts. Only counts actual orders carrying verified first-party tracking tags.

Verified Channel Orders ÷ Channel Spend
Tier 3
In-Platform ROAS

Used by Media Buyers for automated campaign & creative bidding algorithms inside Google & Meta.

Platform Self-Reported Dashboard Numbers
  1. Use Total MER for Financial Health: Compare your total company revenue directly against total marketing spend across all channels. This sidesteps attribution disputes entirely.
  2. Use CRM/Database Attribution for Channel Allocation: Measure how many orders carried a valid first-party tag to decide which channels get more budget next quarter.
  3. Use Platform ROAS for Tactical Bidding: Let Google and Meta's internal algorithms optimize bids based on their own pixel data, but apply a "discount factor" when forecasting actual revenue.
  4. Calculate and Track the "Attribution Gap Ratio": Attribution Gap = Platform Reported Revenue ÷ CRM Reconciled Revenue If Google Ads consistently reports 1.3x what your database shows, a 4.0x platform ROAS represents roughly a 3.0x real-world ROAS.

The Production SQL Pattern: Blended Daily ROAS

Here is the clean, production-tested SQL query to reconcile ad spend against backend order revenue without running into many-to-many join duplication bugs. It runs as written on BigQuery, Postgres, Snowflake and SQLite 3.39+. MySQL has no FULL OUTER JOIN — there, express it as a LEFT JOIN unioned with a RIGHT JOIN, or left-join both sides onto a generated date spine:

Daily Blended ROAS Across Ad Platforms vs Database Orders

Show query

Why aggregate before joining? Joining row-level order tables directly to daily campaign spend tables on date causes a severe fan-out multiplication bug: if you ran 10 ad campaigns that day, every single order gets duplicated 10 times in your sum! Always aggregate both sides to the daily grain before joining.


Frequently Asked Questions

What is a normal discrepancy between Google Ads and a backend database?

A variance of 15% to 30% is standard across most e-commerce and lead-generation businesses. Discrepancies below 15% indicate strong first-party tracking and short purchase cycles; discrepancies above 40% typically point to broken UTM tagging, extreme cross-device conversion paths, or unmonitored view-through conversion counting.

Should I optimize my campaigns using CRM numbers or Google Ads numbers?

Use Google Ads in-platform numbers for real-time automated bid strategies (e.g. Target ROAS, Target CPA), because the ad network's machine learning requires real-time signal density. However, set your target thresholds using your backend database breakeven numbers.

How does conversion lag affect this week's ROAS?

Customers who click ads today may not buy for 3 to 14 days. This causes recent-day ROAS (yesterday and today) to appear artificially low. Always evaluate campaign profitability on a 7-day or 14-day trailing lag rather than judging same-day returns.


Summary & Next Steps

When Google Ads and your database disagree, do not search for a villain. Understand that each tool measures a different phase of the customer journey:

  • Use ROAS inside ad managers to steer creative performance and keywords.
  • Use Breakeven ROAS to ensure ad bids never exceed your gross profit margins.
  • Use MER and central database queries to ensure your overall marketing spend produces net positive cash flow.
Free tool

Breakeven ROAS Calculator

Enter your gross margin to find the minimum ROAS at which a campaign stops losing money — and the target ROAS at a chosen profit goal.

CR

Chinmay Raibagkar

About author →

Founder of DataLens AI. He helps non-technical teams read their ad and database numbers with confidence — which number to trust, what to do next, and what to ignore.

Glossary terms referenced