BACK TO BLOG
USE CASESNovember 11, 20269 min read

Catchr With Causality Engine: Check the Summed Purchases

JH

By Joris van Huët

Enterprise Interim CMO & Marketing Leader · 15+ years · 50+ orgs

Published

2026-11-11

The short answer: the scorecard that adds Meta's Purchases to Google Ads' Conversions in a Catchr report is adding two verdicts, each reached by its own platform's rule, and two verdicts do not make a count of orders. Catchr, the connector that pipes 100+ marketing platforms into Data Studio, Sheets and warehouses, fetches every figure live from each platform's API, and its own GA4 article warns that the most recent 24 to 48 hours can read low (GA4 discrepancies). Put the store's orders on the same page. Then download GA4's attribution paths and take the free first finding from Causality Engine, which estimates what each channel caused from that one file, at app.causalityengine.ai/start.

Disclosure: I founded Causality Engine and own it, and this page recommends it. Every claim about it links to Causality Engine's own pages.

Before the scorecard reaches the board:

  1. Subtract once. For example, 640 Meta Purchases plus 580 Google Ads purchase conversions is 640 + 580 = 1,220 claimed sales. If Shopify booked 1,050 orders that month, 1,220 - 1,050 = 170 claims have no order of their own.
  2. Add the source you already pay for. Catchr's Shopify connector asks for the read_orders scope and sends order data to the same destinations as the ad platforms (Shopify setup). One extra table puts the denominator beside the claims.
  3. Read the field names. Meta's API has no generic Results field, so a purchase report uses Purchases (Results article); a Google Ads column should be filtered to Conversion Name = Purchase (custom conversions).

Catchr and the read, row by row

CatchrCausality Engine
What it isA live connector from marketing platforms to reporting tools (entry)A causal read of one GA4 file (entry)
How figures arriveAn API call to the platform at every refresh; nothing stored except Amazon Ads (how Catchr works)One CSV, the Attribution paths export, uploaded by you (how it works)
Whose conversionsEach platform's: Meta's Purchases, Google Ads' Conversions by Conversion Name (Results article, custom conversions)Every channel the GA4 file records, beside a last-click rebuild (how it works)
GA4 channel fieldSession Default Channel Group, as Catchr advises (GA4 discrepancies)Channels as GA4's paths report files them (paths report)
Link between the twoNoneNone; it needs no connector (integrations)
What checking costsInside the plan you runFree first finding; €99 per full read, excluding VAT (pricing, checked on 11 November 2026)

Catchr adds no rule of its own

Catchr's Meta article says it retrieves the reporting data you request "and does not modify your campaigns or accounts" (Meta Ads setup). So every conversion in the report is the platform's own count, and the field decides which one:

  • Purchases, not Results. Purchase campaigns return Purchases, lead campaigns Leads, traffic campaigns Link Clicks. Actions with the Action Type dimension lists every conversion type at once (Results article).
  • Standard events segment, pixel custom events do not. A custom event arrives as Pixel Action Name and Pixel Action Value and cannot be split by campaign, ad set or ad, a limit Catchr attributes to Facebook (events article).
  • purchase_value or omni_purchase_value. The omni field adds offline and mobile app purchases, which the plain field leaves out (purchase value article).
  • Google Ads by name. Conversion Name as a dimension, Conversions and Total conv. value as metrics, a filter on the action you mean (custom conversions).

