“Our booking platform already reports marketing.”
It reports bookings made through it. It does not know what the client spent over six months, or whether the channel that produced them brings people who return.
For Boulevard
Export completed appointments from Boulevard, upload the leads that produced them, and rank marketing on what clients actually spent.
No API key Nothing to install in BoulevardNothing to install No card requiredNo card
CloseRev reads a Boulevard export of completed appointments — the client's phone or email, the amount taken and the date — and matches it against the calls, forms and ad clicks that produced the first booking. In aesthetics a first appointment is worth a fraction of the client, so ranking channels on bookings ranks them on the wrong number. Appointments with no traceable lead are reported as Direct / Unknown.
Last checked against Boulevard's own documentation on September 24, 2026.
The gap
Your ads report bookings and your booking system reports appointments. Neither can tell you that one channel brings people who come once and another brings people who come monthly.
What was sold, to whom, and for how much.
The click, the keyword, the call, and what each one cost.
The file
Three things carry the match: who, how much, and when. Anything else is optional and only changes how the report can be sliced.
On the client record rather than the appointment. Aesthetics clients book online and by phone in roughly equal measure, so both columns earn their place.
What the appointment actually took, including retail product and any package payment. Service price alone understates the channels that bring people who buy product.
When the visit happened or was paid for. For packages, the payment date is the one that ties to the marketing.
Injectables, laser, facials, retail. It is the split that shows which channel brings the high-value treatments and which brings the introductory offer.
Step by step
Written for somebody with Boulevard open in the next tab. Report names vary by edition, so each step says what to look for.
One row per appointment with a client contact detail, the amount and a date. Cancellations and no-shows should not be in the file — they took nothing.
A client who comes for a facial and leaves with three hundred in product is worth what they spent, not what the treatment listed at. Leaving retail out understates exactly the channels worth keeping.
Paid social is usually the largest in this category, plus search, the booking widget and any local marketplace. Contact detail plus the source.
The first visit is often an introductory offer. The channel's real value shows in the second and third visits, which land weeks or months later.
The match runs on the phone and the email, normalised, and reports repeat visits separately from the first.
What comes back
Revenue by channel, the count of sales behind each figure, and an honest bucket for the ones nobody could trace. Sample figures, from the worked example on the Med Spas & Dermatology page — not from a Boulevard account.
| Channel | Share | Sales | Revenue |
|---|---|---|---|
| Meta Ads | 96 | $78,200 | |
| Google Ads | 61 | $55,200 | |
| Email marketing | 44 | $32,200 | |
| Direct / Unknown | 79 | $64,400 |
Unmatched sales stay in Direct / Unknown. They are never spread across the paid channels to make the total look better.
The argument
Almost every med spa runs one, and it works — it fills the diary. It also means the first appointment is deliberately priced below what the client is worth, so attributing a channel on that first transaction measures the discount rather than the customer.
Two channels producing the same number of introductory bookings can be worth completely different amounts, because one brings people who return at full price and the other brings people who came for the offer and will do the same at the spa down the road next month.
Matching several months of revenue back to the first booking is what separates them, and in this category that separation is usually the single most valuable output.
This is a visual category with a visual buyer, so the budget goes where the imagery works. It is also the category where platform-reported conversions are furthest from cash: view-through windows, modelled conversions and in-platform booking all report generously.
The platform will tell you it produced a booking. It has no idea whether the client turned up, what they spent, or whether they came back.
Reading the appointment export against the lead file replaces all of that with what was taken at the till. It usually moves the ranking, and it almost always moves it away from whichever channel was best at reporting itself.
Product sales and prepaid packages carry margin that individual treatments do not, and they are unevenly distributed across clients — some buy on the first visit, most never do.
If the export includes them, channels sort differently than they do on service revenue alone, because the propensity to buy product travels with the kind of client a channel brings rather than with the treatment they booked.
It is a column worth insisting on in the export for that reason. Without it the report is about appointments; with it the report is about clients.
Bookings arrive through the widget, by phone, by text, and occasionally through a third party. Each route captures a different contact detail — the widget gets an email, the phone gets a number — so a file with only one of the two will match only one of the routes.
That is not a small effect. It is the most common reason a channel appears not to work in this category: it produced calls, the export only carried emails, and the calls had nowhere to land.
Exporting both columns costs nothing and removes the whole class of error.
Fair questions
It reports bookings made through it. It does not know what the client spent over six months, or whether the channel that produced them brings people who return.
It does, generously and in its own favour. This reads what was taken at the till, which is the number the platform cannot see.
Export both columns anyway. Phone bookings are the ones that otherwise go missing, and they are usually the higher-value ones.
No. It reads a file you exported, so your booking calendar, your client notes and your card vault are never reachable from here — there is nothing to reach them with.
Completed appointments with a client contact detail, the amount taken and a date.
No. They took nothing, and including them makes a channel producing no-shows look like a channel producing revenue.
Yes. It is where a meaningful part of the margin is, and it travels with the kind of client a channel brings.
Export several months rather than one. The first visit is priced to be unprofitable; the channel's worth shows in what follows.
Yes, where the export carries a service or category. It shows which channel brings injectables and which brings the offer.
They are reported separately, so you decide. Both answers are defensible and the report does not pick one for you.
It matters a lot. Export both the phone and the email or the route you match on will quietly decide which channels appear to work.
Use the payment date. That is the transaction the marketing produced, whenever the visits happen.
They sit in Direct / Unknown. In this category that bucket is usually walk-ins and word of mouth, and knowing its true size is what makes the paid channels readable.
A contact detail, an amount and a date, plus a service category if you include one. No treatment notes, no consent forms, no photographs, no health information. Encrypted in transit and at rest and deleted with the import.
Revenue by channel from completed appointments, first visits and repeat visits kept apart, and everything unmatched reported as unmatched.
By trade
What the report looks like once the export is in, written for each one.
Other systems
Running more than one system, or comparing? The method is the same and the columns are not.
Boulevard and the other product names and logos on this page belong to their owners and are shown to identify the software a file comes from. CloseRev is not affiliated with or endorsed by them, and connects to none of them: it reads a file you export.
Start today
Nothing to install in Boulevard, no API key, and no need to have been tracking anything until now. Last year works as well as this month.