Restaurant marketing attribution by location comes down to one question per store: how many extra covers did the ads bring in that wouldn’t have come anyway? The reliable way to answer it is to compare each location’s weekly covers with a matched set of your own locations where spend didn’t change, using the counts your POS already keeps.
Ad platforms can’t do this for you. Meta sees an impression, Google sees a tap on directions, DoorDash sees a sponsored-listing order. None of them saw the four-top that walked in on Friday after a week of Instagram ads. Your Toast or Square terminal did, and it knows which location they sat at.
Why click attribution can’t tell you which restaurants the ads filled
Most restaurant visits leave no click trail. A group chat picks the place. Someone remembers the patio from a reel they scrolled past on Tuesday. A regular walks in because it’s Thursday. The ad may have mattered in all three cases, or in none, and no pixel can tell which.
Meanwhile every platform counts the guests it can link to its own ads, inside its own attribution window. Add up Meta, Google and the delivery apps and you will often get more “conversions” than your POS recorded covers. Nobody is lying. They are each claiming the same people, and some of those people were coming anyway.
That number matters for attribution because your campaigns are not all trying to move the same thing. A dine-in LTO pushed on paid social, a sponsored listing on Uber Eats and a lunch-catering search campaign aim at different counts. The POS can split them. The ad platforms can’t.
Covers, checks or sales: what to measure at each location
Pick one count per brand and keep it. Covers work best for full-service and casual dining. Check count works better for quick service and fast casual, where one check is roughly one visit. Keep net sales as a second read, but don’t make it the headline: check average moves with price increases and menu mix for reasons that have nothing to do with advertising.
| Outcome | Where it comes from | Best for | Watch out for |
|---|---|---|---|
| Covers (guest count) | Guest count by location in Toast or Square | Full-service and casual dining | Servers who skip the guest-count prompt. Audit the default before you trust the trend. |
| Check count | Order or check totals by location | Quick service and fast casual | Catering and large group orders count as one check |
| Net sales | Sales summary by location | A second read next to a count | Price rises and LTO pricing move it with no change in traffic |
| Check average | Net sales ÷ checks | Seeing whether an LTO traded guests up | Not an outcome to credit ads with on its own |
Then split by dining option. Toast tags every order with one (dine in, takeout, delivery, third-party), and most POS systems can report by order source. A dine-in campaign should be judged on dine-in covers. A delivery promo should be judged on total checks across channels, because a promo that moves a dine-in regular onto DoorDash adds an order and loses a cover.
The data you need for location-level attribution
- A location list. POS location ID, the market it sits in (a DMA in the US), open date, close date if any, and a note on patio seating.
- Weekly covers by location and dining option. A year or more, so last spring’s patio season and last December are visible. Six months is the practical floor.
- Spend by market, channel and week. Meta and Google both report spend by geography. Delivery-app ad spend comes from each merchant portal, usually by store.
- A calendar of everything else. LTO start and end dates and which markets ran them, price changes, remodels, closures, local festivals and big catering weeks.
How to separate ad lift from everything else at each location
For every location where spend changed, build a reference from locations where it didn’t. Weight the reference so it tracked the location closely for months before the change. After the change, the gap between the two is the lift. That is the whole idea, and it’s why the method copes with restaurants so well: a brand-wide LTO, a cold snap across the region or a holiday weekend hits both sides, so it drops out of the gap.
Read results by location, but make decisions with some pooling. A single store’s week is noisy. Rain, a home game or one 30-top birthday party can move it 5–10%. Location reads are excellent for ranking stores against each other. They are weaker as stand-alone verdicts on one store’s month.
Worked example: attributing an LTO push across eight locations (illustrative)
A 30-location casual-dining group runs a brand-wide LTO for six weeks. In two metros, covering eight locations, it adds $7,500 a week of paid social and streaming video on top of normal spend: $45,000 in total. The other 22 locations get the LTO and their usual spend.
The eight test locations ran about 8% above their prior six weeks. A naive before-and-after read would credit the media with roughly 6,800 covers. But the 22 comparison locations, which also had the LTO, rose about 4.5%. Weighted location by location, the gap comes to 504 extra covers a week.
| Location | Covers / week before | Lift vs twin | Extra covers / week | Cost per extra cover |
|---|---|---|---|---|
| Metro A · 1 | 2,000 | +6.0% | 120 | $7.81 |
| Metro A · 2 | 2,000 | +5.0% | 100 | $9.38 |
| Metro A · 3 | 1,800 | +4.0% | 72 | $13.02 |
| Metro A · 4 | 1,600 | +0.5% | 8 | $117.19 |
| Metro B · 1 | 1,800 | +5.0% | 90 | $10.42 |
| Metro B · 2 | 1,700 | +4.0% | 68 | $13.79 |
| Metro B · 3 | 1,700 | +2.0% | 34 | $27.57 |
| Metro B · 4 | 1,600 | +0.75% | 12 | $78.13 |
| All eight | 14,200 | +3.5% | 504 | $14.88 |
- Extra covers. 504 a week × 6 weeks = 3,024.
- Cost. $45,000 ÷ 3,024 = $14.88 per extra cover.
- Sales. At a $28 average spend per cover, 3,024 × $28 ≈ $84,670. On sales alone that looks like a 1.9× return.
- Margin. If about 40% of each extra check is left after food cost and hourly labor (use your own figure), a cover is worth $11.20 on the first visit. 3,024 × $11.20 ≈ $33,870, against $45,000 of spend.
- Cut the two that barely moved. Metro A · 4 and Metro B · 4 took $11,250 and returned 120 covers. The other six took $33,750 for 2,904 covers, or $11.62 each: about break-even on the first visit, before any return visits.
When a location like A · 4 shows almost no lift, check its Friday and Saturday waitlist before you blame the creative. A store that’s full at 7pm can’t seat extra demand. Its budget is better spent two exits up the highway.
Delivery apps, LTOs and other restaurant-specific traps
Delivery apps grade their own homework
DoorDash and Uber Eats report the orders that came through sponsored listings and promos. Plenty of those customers were going to order from you anyway; the ad just sat on top of the search they were already doing. Measure third-party orders by location from the POS (if they flow in through an integration) or from merchant-portal exports, and compare them with twins exactly as you would covers. Then look at dine-in in the same weeks. A delivery promo that adds 200 orders and subtracts 150 covers added 50 visits, not 200.
Brand-wide LTOs cancel out; market-only LTOs don’t
An LTO that runs at all 30 locations shows up in the twin, so the gap isolates the media. An LTO tested in only the two metros that also got the media is a different animal: you’re measuring the menu item and the ads together. Either run the item everywhere or accept that the read covers the package. Just don’t report it as media lift.
Price changes and check average
A 4% menu price rise in one region lifts its sales 4% with no change in guests. That’s another reason to attribute on counts. If you must report sales, log price changes by location and date.
Weather, patios and the home team
Regional weather mostly cancels if the twin is built from locations that share it. Patio-heavy stores are the exception: a warm March helps them far more than an enclosed dining room down the road. Flag patio seating in your location list, and be suspicious of a spring read where the only stores that “responded” have patios. Big local games behave the same way, so keep them in the calendar.
Openings and remodels
A new store in a test metro pulls guests from its neighbours and inflates whichever group it lands in. Keep it out of the comparison until it has settled (our guide on how to measure a grand opening covers the ramp). Remodel closures go in the calendar for the same reason.
How long and how big a restaurant attribution test should be
Don’t run a two-week test. It will lie to you. Restaurant weeks are noisy and ads take time to build up, so plan six to eight whole weeks of media, a two- to four-week tail after it, and at least 26 weeks of clean history before it.
Size the budget before you start. If your locations average 1,800 covers a week and your test can detect a 3% lift, you need 54 extra covers per location per week to see anything. At a best-guess $15 per extra cover, that’s about $810 per location per week. Spend $300 and the test will almost certainly come back “not significant”, which tells you nothing. The geo holdout test guide walks through the minimum detectable effect in more detail.
Common mistakes in restaurant attribution
- Crediting the season. Comparing this six weeks with the last six. Spring, patio season and holidays lift every store.
- Adding up platform conversions. Meta plus Google plus DoorDash will claim more guests than you served.
- Judging on ROAS. A 1.9× return on sales can lose money once food and labor are paid. Use cost per extra cover against contribution.
- Spreading budget evenly. Full stores gain little. The worked example’s two weakest locations cost ten to fifteen times as much per extra cover as the best.
- Ignoring dining option. Judging a dine-in campaign on total sales hides delivery swings, and judging a delivery promo on orders hides lost covers.
- Letting new stores into the twin. A ramping store looks like lift in whatever group it joins.
- Reading one store’s week as a verdict. Use location reads to rank; use pooled reads to decide.
Questions people ask about restaurant attribution
Can Toast or Square tell me which ads drove sales?
Not on their own. A POS records what happened at each location, not why. Pair POS covers or checks by location with ad spend by market, then compare locations where spend changed with matched locations where it didn’t. The difference is what the ads added. Countlift connects to both Toast and Square natively and does that comparison for you.
How do you attribute marketing to a specific restaurant location?
Map every location to the market its ads target, export weekly covers per location, and build a twin for each location from steady-spend locations that tracked it closely before the change. The gap after the change is that location’s lift. Divide the spend that reached it by the extra covers to get its cost per extra cover.
Should restaurants measure covers or sales?
Measure a count first: covers for full service, checks for quick service. Sales move with price rises, LTO pricing and menu mix, so a sales lift can appear without a single extra guest. Keep sales as a second read and use it to value each extra cover, not to decide whether the ads worked.
How do I measure DoorDash or Uber Eats ads by location?
Export third-party orders by store, from your POS if they flow into it or from the merchant portal, and compare stores where delivery-ad spend changed with matched stores where it didn’t. Check dine-in covers at the same stores over the same weeks, because a delivery promo can simply move existing guests to a different channel.
How many locations do you need for location-level attribution?
There’s no magic number, but the comparison needs options. With a dozen or more locations, a twin can usually be built that tracks each test store well. With fewer, results are more often directional. Larger spend changes and longer tests help small groups see effects they would otherwise miss.
The data for honest restaurant attribution is already sitting in your POS. Pull covers by location, line them up against spend by market, and the stores that the ads actually filled will separate from the ones that would have been busy anyway.
Next step
Put your own locations through the comparison.
Your first location report is free at any size. Bring a CSV of weekly sales and spend, or connect your POS and ad accounts.
Written by The Countlift team at First Byte in The Woodlands, Texas. Questions or corrections? Email hello@countlift.com.