The deliverable
The incrementality report
One page, written for the meeting where the budget gets set. Every number on it is computed from the geo test at build time, including the four diagnostics that say whether the estimate should be believed.
The campaign caused $448K of revenue on $640K of media. Incremental ROAS 0.70×, against 3.36× reported by the platform.
79% of the revenue the platform claimed was going to happen anyway, measured against markets that ran no campaign. That share is not fraud and not a bug in the platform. It is what an attribution window does when it cannot see a counterfactual.
| Platform-attributed revenue | $2.15M | 3.36× reported ROAS |
| Before/after in treated markets | $1.88M | 2.94× implied ROAS, season included |
| Incremental, measured | $448K | 0.70× incremental ROAS |
The rank test refits the model 20 more times, each time pretending a different held-out market was the treated one. The real treated markets show the largest post-to-pre gap ratio of all 21 units, which is the smallest p-value a donor pool this size can produce.
It measures revenue, not margin, so whether 0.70× is acceptable depends on contribution margin and on what the same money would have returned elsewhere. It measures these 4 markets over 28 days, and says nothing about a different creative, a different budget level, or the long-run brand effect that falls outside the window. And it rests on the held-out markets being a fair counterfactual, which is what the diagnostics above are for and why they are printed rather than filed.
A measurement vendor that always returns a confident number is not measuring anything. If the pre-period fit had come back at 4% instead of 0.97%, this page would say the test is inconclusive and recommend a longer pre-period or a different holdout. That outcome is a product feature, and it is the one that makes the other outcome worth trusting.