← All posts Data engineering

How to reconcile Meta and Google ROAS against your CRM

29 Jul 2026 · 5 min read · Twinslytics

Meta says your campaign drove $40,000 in revenue. Google says its campaigns drove $35,000. Add those up and you've got $75,000 in attributed revenue. Except your CRM shows total revenue for the period was $60,000. Somebody's lying, and it's not your CRM.

This is the most common data problem in ecommerce marketing, and almost nobody fixes it properly. They just pick whichever number makes the ad account look good and move on. That's how you end up scaling a channel that's actually losing money, or killing one that's quietly profitable. Reconciling platform-reported ROAS against your CRM isn't optional bookkeeping — it's the difference between spending based on reality and spending based on a story Meta's algorithm tells itself.

Why the numbers never match

Start with the mechanics. Meta and Google both use last-touch or data-driven attribution models that credit their own platform generously. Meta's pixel counts a conversion if someone saw an ad and purchased within a 7-day click or 1-day view window — even if that person also clicked a Google ad, read three emails, and typed your brand name into search before buying. Google Ads does the same thing in reverse. Both platforms are grading their own homework.

Then there's the double-counting problem. If a customer clicks a Meta ad, doesn't buy, then later clicks a Google ad and converts, both platforms may claim that sale. Multiply this across thousands of customers and you get exactly what you saw above: attributed revenue that exceeds actual revenue. This isn't fraud. It's just how overlapping attribution windows work when nobody's reconciling the totals.

Your CRM, on the other hand, only knows what actually happened — orders, refunds, subscription renewals, customer lifetime value. It doesn't care which platform thinks it deserves credit. That's why CRM data is your ground truth, and platform ROAS is a claim that needs to be checked against it.

Set up a clean source of truth first

You can't reconcile against messy CRM data any more than you can audit a spreadsheet with broken formulas. Before you touch attribution, make sure your CRM or order database has:

Most reconciliation failures trace back to this step. Teams try to match ad platform data against a CRM export that has duplicate orders, mismatched currencies, or test transactions still in the mix. Fix the foundation before you build the comparison on top of it.

Build the reconciliation, step by step

Once your CRM data is clean, the reconciliation itself is a matching exercise, not a mystery. Here's the sequence that actually works:

The goal isn't perfect precision — that's impossible with cross-device behavior and privacy restrictions limiting what you can track. The goal is a directionally honest number you can use to make budget decisions without lying to yourself.

Use a data warehouse to automate it

Doing this reconciliation by hand in spreadsheets works for one month. It falls apart the moment you're running five ad accounts, two CRMs from an acquisition, and a subscription platform with its own revenue events. This is where a proper data pipeline earns its keep.

Pull raw data from Meta Ads, Google Ads, and your CRM into a warehouse — BigQuery, Snowflake, whatever fits your stack — using their APIs rather than manual CSV exports. Land the raw data first, then build a transformation layer that standardizes timestamps, deduplicates by order ID, and calculates blended ROAS automatically. Tools like dbt make this transformation auditable, so when someone asks "why does this month's number look different," you can trace exactly which join or filter changed it.

Once this pipeline exists, reconciliation stops being a monthly fire drill and becomes a dashboard you check on Monday morning. That's the real payoff — not just more accurate numbers, but the ability to catch attribution drift before it costs you a quarter of wasted spend on a channel that stopped working two months before anyone noticed.

The takeaway

Platform-reported ROAS is a sales pitch from software that's incentivized to look good. Your CRM is the only system with no reason to lie. Reconciling the two isn't about picking sides — it's about building a repeatable process that turns two conflicting stories into one number you can actually plan around. Do it once by hand to understand the gaps, then automate it, because the gap between "attributed revenue" and "actual revenue" doesn't close itself.

Further reading

154 dbt models · 4 brands — Multi-brand data platform

Want a warehouse that survives schema drift?

We build daily pipelines that alert on failure down to the file and row, not reporting that quietly breaks.