Your Facebook ads send people to book, and then the trail goes cold. The booking happens in Mindbody, Acuity, Calendly, Square Appointments or your clinic's own system, and Ads Manager reports clicks with no bookings behind them. Meta can't optimize for bookings it never hears about, so it optimizes for what it can see. Here's why bookings go missing, the four ways to track them, and how to prove that one booking produces exactly one event.

The short answer
  • Bookings go missing because they happen on the booking system's domain or in its embedded frame, where the Pixel on your site can't see them.
  • Booking systems' own Meta integrations vary: a standard Schedule event, custom events, or page views only.
  • The four fixes: the built-in integration, a thank-you page you control, server events from the booking system's webhooks, or offline uploads.
  • Test with a real booking until it produces exactly one booking event, then optimize the campaign for that event, not for clicks.

Why bookings go missing

The Meta Pixel is code on your website. It reports what visitors do on your pages, and it recognizes a returning browser by a first-party cookie: Meta's reference says its browser ID is stored in the _fbp cookie under your domain. A booking system on its own domain is, to the browser, a different site with its own cookies.

Embedding the booking widget on your page doesn't fix that. When a widget loads in a frame from the booking system's domain, the browser keeps the two apart: the same-origin policy restricts how a script from one origin can interact with a page from another. Acuity's help center says its custom tracking code loads in a frame on the confirmation page, on an Acuity domain, not yours.

Then there's what the booking system itself sends. Many offer a Meta integration, but each sends different events, and some send nothing that means a booking.

What booking systems actually send

Booking systemWhat its Pixel integration sendsServer-side optionWatch for
Acuity SchedulingPageView, InitiateCheckout, Schedule and Purchase. Schedule and Purchase both fire when someone booksWebhooks on any plan, notifying a URL you choose about bookings and purchasesTwo conversion events per booking. Bookings you enter for a client in Acuity aren't tracked
CalendlyCustom events, from invitee_event_type_page to invitee_meeting_scheduled when a meeting is booked. None is a standard Meta eventWebhooks on Standard plans and above, sent when an event is scheduled or canceled, set up through the APIMeta builds and manages the integration, so Meta handles support
Mindbody (consumer mode)Page views onlyNot covered in its Pixel guideNothing tells Meta a class or appointment was booked

Sources: the help centers of Acuity (and its webhooks page), Calendly (and its webhooks overview) and Mindbody, reviewed October 2026. These integrations change, so check yours.

Square Appointments' developer platform publishes a booking.created webhook when a booking is created, the raw material for the server-side route below.

Four ways to track the booking, compared

RouteHow it worksWorks best whenWatch for
The built-in integrationPaste your Pixel ID into the booking system, and it fires events on its own pagesIt sends a standard booking event, like Acuity's ScheduleCustom or missing events, doubles, and ad blockers, which can stop any browser event
A thank-you page you controlAfter booking, the system redirects to a page on your site, where your Pixel fires ScheduleThe system can redirect. Calendly can, and can pass a unique invitee ID with itIt fires on every load of the page, reloads included. Keep the page out of menus and search
Server events from webhooksThe booking system calls your server, which sends Schedule to the Conversions APIYou want bookings counted even when the browser blocks the PixelDeveloper time. Meta requires the page URL and the visitor's user agent on website events sent from a server
Offline uploadsKept appointments, exported from your booking system or CRM, sent to Meta as offline eventsThe sale happens later, in person: consultations, trials and first visitsMeta recommends uploading daily or in real time. Offline events only deduplicate against each other

Sources: Calendly's redirect guide; Meta's server event parameters, customer information parameters and offline events documentation, reviewed October 2026.

Most local businesses combine two: a browser route for speed, and server events or offline uploads for what browsers miss. If a booking reaches Meta from both, the copies need the same event name and event ID, so Meta can merge copies that arrive within 48 hours. Our Conversions API setup guide covers deduplication in detail.

Picking a route for your system

By what your booking system sends
  • A standard booking event, as with Acuity. Start with the built-in integration and optimize for Schedule or Purchase, not both. If your website uses the same Pixel, pages with the scheduler embedded send two PageViews, one from each.
  • Custom events only, as with Calendly. Create a custom conversion. Meta's custom conversion rules can match a Pixel event by its name and give it the Schedule category, so invitee_meeting_scheduled becomes an event campaigns can optimize for.
  • Page views only, as with Mindbody's consumer mode. The Pixel can't tell a booking from a browse. Use a thank-you page you control, or server events.
  • Bookings that become customers later. Consultations, trials and first visits. Add offline events for the ones that actually happened, with the action source set to physical_store.

That's the order we work in on Facebook ads for local businesses: the booking event first, then, where the booking system allows it, offline conversions - the appointments that were actually kept.

How to test that one booking is one event

