Tracking

Why your Facebook ads show 0 bookings when you use Boulevard (and how to fix it)

Your calendar is full, but Ads Manager says nobody booked. Your ads are probably fine. Your tracking can't see the booking.

Hamza El Asri Hamza El AsriFounder & lead strategist, RM Click PublishedNovember 10, 2026 Reading time6 min read AudienceSalon owners

If your Facebook or Instagram ads show 0 bookings while your Boulevard calendar is full, the ads are probably working. The problem is that Meta can't see the booking happen.

The short answer: Boulevard's booking widget runs inside a separate window (an iframe) that belongs to Boulevard, not to your website. Your Facebook pixel lives on your website, so it never sees the booking. The fix is to report bookings to Meta from a server, using Boulevard's notifications and Meta's Conversions API.

We ran into exactly this with a US salon using Boulevard. They advertised on Meta, Google Ads, TikTok, Snapchat and Nextdoor, and every platform under-reported bookings. Here's what is going on, in plain language.

Why the Facebook pixel can't see Boulevard bookings

Think of your website as a shop, and the Boulevard widget as a booth from another company set up inside it. Your security camera (the pixel) films the shop floor. It sees people walk in and walk up to the booth. It can't see what they sign at the booth, because the booth has its own walls.

That booth is the iframe. When a client clicks Book Now, Boulevard opens its booking flow on its own domain, layered over your page. Everything that matters happens in there: choosing the service, the time, entering their details, confirming.

Three things make this worse:

  1. Boulevard doesn't pass the booking back to your page. Its widget only exposes basic loading functions. There is no "booking completed" signal your website can listen to.
  2. iPhones and browsers block tracking. iOS privacy features, Safari's tracking prevention and ad blockers stop many pixel events even on your own pages.
  3. Some "fixes" make it worse. We found a common setup that fired a fake "Add to cart" on every page load, because Boulevard quietly preloads its hidden widget when the page opens. That sends Meta false signals.

So Meta sees visitors and maybe some clicks on Book Now, then nothing. In Ads Manager, that looks like ads that bring traffic but no customers.

What happens when Meta can't see bookings

This is more than a reporting annoyance. It changes how your money is spent.

  • You can't tell which ads work. Without bookings in Ads Manager, you're guessing which campaign, audience or creative fills your chairs.
  • Meta optimizes for the wrong thing. The algorithm learns from the conversions it sees. If it sees none, it can only optimize for clicks or views, which bring cheaper but less valuable traffic.
  • You might turn off a good campaign. A campaign that drives real bookings can look like a failure and get paused.

The fix: report bookings from a server

The reliable solution doesn't try to see inside the booth. It waits for Boulevard to say "a booking was made," then tells the ad platforms.

Here's the setup we built, without the technical details:

  1. Remember where the visitor came from. When someone lands on your site from an ad, a small script saves the ad's click ID (for example fbclid for Facebook, gclid for Google, ttclid for TikTok).
  2. Boulevard sends a notification. Boulevard can notify a server whenever an appointment is created or completed. This is called a webhook.
  3. The server connects the booking to the ad. It looks up the booking and matches it to the visitor's click.
  4. The server tells each ad platform. It sends the booking to Meta's Conversions API, and to Google Ads, TikTok, Snapchat and Nextdoor through their equivalents.
  5. Bookings and revenue land in a dashboard. Every booking is logged with its source, so you see bookings and revenue by channel.

We send two different signals. When an appointment is booked, Meta receives a Schedule event: someone booked. When the appointment is completed and paid, Meta receives a Purchase event with the real amount. That second one is what makes ROAS (return on ad spend) real instead of a guess.

Be honest about one limit: matching

There's a catch most guides skip. Because the booking happens in Boulevard's iframe, the notification Boulevard sends doesn't say which visitor made it. The server has to work out which ad click the booking belongs to.

Our first version guessed by timing, and under real traffic it gave credit to the wrong campaigns. We wrote up the full story in our attribution bug case study. The short lesson: matching needs something that exists on both sides, such as the client's email or phone, or a booking flow you control. Ask whoever sets this up how they match bookings to clicks, and how they tested it.

What to ask your agency or developer

If someone is setting up Boulevard tracking for you, these questions separate a real setup from a pixel pasted in the wrong place:

  • Are bookings sent to Meta from a server, using the Conversions API?
  • Do browser and server events share an event ID, so bookings aren't counted twice?
  • How is each booking matched to the ad click, and was it tested with several people booking at the same time?
  • Do completed appointments send real revenue, or only a booking count?
  • Is the same booking also reported to Google Ads, TikTok and the other platforms we run?
  • Where can I see bookings and revenue by channel, outside the ad platforms?

Is it worth it for a single salon?

If you spend a few hundred dollars a month on ads, the platforms' own numbers plus a weekly check of your calendar may be enough. Once you spend more, or run several platforms, guessing gets expensive. The salon in this story was running five ad platforms at once, and without server-side tracking there was no way to know which one actually filled the chairs.

For the technical side of the problem, read why you can't track Boulevard widget bookings in the browser.

For the full build, step by step, read How to track Boulevard bookings in Meta, Google Ads & TikTok: the complete server-side guide.

Hamza El Asri
Written by Hamza El Asri

Media buyer and tracking specialist, founder of RM Click. Top Rated on Fiverr with 413 reviews. We built the pipeline this article describes. LinkedIn · Fiverr

FAQ

Frequently asked
questions

Because the booking happens inside Boulevard's booking widget, which runs on Boulevard's own domain in an iframe. Your Facebook pixel sits on your website and can't see what happens inside it, so Meta never learns that someone booked.

Not in a way that tracks the booking reliably. The widget is Boulevard's page, not yours, and it doesn't send booking events back to your website. The reliable fix is server-side: Boulevard notifies a server, and that server reports the booking to Meta.

It's Meta's way of receiving conversions from a server instead of the visitor's browser. It works even when the pixel is blocked by iPhones, browsers or ad blockers, and it can report bookings that happen in other tools.

Not directly. It shows you which ads really bring bookings, and it gives Meta the signal it needs to find more people like your clients. Better data usually leads to better optimization over the following weeks.

No. Google Ads, TikTok, Snapchat and Nextdoor have the same blind spot with embedded booking widgets. The same server-side fix works for all of them.

Free ad audit

Need this set up
for your salon?