← All posts

How closed-loop attribution actually works

TableloopJuly 6, 20266 min read

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.

See it working in your restaurant

Reservations, guest data, automations, events, and closed-loop ad attribution — one platform, no per-cover fees.

Start free