Our climbing gym case study puts the rule in one line: "Tracking you have not tested is tracking you do not have."

1

Book the way a customer would

Use the public booking page on your phone, not the admin screen. Acuity notes that bookings you make on a client's behalf don't trigger its integration.

2

Watch Test Events

In Events Manager, open Data Sources, choose your dataset, then Test Events. Server events need the test code from that screen, and Meta says to remove it before you go live.

3

Count the events

One booking should produce exactly one of the event you optimize for. Allow time: Acuity says its events can take up to 15 minutes to appear, and Meta says you should see yours within 20.

4

Check the browser side

Meta's Ads Data Advisor extension, formerly the Pixel Helper, shows the Pixels on a page, the events they fire, and parameters such as value and currency. Run it on your booking and thank-you pages.

5

Check deduplication

If browser and server copies both arrive, the Event Deduplication tab in Events Manager shows the share merged from each source. Meta shows a warning when the rate is too low.

6

Reconcile every week

Compare booking events in Events Manager with your booking system's own count for the same days. More events than bookings means something fires twice. Our weekly Facebook ads health check makes this a routine.

What to optimize for once it works

Optimize for the booking. A campaign set to link clicks finds the people most likely to click, not the people most likely to book.

Choosing the event
  • Schedule. Meta defines it as when a person books an appointment to visit one of your locations. The natural choice for unpaid consultations, trials and inductions.
  • Purchase. Use it when people pay at booking. Meta requires a value and a currency on Purchase, and with a value attached, the campaign can report revenue and return on ad spend.
  • Fewer campaigns, not more. Small budgets can't feed many campaigns. The gym case study's ceiling: "Three or four product campaigns is the practical ceiling for a local advertiser, because beyond that none of them get enough weekly conversions to leave the learning phase."

Then go a step further where your systems allow it. For gyms, the second step of our Facebook ads build is "Your booking system wired as the conversion event, with membership signup tracked separately." That's what lets an account tell a curious visitor from someone who joins.

Proof: a gym account that had never seen a sale

A climbing gym came to us with a Meta Ads account that had never been able to report a single sale. It sells sessions, parties and coaching through a checkout on its own website, the simplest case for tracking. The account had been buying clicks, and because there was no purchase event firing, Meta had never been given a single sale to learn from.

Tracking came first: Purchase and add to cart events implemented across the booking flow with values passed through, so every campaign reports revenue instead of clicks. Then the objective moved from clicks to sales. In the case study's words, the account started at £28.82 per booking on a link click objective and reached £5.13 once purchase tracking and a sales objective were in place, on essentially the same budget. Across ten months the account returns 2.95x, on daily budgets between £5 and £15. Read the full case study for the sequence.

Do it yourself, or get help?

Do it yourself if your booking system's integration sends a standard booking event and your test booking shows up once. Get help when the fix needs webhooks, custom conversions or offline uploads, or when the numbers disagree and you can't see why.

On our Facebook ads for local businesses, booking tracking is part of the work, not an extra: "If your calendar or checkout can't be tracked yet, fixing that is part of week one." Management runs $500-$2,000 a month. If you also sell products online, why the Meta Pixel misses Shopify purchases covers the store side.

Questions people ask

How do I track bookings from Facebook ads?

Send a booking event to Meta whenever someone books: through the booking system's Meta integration, a thank-you page on your own site, server events from its webhooks, or offline uploads. Then check that a real test booking arrives exactly once in Events Manager.

Does Calendly work with the Meta Pixel?

Yes, on Standard plans and above. It sends custom events, including invitee_meeting_scheduled when someone books, rather than Meta's standard Schedule event. Create a custom conversion from that event so your campaigns can optimize for it.

Why does Acuity send both Schedule and Purchase for one booking?

Its integration fires both when someone schedules an appointment. Choose one as the event your campaign optimizes for, and judge results on that one.

Does Mindbody's Meta Pixel track bookings?

Not on its own. Mindbody's help center says its consumer-mode Pixel tracks page views only. You need another route, such as a thank-you page you control or server events, to report the booking itself.

Should I use the Schedule event or Purchase?

Schedule if the booking is unpaid, such as a consultation, trial or induction. Purchase if people pay when they book, because it carries a value Meta can report as revenue. Optimize each campaign for one of them.

Can Meta learn from appointments that were actually kept?

Yes. Send kept appointments as offline events through the Conversions API, with the action source set to physical_store. Meta recommends uploading them daily or in real time.

When isn't booking tracking worth the effort?

When people can't book online yet, or the ad budget is too small for Meta to learn from bookings. We're not the right fit if there's nothing in place to catch the bookings, or if you can't commit a real ad budget alongside the fee.

Not sure whether your bookings are reaching Meta, or reaching it twice? Book a strategy call and we'll trace one booking from the ad to Events Manager with you.