Home/Resources

AdsJune 20269 min read

Restaurant advertising ROI: from click to cover paid

UTMs, conversions, booking engine, attribution: the method to link every ad click to a booking, then to a cover actually paid.

Painapo dashboard: ad spend, conversions and revenue

You spend on Meta or Google advertising, and the platforms report "conversions". But how many of those bookings actually showed up, dined and paid the bill? Measuring the ROI of restaurant advertising means linking three steps: the click on the ad, the booking, then the cover actually paid. Without that link, you are steering with incomplete numbers.

This guide details the method: UTM parameters, platform conversions, booking-engine integration, attribution, the ROI calculation, and how māhie puts it into practice with its Painapo tool. Advertising interfaces change, so we describe the logic and the stable settings.

Restaurant advertising ROI: what exactly are we talking about?

Two notions are often confused.

  • ROAS (return on ad spend): the revenue attributed to advertising divided by what you spent on it.
  • ROI: the net gain relative to the investment. You deduct costs, at minimum the ad spend, and ideally the cost of goods and related expenses.

In both cases, the quality of the result depends on what you put into "attributed revenue". An advertising platform generally counts a booking. Your cash register counts a cover paid. In between are cancellations, no-shows, tables that spend little and those that come back.

Here is the path to measure:

  • Click: the person saw and clicked the ad, with the traffic source identified.
  • Booking: they confirmed a table, on your site or on your booking engine's site.
  • Visit: they showed up (or not).
  • Bill: they spent an amount, and may come back.
Worth remembering: a cancelled booking or a no-show is not a result. The real indicator is the revenue collected from guests who came through advertising, compared with the ad spend.

UTM parameters are tags added to an ad's URL. They let your analytics tool know which campaign brought the visitor. Five parameters exist:

  • utm_source: the originating platform (for example facebook, google).
  • utm_medium: the type of traffic (for example cpc for paid).
  • utm_campaign: the campaign name.
  • utm_content: the ad variant (visual, hook).
  • utm_term: the keyword, mostly for search.

A simple method:

  • Define a naming convention and stick to it: lowercase, no accents or spaces, same order.
  • Apply it to every paid link. In Meta, URL parameters are entered at ad level (the "Tracking" section during creation). Meta also offers dynamic parameters, filled in automatically, with limits depending on objective and placement: test them before relying on them.
  • Use the same format everywhere: a link missing a parameter falls into "direct" or "unattributed".
  • Document in a shared spreadsheet what each value means, so your team and providers speak the same language.

On Google Ads, auto-tagging adds a click identifier (GCLID) to the URL, which is used to link imported conversions to the original click. UTMs remain useful for finding the campaign in your analytics.

Conversions and the booking engine: sending back the confirmed booking

Platforms optimize what you tell them. If you do not tell them a booking happened, they optimize for clicks.

On the platform side, define the confirmed booking as the conversion, not the page visit:

  • on Meta, with the Pixel and the Conversions API, deduplicated by event ID (see our guide Meta Ads for a restaurant);
  • on Google Ads, with a conversion on the confirmation page or event, optionally enriched by enhanced conversions (hashed customer data, SHA256) and offline conversion import via the click identifier (see Google Ads and brand protection).

On the booking-engine side, the point to check is where the confirmation happens:

  • On your domain (a module embedded in your site): tracking is simplest, because the confirmation page belongs to your site.
  • On the vendor's domain (an external window or link): the visitor changes site at the moment of booking. UTM parameters and click identifiers may get lost on the way, and your analytics tool may count the booking as "direct" or "referral" traffic. You then need to configure cross-domain tracking or send the event from the server.
  • In both cases, ask your vendor what it can pass on: confirmation event, campaign parameters, server notification. Capabilities vary by tool.

Do not forget the legal framework: in France, placing advertising trackers requires consent, and the CNIL expects refusing to be as easy as accepting. Server-side tracking is not a way around that framework: have your setup validated.

Attribution: who gets credit for the booking?

A guest sees an Instagram ad on Monday, searches your name on Google on Wednesday and books by typing your address on Friday. Who gets credit? That is the attribution question.

