How to measure causal attribution, step by step
Pick one channel, pair your regions by past sales and switch the channel off in one region of each pair. The difference in sales growth between the groups is what the channel caused. Divide it by GA4's last-click credit to see how far to trust that number.
By Joris van Huët, Founder & CEOUpdated 8 min read
You usually measure causal attribution one channel at a time. Switch the channel off in some regions, keep it on in matched ones, and compare how sales change in each group. The gap is what the channel caused. Set it next to GA4's last-click credit, and you see how far to trust that number.
Step by step
This is the do-it-yourself version of a geo experiment, a method Google's researchers call conceptually simple. A platform lift test runs a randomized version for you, if your account qualifies. The steps below need no minimum spend, only sales spread across several regions.
- Write down what GA4 credits the channel. In GA4, open Reports > Acquisition > Traffic acquisition. Set the weeks just before your test, as many as it will run. Note the channel's Total revenue: session channels follow the paid and organic last click model, so this is its credit. Menu path: Reports > Acquisition > Traffic acquisition.
- Pull three months of sales by region. In Shopify, go to Analytics > Reports, filter Category to Sales and open Total sales by billing location. Set the last three months and export the table. Menu path: Analytics > Reports > Category filter > Sales > Total sales by billing location > Export.
- Pair regions that move alike. Sort regions by sales and pair neighbours of similar size whose sales rose and fell together. Flip a coin in each pair: one region goes dark, the other keeps the channel. Google's work on randomized paired geo experiments builds on the same pairing idea. Menu path: your exported sheet, one row per pair.
- Turn the channel off in dark regions. In Meta Ads Manager, keep only the lit regions under the ad set's Audience > Locations. Untick Reach more people likely to respond to your ads, or delivery can drift past them. In Google Ads, add the dark regions as exclusions in the campaign's Locations settings. Menu path: Ads Manager > ad set > Audience > Locations; Google Ads > Campaigns > Settings > Locations > Exclude.
- Hold everything else steady for long enough. Keep budgets, offers and creatives the same in the lit regions. Google lets its own lift studies run as short as 7 days but recommends a minimum of 14. Stretch that if your buyers take weeks to decide. Menu path: Total sales by billing location, checked once a week.
- Compare each group with its own past. Reopen Total sales by billing location for the test weeks. Click the comparison indicator, choose Comparison to past and set a custom range of the same length just before. Add up each group's change. Menu path: report > Compare to > Comparison to past > Custom range.
- Take the difference in differences. Subtract the dark group's change from the lit group's change. If the channel works, the lit group grew more, and that gap is what the channel caused in the dark regions. The season both groups shared cancels out. Menu path: your sheet, one line per group.
- Scale up and compare with the credit. Divide the gap by the dark group's pre-test share of sales to estimate the effect everywhere. Divide that by step 1's credit and write the ratio in a ledger, with the test dates. Menu path: your ledger, next to the GA4 number from step 1.
A worked example
For illustration, say Traffic acquisition credits Paid Social with €10,000 over the four weeks before the test. Say your coin flips leave the dark group with half of your sales before the test.
For illustration, the lit group goes from €40,000 in the four weeks before to €44,000 during the test: plus €4,000. Say the dark group goes from €40,000 to €42,000: plus €2,000. In this worked example, the gap is €4,000 minus €2,000, so Paid Social caused about €2,000 in the dark half.
For illustration, scaled to all regions that is about €4,000 caused, against €10,000 of credit: a ratio of 0.4. In this worked example, each euro of last-click credit stood for about 40 cents the channel caused. Until the next test, read Paid Social's reports through that ratio.
For illustration, the ledger after one test looks like this:
| Channel | Credited by GA4 last click | Caused, from a test | Ratio | Evidence |
|---|---|---|---|---|
| Paid Social | €10,000 | about €4,000 | 0.4 | Regional holdout, four weeks |
| Paid Search | €12,000 | not tested yet | unknown | none |
| €6,000 | not tested yet | unknown | none |
Why four weeks and not two? Look at one store's export. On the Journeys sheet, journeys of 4 to 9 touches took 16.9 days to buy, and journeys of 10 or more took 16.0 days. A test that ends at 14 days would close before many of those slower buyers decide. Run longer if your own paths look like that.
When is a regional test the wrong tool?
When the channel cannot be aimed by place. Email goes to a list, and a creator's post reaches followers wherever they live. For those, hold back a random slice of the list, or switch the channel off in alternating weeks and compare totals.
When most of your sales sit in one region. A pair needs two similar regions, and one giant region has no twin. A user-level lift test inside Meta or Google Ads sidesteps that, if your account clears their minimums.
And when the decision is small. A holdout costs the sales the dark regions would have bought. Google's help says every incrementality study comes with an opportunity cost, so test where a wrong answer costs most.
What should you check when the result looks wrong?
- The groups drifted apart before the test. Your pairs did not match. Google's researchers name the usual culprits: few regions, very uneven ones, and sales that swing over time. Re-pair on a longer history and rerun.
- The dark regions sold more than you expected. Ads may have leaked in. Meta delivers to people who spend time in your locations, recent visitors included. Google Ads exclusions follow where people are, and people located outside these areas may still receive your ads, travellers from dark regions included.
- The ratio is above 1. The channel caused more than last click gave it. That can be real for a channel that starts journeys others finish. Check the pairs first, then believe it.
- The gap points the wrong way. The dark group grew faster than the lit one. That is noise or a local event, not an ad that hurts sales. Extend the test or re-pair.
- Something else changed in one group. A discount, a stock-out or an extra email in one region breaks the comparison. Log every change by region and date while the test runs.
What to do this week
- Pull three months of regional sales. In Shopify, open Total sales by billing location and export it. Pass: you can form several pairs of regions with similar sales. Fail: one region carries most of your sales, so switch the channel on and off over alternating weeks instead.
- Close the Meta leak now. Open your main ad sets in Ads Manager and check Audience > Locations. Pass: Reach more people likely to respond to your ads is unticked wherever you target regions. Fail: it is ticked, so Meta can deliver past your chosen regions; untick it before any test.
- Look for old exclusions in Google Ads. Open your biggest campaign, go to Settings and expand Locations. Pass: nothing sits under Excluded locations, so the dark regions will be exactly the ones you pick. Fail: old exclusions are there, so those regions are already dark; leave them out of both groups.
Check the homework. Your GA4 Attribution paths export already holds the evidence. Causality Engine reads that one file and shows what each channel caused next to what last-click gave it, in 1 to 2 minutes, for €99 once (excluding VAT), refundable within 30 days. Check the homework
Sources, 1 October 2026: Measuring Ad Effectiveness Using Geo Experiments (Google Research); Trimmed Match Design for Randomized Paired Geo Experiments (Google Research); Scopes of traffic-source dimensions (Google); Traffic acquisition report (Google); Sales reports (Shopify); Exporting reports (Shopify); Setting and comparing time ranges for your reports (Shopify); Use location targeting (Meta); Exclude ads from geographic locations (Google); About advanced location options (Google); Set up Conversion Lift based on users (Google); Key event attribution models report (Google)
Related answers
Frequently asked questions
How many regions do I need for a regional holdout?
Enough to form several matched pairs. With only two or three regions, one local event can swamp the result. If your sales sit in a handful of places, switch the channel on and off by week instead. A platform lift test is another route, if you qualify.Can I read a regional test in GA4 instead of Shopify?
Yes, if your purchases carry a region. Google's help shows how to filter the Attribution models report by Region, under User. Shopify's billing location comes from the order itself, so it usually holds up better when shoppers switch devices.What if the channel caused more than last click gave it?
Then the ratio is above 1, and last click undersold it. That can happen to channels that start journeys others finish, such as video or creators. Check that your pairs matched before the test, then give the channel more weight in your plan.
Go deeper: Incrementality testing, explained.
Sixty-second versions of these ideas: Causality Engine on YouTube Shorts.
Keep reading
Terms in this article
- AttributionAttribution identifies user actions that contribute to a desired outcome and assigns value to each. It reveals which marketing touchpoints drive conversions.
- Attribution ModelAn Attribution Model defines how credit for conversions is assigned to marketing touchpoints. It dictates how marketing channels receive credit for sales.
- Causal AttributionCausal Attribution uses causal inference to determine which marketing touchpoints genuinely cause conversions, not just correlate with them.
- ConversionConversion is a specific, desired action a user takes in response to a marketing message, such as a purchase or a sign-up.
- Difference In DifferencesDifference In Differences is a quasi-experimental method that estimates the causal effect of an intervention. It compares outcome changes over time between a treatment group and a control group.
- ExperimentsExperiments are scientific procedures that test hypotheses or demonstrate facts. In marketing, experiments like A/B tests determine the causal effect of campaign changes, enabling data-driven decisions.
- Google AdsGoogle Ads is an online advertising platform where advertisers bid to display ads, service offerings, and product listings.
- IncrementalityIncrementality measures the true causal impact of a marketing campaign. It quantifies the additional conversions or revenue directly from that activity.