How Do I Know If My Restaurant Ads Are Working? Track the Check, Not the Click
Restaurant ads work when completed visits and settled checks produce enough contribution margin to cover campaign costs—not when clicks rise.
Your restaurant ads are working when they produce the outcome you chose before launch—usually completed visits, settled checks, and enough contribution margin to cover campaign costs. Track the chain from ad to trackable action to identified guest to completed visit to settled POS check; delivery, views, clicks, replies, leads, and reservations help diagnose the path, but they are not the finish line.
That is why cost per completed visit belongs next to revenue and margin. A cheap click is not a cheap customer if the click never becomes a visit.
“Every month I can deliver stats like clicks from Meta and Google ads for my clients, but it doesn't tell them the full story of how that turns into revenue.”
Source: A restaurant marketer working with independent restaurants
Choose the check-level finish line before the ad launches
Write one primary business outcome on the campaign brief before you approve the creative. For a visit-driving ad, that outcome might be completed first visits at or below your allowable acquisition cost.
For a repeat-visit campaign, it might be identified guests who return within a defined observation window. The final decision still depends on contribution margin, not the largest number in the ad dashboard.
Keep diagnostic signals and business outcomes in separate columns:
| Measure | What it tells you | What it does not prove |
|---|---|---|
| Ad delivery or impressions | The platform served the ad | A person paid attention or visited |
| Video views | The creative held some attention under the platform's view definition | Purchase intent or revenue |
| Clicks | Someone opened the next step | A lead, reservation, or visit |
| Replies or messages | Someone started a conversation | An identified guest or completed visit |
| Leads or offer claims | You captured a trackable identity and response | Attendance or a settled check |
| Reservations | Someone intended to visit at a future time | A completed visit or revenue |
| Completed visits | An identified party arrived | The number of covers, check value, or profit |
| Covers | The number of diners served in the tracked parties | The number of distinct visits or guests |
| Settled checks | A payment was completed | Incremental sales caused by the ad |
| Repeat visits | An identified guest returned within the window you defined | Whether the ad alone caused the return |
| Contribution margin | Settled sales remaining after visit-level variable costs | Causal lift unless you also have a valid comparison design |
A real operator can see covers fall while spend per person rises, so neither covers nor sales should stand in for the other. Evaluate both against the same restaurant, period, and operating conditions.
“Yelp, Google, Meta, everyone wants to sell me ads and will make up ROI but it's all guesswork.”
Source: A family brewpub owner
The cure for that skepticism is not another estimated-return widget. It is a record you can audit from the campaign response through the check.
Build the five-link chain from ad to settled check
Give every campaign a trackable path. Then test it yourself before spending money.
| Link | Record this | Common failure point |
|---|---|---|
| 1. Ad | Campaign name, ad or creative ID, launch date, and spend | Naming changes between the ad account and restaurant report |
| 2. Trackable action | A campaign-specific landing page, offer claim, message flow, or reservation link | A generic homepage or phone call drops the campaign identity |
| 3. Identified guest | Consent-based phone, email, reservation identity, or member ID | A click remains anonymous, or one person forwards the offer to another |
| 4. Completed visit | Verified in-person arrival tied to the identified claim or reservation, with date, time, and covers | A redemption or completed reservation status is treated as a visit without evidence that the party arrived |
| 5. Settled POS check | Check ID, net sales, discounts, tender status, and the guest or campaign identifier | Staff fulfills the offer without attaching the identifier to the settled check |
Do a complete test transaction, not just a test click. Claim the offer on your phone, arrive as the guest, follow the staff steps, settle a paid, non-voided check, and confirm the correct campaign match appears in the report. Then void or refund that same test check and verify that the final settled-sales view excludes it. If you use a code or dedicated menu item, staff must apply it consistently or the order link can disappear.
In one restaurant campaign, an agency owner reported more than 100 sign-ups and no tracked redemptions, then said the restaurant had offered the free item to every holiday walk-in. The promotion may have moved food, but skipping the redemption record made campaign visits unknowable.
Test two exceptions as well:
- Cash: The tender can be cash and still remain trackable if the guest or campaign identifier is attached to the check before payment. If the workflow cannot do that, label the check unmatched instead of guessing.
- Another person pays: A guest may claim or reserve while a companion pays. Keep the claimant or reservation identity attached to the visit and check when your system permits it. If it does not, keep the completed visit, covers, and unmatched payment as separate facts; do not force the payer into the campaign record.
Use the reservation record to determine who arrived, then use the check record to determine what was settled. The implementation details in tracking reservations from ads and tracking restaurant sales from Facebook ads cover those two links separately.
Label the proof before you read the result
Four reports can describe the same campaign without making the same claim:
| Evidence label | What it means | Safe conclusion |
|---|---|---|
| **Directly matched** | A stored campaign action and identified guest connect to a recorded completed visit and settled check | This campaign record is linked to this visit and settled sale; linkage alone does not prove the ad caused either one |
| **Platform-attributed** | An ad or restaurant platform assigns a conversion under its identity rules, lookback window, and model | The platform credited the result under its stated method; it is not the same as a direct check match or causal lift |
| **Observed lift** | A test group, location, or period performed differently from a defined comparison | A difference was observed; seasonality, events, pricing, capacity, and other changes still need to be considered |
| **Modeled opportunity** | A forecast combines assumptions such as response rate, visit rate, average check, or margin | The number is useful for planning and scenario testing, not as reported revenue or profit |
If a dashboard says “estimated,” treat the assumptions as part of the result. An estimate is a model, not a settled check.
Use one scorecard that exposes the broken link
Set the reporting window and restaurant location at the top. Do not mix campaign-to-date spend with one week's visits, or mature guests with guests who have not had a full chance to return.
| Scorecard field | Definition or exact calculation |
|---|---|
| Campaign overhead | Media, creative production, platform, software or agency fees, influencer compensation, and usage-rights fees. Allocate a shared charge by one written rule, such as campaign days, locations, or share of media spend, and use that rule every period |
| Incentive fulfillment cost | Count the offer once for the cost-per-visit ledger: use either its actual incremental food, packaging, processing, fulfillment, and labor cost or a clearly labeled face value, not both |
| Matched-check variable cost | Food, packaging, processing, fulfillment, and incremental labor attached to matched checks. Do not count a cost already included in incentive fulfillment twice; subtract a discount or reward separately only when the declared settled-sales field is recorded before it |
| Total campaign cost | Campaign overhead plus incentive fulfillment and any other incremental visit-level cost not already counted |
| Trackable actions | Completed campaign-specific claims, forms, messages, or reservation starts under one stated definition |
| Identified leads | Unique people with a permitted identifier captured through that action |
| Claims or reservations with known outcomes | Unique eligible claims or reservations whose full attendance window has elapsed and whose result is verified as arrived, no-show, or canceled; report ineligible, future, pending, unresolved, and rescheduled records separately |
| Completed visits | Eligible, matured claims or reservations with verified in-person arrival; a redemption without arrival evidence is a response or matched purchase, not a completed visit |
| Covers | Diners attached to those completed visits |
| Matched settled checks | Settled checks connected to the identified visit and campaign |
| Directly matched settled sales | Sales on those matched settled checks under one documented POS definition; state whether discounts, rewards, refunds, taxes, and tips are included |
| Claim/reservation-to-visit rate | Verified completed visits ÷ eligible claims or reservations with an elapsed attendance window and known outcome |
| Check-match coverage | Completed visits with a matched settled check ÷ completed visits eligible for matching |
| Cost per completed visit | Total campaign cost ÷ verified completed visits |
| Average matched check | Directly matched settled sales ÷ matched settled checks |
| Repeat-visit rate | Unique eligible identified first-visit guests in the denominator who completed another verified visit inside the chosen window ÷ unique eligible identified first-visit guests whose full chosen return window elapsed and whose return outcome was reconciled and known; keep early returns out until cohort maturity and report open, immature, ineligible, and unresolved counts separately |
| Estimated incremental contribution margin | Conservatively estimated incremental settled sales minus the visit-level variable costs assigned to those sales |
| Estimated campaign contribution | Estimated incremental contribution margin minus campaign overhead |
Keep zeroes visible. “No data” means the system did not produce a usable record; zero means the system observed none. Those require different repairs.
Matched settled sales, whether the POS labels them gross or net, are not profit and are not necessarily incremental. For a conservative decision, use this two-step calculation:
Conservatively estimated incremental settled sales − food − packaging − processing − fulfillment − incremental labor − discounts or rewards not already reflected in the declared sales field = estimated incremental contribution margin.
Estimated incremental contribution margin − media − creative production − platform, software, or agency fees − influencer compensation − usage-rights fees = estimated campaign contribution.
Reconcile the incentive row to those formulas so the same food, discount, reward, or fulfillment cost is subtracted once, not twice.
Document every assumption. If you cannot defend an incremental-sales estimate, report directly matched settled sales under the documented POS definition and the costs separately. Do not rename the difference “profit” or “causal ROI.”
Diagnose the first broken link in order
Do not rewrite the ad while the tracking is broken. Review the measurement chain from the earliest dependency to the latest:
- Tracking: Repeat the full test transaction, including the cash and different-payer cases. Verify campaign identity, guest identity, visit status, and settled-check fields before interpreting performance.
- Delivery: If impressions are missing, check campaign status, audience eligibility, billing, and placement. Creative cannot earn a response if the ad did not serve.
- Attention: If delivery exists but qualified views, clicks, or replies do not, inspect the opening, message, audience, and placement. If delivery was healthy and then suddenly collapses, diagnose the cliff before blaming gradual creative fatigue.
- Offer response: If people engage but do not become identified leads, claims, or reservations, test the landing page, form, offer clarity, mobile experience, and consent step.
- Attendance: If claims or reservations do not become completed visits, calculate the exact claim/reservation-to-visit rate. Check reminders, hours, location instructions, blackout rules, and staff recognition of the offer.
- Check economics: If visits arrive but matched sales or average check disappoint, inspect match coverage, party size, discounting, menu mix, and whether another person paid.
- Repeat behavior: Wait until the full observation window has elapsed, then compare repeat visits using the fixed denominator in the scorecard.
- Operations: Note closures, capacity limits, service failures, local events, holidays, and price changes. They can interrupt the chain or distort an observed-lift comparison.
Repair the first failed dependency, rerun the test transaction, and then change one campaign variable at a time. That keeps a tracking repair from being mistaken for a creative win.
Write the continue, repair, and stop rules before the weekly review
There is no universal restaurant ROAS, ad budget, or test duration that makes a campaign good. Your allowable cost per completed visit depends on check economics, capacity, repeat behavior, and which costs you include.
Choose the same weekly review day and let the reporting window close before grading attendance or repeat behavior. Use daily checks only for operational failures such as rejected ads, broken pages, exhausted budgets, or unavailable offers.
Write three rules before launch:
- Continue when the attribution chain is functioning, enough eligible outcomes have matured for your stated window, and estimated campaign contribution is positive after the costs included in your decision.
- Repair when the first broken stage falls below your prewritten restaurant-specific threshold but remains inside the spend cap. Name the one dependency you will fix and the date you will reevaluate it.
- Stop when the prewritten spend cap or decision date arrives and either the chain still cannot produce trustworthy records or estimated campaign contribution remains negative after the included costs.
These rules turn the weekly meeting into a decision. They also prevent a high click-through rate from rescuing a campaign that never produces a viable check.
Feast can connect the campaign response to the check
Once you have defined the finish line and evidence labels, software can reduce the manual handoffs. Feast documents a flow that sources local food-influencer content, runs that content as ads, captures guest identity through an offer, matches later in-person purchases through supported POS connections, and reports sales by campaign.
That makes Feast useful for campaign-to-check reporting, but the boundary still matters: POS-linked campaign sales are attributed gross sales, not automatic proof of incremental profit or causal lift. You still supply the restaurant's costs, contribution assumptions, operating context, and any comparison design.
For a limited time, the audit is a one-time $27 purchase. Find out whether acquisition or retention is holding the restaurant back and get your restaurant's retention curve.