Every restaurant owner who has run ads knows the feeling: the dashboard says the campaign got 50 conversions, but the dining room math doesn't add up. Where are these people?
The gap has a boring technical cause, and it's fixable. This is the plain-English version.
The pixel counts clicks. You sell dinners.
The standard way to measure ads is a pixel — a bit of code on your website that fires when someone clicks an ad and lands on a page. The problem is what it can and can't see:
- It fires on page views and clicks, not reservations — "visited the booking page" gets counted whether or not a table was ever booked.
- Bookings often happen on another domain — a booking platform, a widget, a third-party page — where your pixel isn't watching.
- iOS privacy changes and ad-blockers quietly eat the cookie trail, so even real bookings lose their connection to the ad that drove them.
- And a click is not a diner. A no-show "conversion" costs you money twice — the ad spend and the empty seat.
So the platform optimizes toward what it can see: people who click. You wanted people who book, show up, and spend.
Closing the loop, step by step
Closed-loop attribution means the signal makes a full round trip. Here's the whole loop:
- 1 — Capture the source at booking. When a guest lands on your reservation page, record where they came from: the campaign tags (UTMs) and the ad platform's click ID. Stamp it onto the reservation itself.
- 2 — Confirm they actually came. A reservation isn't revenue until someone sits down. Marking the table seated — or better, matching the reservation to a paid POS check — turns "a click" into "a party of four that spent real money."
- 3 — Send that truth back, server-side. Google and Meta both accept conversions sent directly from a server (no cookies involved). You post back: this click became a seated booking, with a value attached.
- 4 — The algorithm learns from diners, not clickers. Fed real outcomes, the platforms hunt for more people like the ones who actually filled your room — and your reporting finally shows spend next to covers.
Why server-side beats the pixel
Sending conversions from a server skips every weak link in the pixel chain: it doesn't care about ad-blockers, cross-domain hops, or Safari cookie policies. And because it fires on your definition of success — a booking, a show-up, a check — you stop paying the platforms to find people who merely click things.
What you'd need to build this yourself
None of this is magic, but it is plumbing: a booking page that captures and stores click IDs, server-side integrations with Google's and Meta's conversion APIs, a way to match reservations to POS checks, and reporting that joins ad spend to actual covers. That's the part restaurants rarely have time to wire up — and it's exactly what Tableloop does out of the box: every reservation carries its source, show-ups post back to the ad platforms automatically, and your dashboard shows which campaign filled which tables.
An honest caveat
No attribution is perfect. Walk-ins, word of mouth, and the regular who saw your ad but booked by phone will always blur the edges. The goal isn't a perfect ledger — it's optimizing toward seated tables instead of clicks. That single change is usually the difference between "I think the ads work" and knowing.