Skip to content

Incremental ROAS per Channel From GA4 Without a Geo Test

A GA4 export carries natural variation in spend that a causal read can use to estimate what each channel caused, without pausing spend anywhere. What the read can tell you, and what still needs a holdout.

Three platforms, three answers, one budget to defend. Your GA4 export already holds the answer, and the first finding is free and never leaves your browser. Get your first finding free

By , Founder & CEOUpdated 4 min read

Run the numbers for your store: the free holdout test planner.

Causality Engine uses causal inference on the GA4 history you already have to estimate what each channel caused.

What the export contains that a model can use

A GA4 export is not a flat line. Spend moved, campaigns launched and ended, a promotion ran, a weekend behaved differently from a Tuesday. Each of those is a small natural experiment, and a causal model uses them the way a geo test uses regions: as variation in the input that lets it estimate what revenue would have been without each channel. The more the window varied, the tighter the interval; a window in which nothing changed gives the model little to read, and the interval says so by widening.

Where an assumption is uncertain, the interval widens rather than the number pretending.

What comes back

Causality Engine reads one file, the Attribution paths export from GA4, and shows what each channel caused next to what last-click gave it. Summed, the platform-reported figures against orders give the claim ratio, which The Price of Being Found treats as the most useful single number when three systems disagree. How to use GA4 exports with Causality Engine has the export steps.

What it cannot do, stated up front

Three limits, and they are the same limits any observational method has.

It cannot see what the data cannot see. GA4 attributes sessions it could resolve; the rest sit in Direct and Unassigned. The book's own census found 48.6% of sessions at one company with no resolvable source. The read states its coverage so that the estimate is read against the visible share, not mistaken for the whole.

It is not an experiment. No observational estimate observes the counterfactual directly. The read's value is that it shows what each channel caused next to what last-click gave it, with a data-health score for how far to trust each number, and says plainly that it is observational. A channel with a low data-health score has not been shown to add revenue at this data volume; it has not been shown to add nothing either.

It has a floor. With little paid spend or a short history, the read has less to work with, and its data-health score says so rather than hiding it. One of the five beta cases published on this site, OFFFTRACK, was advised to revisit when its paid spend scales.

Observational read on a GA4 exportRandomised holdout
Time to an answer1 to 2 minutesEight weeks live, after a pre-period
What it costsEUR 99The revenue forgone in the held-out group
What it observesNatural variation already in the windowThe counterfactual, directly
What it is forEvery channel, between anchorsThe channel carrying the most budget

When you still need the geo test

For the largest channel, the read is the map and the holdout is the territory. Qualify it first: spend share times honest incremental return has to clear the smallest lift a geo test can detect at your scale, about 8.3% for a typical DTC brand on 26 weeks of history and 8 weeks live. If it clears, hold that channel out of a slice of regions with the pre-period fixed and the design registered, and let the read cover the other channels between anchors. Incrementality testing for ecommerce is the playbook, and the book's cadence is one qualified holdout per quarter with the anchor date on the dashboard.

Most brands cannot qualify more than one or two channels for a holdout at all.

What to do this week

  • If you own the budget: export 12 months or more of GA4 data and run the read.
  • If you have to defend the number: label the read "observational, with a data-health score per channel" on the slide, and put the one holdout you can qualify next to it as the anchor.

A read on your own export is EUR 99 at causalityengine.ai/start, refundable within 30 days, no questions asked.

Product facts as stated on causalityengine.ai on 9 September 2026. The coverage census, the four properties and the measurability arithmetic are from The Price of Being Found (Edition 2.10), Chapters 8, 15 and 19, with the book's caveats.

Frequently asked questions

  • How fast can incremental ROAS be read from a GA4 export?
    Results arrive 1 to 2 minutes after the upload, and there is no pixel and no SDK to install. Setup is exporting the file and uploading it; nothing is installed.

Go deeper: Causal attribution, explained.

Sixty-second versions of these ideas: Causality Engine on YouTube Shorts.

Have an audience of ecommerce operators? Earn 20% recurring commission by recommending the €99 read.

Keep reading

Terms in this article

Browse the full glossary

Your platforms guess.
We run the math.

Upload a GA4 export and see what each channel caused, next to last-click, in 1–2 minutes. The read is yours to keep.

The free finding runs in your browser. Your file never leaves it. The full read is €99, refundable within 30 days, no questions asked. Prices exclude VAT.