I run marketing for a consumer brand that just did something most ecommerce brands never try to measure properly: a real TV campaign. Not connected TV with a pixel. Actual TV, plus YouTube and paid social, all pushed into a handful of metro markets only.
The obvious question from the owner was the hard one. Did it work? Did any of that spend actually move revenue, or did we just spend a chunk of budget to feel like a big brand for a few weeks?
TV has no click. No pixel fires when someone sees your commercial during a ballgame and buys three days later on their phone. So the honest answer to "did it work" is almost always a shrug and a vibe. I didn't want a vibe. I wanted a number.
The way you get a real number is a geo test. You run the campaign in some markets and not others, then compare. The markets that got the ads are the treatment group. The rest of the country is your control. If the test markets pull ahead of the control after launch, beyond what they were already doing, that gap is your lift.
So I asked my AI coworker to build it.
The First Problem: You Can't Get Metro Data the Easy Way Anymore
My first instinct was GA4. Pull revenue by metro, split test markets from everything else, done. Except GA4 doesn't have a metro or DMA dimension anymore. That went away when Universal Analytics was retired. The old reports everyone used for this quietly stopped existing.
Viktor flagged it before wasting time down that path, and proposed something better: classify the orders directly. Every Shopify order has a shipping zip code. Map each zip into its metro market, tag the order, and now you have revenue by market straight from the source of truth, not from an analytics tool that samples and models.
It pulled every complete week of this year and lined each one up against the same week last year, Monday through Sunday, so the year-over-year comparison was clean and the days of the week matched.
The Baseline Trap
This is where a geo test can fool you. The TV launches, revenue in the test markets is up year over year, everyone high-fives and credits the campaign.
Viktor stopped me before I did that. It checked the pre-launch baseline first and told me plainly: the test markets were already outperforming the rest of the country most weeks this year, before the TV ever ran. The baseline was not flat.
That one caveat is the whole game. If your test markets were already running ahead, some of the post-launch bump was going to happen anyway. The real lift is the gap that opens up beyond that existing trend, not the raw year-over-year number. Measure it wrong and you'll congratulate a TV campaign for growth it didn't cause, then over-invest next quarter.
The chart above is illustrative, not the client's real numbers, but it shows the shape you're looking for: two lines tracking together, then the test-market line separating from the control after launch. That separation is the signal. Everything below it is noise you were going to get regardless.
Then I Made It Run Itself
A one-time analysis is useful once. A weekly one that updates on its own is useful forever. So Viktor set a cron to refresh the sheet every Monday morning with the latest complete week, and to highlight every post-launch week in gold so the test period is obvious at a glance. I don't touch it. It shows up updated.
One nice moment: I told it to leave the dashboard tab alone because I wanted to build my own charts up there. It scoped the automation to only the data tabs and never touched mine again.
How to Run One Yourself
This works for any channel you can't track with a click. TV, radio, podcast reads, billboards, direct mail, influencer pushes. If you can run it in some places and not others, you can measure it.
- Pick your test markets and your control. Run the campaign in the test markets only. Leave the rest as your comparison.
- Pull revenue from order data, not GA4. Map order zip codes to markets. It's more reliable and it survives whatever analytics tools break next.
- Check the baseline before you judge anything. If your test markets were already ahead, subtract that trend out. Lift is the gap above where they were headed anyway.
- Compare week over week, year over year, with the days lined up. Clean comparisons beat clever ones.
- Automate the refresh so you're looking at it every week, not rebuilding it every quarter.
The whole thing, from the first message to a live, self-updating dashboard, took an afternoon. The AI I use for this is Viktor, an AI coworker that lives in Slack. It's the same one I use for rebuilding my website and producing commercial assets. If you want to try it, you can get $100 in free credits plus $50 off your first purchase here.
For more real examples with screenshots: my full Viktor review.