Six months into running Meta ads at Cork & Candles, we noticed a number that didn't match.
Ads Manager said we had generated 18 conversions in the last week. Guests who clicked an ad and booked a class. Our booking software reported 38 confirmed bookings in the same window, of which a meaningful share were coming from paid social based on referrer data.
The gap was real. Ads Manager was undercounting. We were paying Meta to drive bookings and Meta was telling us roughly half of them weren't happening. Our cost-per-acquisition was being reported as twice what it actually was. Our ROAS looked terrible. We were on the verge of cutting the ad spend.
The cause turned out to be the booking platform. Specifically, how the platform handled the conversion pixel.
This post is about an under-discussed issue in this category, booking platforms that break ad attribution, and why it should matter when you pick one.
How conversion tracking is supposed to work
The Meta pixel is a small JavaScript snippet that lives on your website. When a guest lands on your page from a Meta ad, the pixel fires. When they continue through to a booking confirmation, a purchase event fires. The two events together let Meta connect "this ad click led to that booking" and attribute the conversion to the ad creative that produced it.
For this to work, two things have to be true. The pixel has to fire on your domain (where the guest lands). And the conversion event has to fire on a page Meta can associate with the original click. If the booking flow happens on a different domain, say secure.bookeo.com/yourstudio instead of yourvenue.com/book, the chain breaks.
Meta sees the ad click on your domain. Meta loses the trail when the guest jumps to the booking platform's domain. The conversion happens, but on a third-party page Meta has no visibility into. The booking is real. The attribution is gone.
Which platforms break it, and how
Different booking platforms break this in different ways, but the pattern is similar.
Iframe / Lightframe embeds (FareHarbor and similar). The booking widget appears to live on your page, but it's an iframe pulling from the platform's domain. Your pixel fires on the parent page. The purchase event fires inside the iframe, on the platform's domain. Most pixel implementations can't bridge that boundary. Some advanced setups can, but they require custom JavaScript work that most operators don't have.
Redirect-style booking (Bookeo and similar). The guest clicks "Book Now" on your site and gets redirected to secure.bookeo.com/yourstudio. The conversion happens on Bookeo's domain. Meta can't associate that with the original ad click.
Custom integrations (most platforms). Even when a platform offers a "Meta integration," it's typically a server-to-server conversions API setup that requires careful configuration of event names, deduplication, and customer matching. Misconfigure any of those and the attribution drops. Most operators don't know to check.
What this costs you
The numbers depend on your spend, but here's the math we ran at Cork & Candles.
Our Meta spend was about $2,400/month. Our actual conversions, according to our booking software, were producing a ROAS of about 4.2x. Every dollar of spend was returning $4.20 in tracked bookings.
Meta's Ads Manager, with the broken attribution, was reporting a ROAS of about 2.1x. From Meta's perspective, we were barely profitable on the spend.
Three things flow from that gap:
-
Meta's algorithm optimizes against the wrong data. The campaigns and creative that Meta thinks are working are the ones Meta is correctly tracking. The ones Meta can't track look like they're underperforming, even if they're driving real bookings. Meta scales the wrong ads.
-
Your decision-making gets worse. You decide to cut a campaign because Ads Manager says it's losing money. The campaign was actually profitable. You just couldn't see it.
-
Your retargeting audiences drain. Meta's lookalike and retargeting audiences are built from the conversion data Meta sees. Half-broken attribution means half-empty audiences, which compounds over months.
For a venue spending $2,400/month, the wasted budget from optimizing against bad data is probably $400-700/month. Not because Meta is unfair, but because the data they're optimizing against is incomplete.
What "your pixel, your data" should actually mean
A booking platform that takes ad attribution seriously should support three specific things.
The pixel fires on your domain. The booking flow happens on yourvenue.com/book or a subdomain you own (book.yourvenue.com), not on the platform's domain. Meta sees the entire customer journey from ad click to confirmation, all on infrastructure attributed to you.
The purchase event includes the right metadata. Booking ID, value, currency, customer email (hashed for matching), event name. Without these, Meta can't deduplicate against its own client-side tracking, and you end up with double-counted conversions or missing ones.
The same approach works for Google Ads conversions. Whatever the platform does for Meta should also work for Google's conversion tracking. The Google Ads pixel and the Meta pixel both rely on the same on-page event firing pattern.
What we built into ArtistryHost
This was a real pain point for us at Cork & Candles, and one of the things we wanted to fix when we built our own platform. ArtistryHost's booking flow runs on your subdomain (e.g., book.yourvenue.com) by default, with optional custom-domain support. The Meta pixel and Google Ads pixel fire on your domain. Conversion events fire with the right metadata. The attribution chain stays intact from the ad click to the booking confirmation.
This means: when you look at Meta Ads Manager, the conversion numbers you see are the conversion numbers that happened. Your ROAS is real. Meta's algorithm has accurate data to optimize against. Your retargeting audiences fill correctly.
If you're evaluating booking platforms, this is one of the questions to ask: "Does the booking flow happen on my domain? Does the conversion event fire there?" If the answer is "we have a Meta integration that handles attribution," that's not the same answer. That's a server-to-server workaround that may or may not work for your specific ad setup.
The principle
If you spend money on ads, the booking platform that captures the conversion needs to fire the conversion event on infrastructure you own. Otherwise the attribution chain breaks, Meta and Google optimize against incomplete data, and you make worse decisions about your spend.
It's a small architectural detail. It compounds into thousands of dollars a year of misallocated ad budget. Pick a platform that treats your ad data as your data.