What to know:

  • Each platform tends to claim the credit. Meta and Google can each attribute the same booking: adding their reports together overstates the result.
  • Last click gives everything to the last touchpoint, often a search on your name, which underestimates discovery.
  • Data-driven models spread the credit across several touchpoints, but depend on the data volume available.
  • Attribution windows (the time during which a conversion is tied to an ad) change the figures: always compare on the same window.

For a restaurant, a pragmatic approach comes down to three rules:

  • A single source of truth: your booking engine, or a tool connected to it, rather than the sum of the platforms.
  • A constant attribution rule: it may be imperfect, but it must stay the same month to month.
  • A simple test: cut or double a campaign's budget over a period and observe the effect on total bookings.

Calculating the ROI of your campaigns: a step-by-step method

  1. List the ad spend for the period, by platform and campaign.
  2. Count the bookings coming from advertising (via UTM or source in your booking tool).
  3. Remove cancellations and no-shows: keep the guests who came.
  4. Add up the revenue collected from those guests: the actual bill, not an estimate.
  5. Calculate: ROAS = revenue collected ÷ spend; ROI = (revenue collected − spend − related costs) ÷ spend.
  6. Look at what follows: a guest acquired through advertising may return. Their lifetime value (LTV) changes the trade-off.
Fictional example: a restaurant spends €600 on advertising in a month. 50 bookings are attributed to ads, 8 are cancelled or no-shows, leaving 42 tables that came, for €3,780 collected. ROAS is 3,780 ÷ 600 = 6.3. If related costs (products, service) represent €1,700 of that revenue, ROI is (3,780 − 600 − 1,700) ÷ 600, about 2.5. These figures illustrate the calculation: they are neither a real result nor a target.

A few precautions:

  • Compare like with like: same periods, same services (lunch and dinner are not equivalent).
  • Do not judge on a single week: a campaign needs volume to be read.
  • Account for guests who would have come anyway: test by cutting a campaign, or exclude your known customers from prospecting.

At māhie, this topic is at the heart of our Ads work: we follow every euro of advertising down to covers. For that, we built Painapo, a tool that links advertising campaigns to real bookings and real in-restaurant spend. It starts from an observation: browser pixels, limited by cookies, see neither the booking, nor the visit, nor the bill.

According to the tool's public presentation, Painapo offers:

  • server-side tracking, connected directly to SevenRooms;
  • a real-time dashboard: cost per booking, conversion rate, average spend, LTV and ROI;
  • the journey of each guest who came through advertising: booking, visit, cancellation or no-show, visits, spend;
  • exportable audiences for Meta and Google: exclude regulars, target by spend or frequency;
  • several restaurants and several ad platforms in a single account.

Painapo is connected to SevenRooms. If your booking engine is different, the method described above remains valid; find out what can be connected. See the tool's presentation on the Tools page or at painapo.io.

Restaurant advertising ROI: frequently asked questions

What is the difference between ROAS and ROI for a restaurant?

ROAS divides the revenue attributed to advertising by the ad spend. ROI accounts for net gain: you deduct spend and related costs. In both cases, start from revenue collected, not the number of bookings.

How do I link an ad click to a booking?

Tag your links with UTM parameters, define the confirmed booking as a conversion in each platform, and check that your booking engine passes on the campaign information or the confirmation.

Why don't my Meta and Google figures match my bookings?

Each platform counts with its own attribution model and may claim the same booking. They also count a booking, not a cover paid. Compare them against a single source, your booking tool.

Should no-shows be counted in ROI?

No: a table that does not show up generates no revenue. Remove cancellations and no-shows from the bookings attributed to advertising, to keep only the guests who came and their bill.

Need help measuring the ROI of your restaurant advertising?

Knowing the real return on your advertising means knowing what to cut and what to reinforce. māhie supports 90+ restaurant and hospitality venues and tracks campaigns all the way to the booking. Concretely, we can:

  • set up booking tracking, to connect every euro to covers;
  • deliver clear reporting: what works, what we cut;
  • run your campaigns on Meta and Google, with a media strategy and budget that fit;
  • plug in Painapo to track ad spend, conversions and revenue.

Discover our Ads services or contact māhie and we will look at how to measure your ROI together.

Corentin
CorentinFounder of māhie