Feast AnalyticsHow Do I Know If My Restaurant Ads Are Working? Track the Check, Not the Click

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:

MeasureWhat it tells youWhat it does not prove
Ad delivery or impressionsThe platform served the adA person paid attention or visited
Video viewsThe creative held some attention under the platform's view definitionPurchase intent or revenue
ClicksSomeone opened the next stepA lead, reservation, or visit
Replies or messagesSomeone started a conversationAn identified guest or completed visit
Leads or offer claimsYou captured a trackable identity and responseAttendance or a settled check
ReservationsSomeone intended to visit at a future timeA completed visit or revenue
Completed visitsAn identified party arrivedThe number of covers, check value, or profit
CoversThe number of diners served in the tracked partiesThe number of distinct visits or guests
Settled checksA payment was completedIncremental sales caused by the ad
Repeat visitsAn identified guest returned within the window you definedWhether the ad alone caused the return
Contribution marginSettled sales remaining after visit-level variable costsCausal 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.

LinkRecord thisCommon failure point
1. AdCampaign name, ad or creative ID, launch date, and spendNaming changes between the ad account and restaurant report
2. Trackable actionA campaign-specific landing page, offer claim, message flow, or reservation linkA generic homepage or phone call drops the campaign identity
3. Identified guestConsent-based phone, email, reservation identity, or member IDA click remains anonymous, or one person forwards the offer to another
4. Completed visitVerified in-person arrival tied to the identified claim or reservation, with date, time, and coversA redemption or completed reservation status is treated as a visit without evidence that the party arrived
5. Settled POS checkCheck ID, net sales, discounts, tender status, and the guest or campaign identifierStaff 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:

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 labelWhat it meansSafe conclusion
**Directly matched**A stored campaign action and identified guest connect to a recorded completed visit and settled checkThis 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 modelThe 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 comparisonA 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 marginThe 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 fieldDefinition or exact calculation
Campaign overheadMedia, 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 costCount 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 costFood, 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 costCampaign overhead plus incentive fulfillment and any other incremental visit-level cost not already counted
Trackable actionsCompleted campaign-specific claims, forms, messages, or reservation starts under one stated definition
Identified leadsUnique people with a permitted identifier captured through that action
Claims or reservations with known outcomesUnique 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 visitsEligible, matured claims or reservations with verified in-person arrival; a redemption without arrival evidence is a response or matched purchase, not a completed visit
CoversDiners attached to those completed visits
Matched settled checksSettled checks connected to the identified visit and campaign
Directly matched settled salesSales on those matched settled checks under one documented POS definition; state whether discounts, rewards, refunds, taxes, and tips are included
Claim/reservation-to-visit rateVerified completed visits ÷ eligible claims or reservations with an elapsed attendance window and known outcome
Check-match coverageCompleted visits with a matched settled check ÷ completed visits eligible for matching
Cost per completed visitTotal campaign cost ÷ verified completed visits
Average matched checkDirectly matched settled sales ÷ matched settled checks
Repeat-visit rateUnique 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 marginConservatively estimated incremental settled sales minus the visit-level variable costs assigned to those sales
Estimated campaign contributionEstimated 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:

  1. 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.
  2. Delivery: If impressions are missing, check campaign status, audience eligibility, billing, and placement. Creative cannot earn a response if the ad did not serve.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. Repeat behavior: Wait until the full observation window has elapsed, then compare repeat visits using the fixed denominator in the scorecard.
  8. 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:

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.