The window is the platform's too. The Catchr Meta articles read on 11 November 2026 describe no attribution window setting, and Meta's own help says that by default it shows actions taken off the ad according to the attribution setting on the ad set (Meta's attribution system). Two ad sets with different settings land in one Purchases column without a mark.

Which GA4 numbers arrive, and how they are scoped

Catchr reads GA4 through its API and flags one trap by name: the Default Channel Group dimension "only attributes key events", so a session breakdown on it comes out short, and Session Default Channel Group is the field to use (GA4 discrepancies). Google explains why. Its default channel group page gives Default channel group an event scope under the property's attribution model, data-driven by default, and Session default channel group a session scope under paid and organic last click. Same channel names, different questions.

Where Meta and Google Ads traffic lands is Google's rule too: ads on social sites file as Paid Social, ads on search engines as Paid Search, and the definitions cannot be edited (default channel group). Google's attribution overview adds that its models give Direct no credit unless the whole path was Direct.

None of those queries is the file the read takes. Causality Engine wants the Key event attribution paths report, which lives under Advertising in GA4 and aggregates every key event unless you pick one (paths report). Catchr's GA4 article treats a property as an account to query, and says nothing of that report. So the export is a manual download: choose the purchase key event, 12 months or more (how it works), and save the CSV.

A worked example: one report page, three totals

For example, with numbers picked to show the arithmetic and no store behind them: a Data Studio page fed by Catchr shows October with 1,326 Shopify orders. Meta reports 804 Purchases, Google Ads 693 conversions under Conversion Name = Purchase, Microsoft Ads 71.

The paid claims: 804 + 693 + 71 = 1,568. Against the store, 1,568 - 1,326 = 242 orders claimed twice or more, or 1,568 ÷ 1,326 = 1.18 claims per order.

Now the GA4 table on the same page, Session Default Channel Group, purchases: Paid Social 288, Paid Search 451, Organic Search 247, Email 96, Direct 214, everything else 30. That adds to 288 + 451 + 247 + 96 + 214 + 30 = 1,326, so last click at least matches the till. It gives the paid channels 288 + 451 = 739, which is 1,568 - 739 = 829 fewer than the platforms claim.

The 214 under Direct belong to nobody yet, and a causal read starts there. The how-it-works page says it splits Direct back to the channels that sent those buyers, then lists every channel's caused share next to a last-click rebuild from the same file, graded for data health from 0 to 100 and paired with a next step. If the read and Ads Manager disagree about Meta, change Meta's budget in one region first and compare.

The free check, by hand in the same report

Catchr documents no holdout, so this one is by hand. Add a weekly table: Shopify orders, the summed paid claims, and the ratio between them. Keep it for eight weeks. If one platform's spend and claims rise while orders hold still, its extra claims are credit for orders that were coming anyway. That costs nothing and settles which column to stop adding.

For every channel at once, including the Direct row the scorecard cannot open, Causality Engine, which I founded, takes the paths CSV on its start page. The first finding is free and runs in the browser. One full read is €99, refundable within 30 days (pricing, checked on 11 November 2026).

What the pairing leaves out

No app, no API key, no sync joins the two. Causality Engine's integrations page says it reads every channel your GA4 export records, so there is no connector to wait for, and Catchr's MCP server and destinations carry query results, not the paths file.

The read stops at the channel. Which campaign or ad set did the work stays a question for the platform tables Catchr builds. It also declines thin data: the page written for AI agents calls a channel under 1% of credit on both methods too small to act on, and tells you to move budget in steps when data health is under 90.

Catchr's discrepancy articles define a correct figure as one that matches the platform's own screen: map the right field "to ensure your reports align with what you see in the Meta Ads interface" (Results article). A connector keeps its customers by matching Ads Manager to the cent, and whether Ads Manager and Google Ads claim the same order sits outside that promise, which leaves the deduplication to whoever adds the columns.

See also

FAQ

Can Catchr send my GA4 data to Causality Engine?

No, and it does not need to. Causality Engine has no connector for Catchr or anything else; it reads the Attribution paths CSV you download from GA4's Advertising section (integrations).

Why does my Catchr report show fewer GA4 sessions than GA4 itself?

Usually the breakdown. Default Channel Group counts only key events, so use Session Default Channel Group, and allow 24 to 48 hours for the API to catch up (GA4 discrepancies).

Should the Meta revenue column use omni_purchase_value?

Only if offline and app sales belong in it. The omni field includes them; purchase_value does not (purchase value article). Beside web-store orders, the plain field is the fairer match.

TAGS
Causality EngineCatchrPaid Media AttributionGA4Worked Example

ABOUT THE AUTHOR

I am Joris van Huët, an enterprise interim CMO. 15+ years, 50+ organizations, including ING, P&G, Nestlé, BNP Paribas, WeTransfer and Vinted. I take on innovation projects (venture building, design sprints), agentic marketing (setting up and running AI agents) and hands-on multi-channel work. See the track record.

I wrote and published this with AI assistance, and I answer for it. Claims about my own experience are limited to the track record above, and a statistic links to its source or is labelled as an example. I sell interim and fractional CMO work, which is why this site exists. How this site is written.

Agentic marketing, built for your team

The agents in this article, built into your workflows and handed over to your team: the first one within two weeks.

With Joris van Huët, interim and fractional CMO in Utrecht. From EUR 5,000 a month, monthly cycles, a 30-day exit.