“Zenoti already reports across our locations.”
It reports what was sold at each. It has no record of the campaign that produced the guest.
For Zenoti
Export sales from Zenoti, upload the leads behind them, and get guest value per source per location.
No API key Nothing to install in ZenotiNothing to install No card requiredNo card
CloseRev reads a Zenoti export of sales — the guest's phone or email, the amount and the date — and matches it against the campaigns and calls that produced the first booking. Zenoti is chosen by multi-location operators, which means the single most valuable thing the data can do is stop being an average: a channel that wins in one catchment routinely loses in another. Sales with no traceable lead are reported as Direct / Unknown.
Last checked against Zenoti's own documentation on September 24, 2026.
The gap
Marketing is bought centrally, judged centrally, and delivered into a dozen different local markets.
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 guest record. Groups usually have both, which makes this one of the cleaner matches in the catalogue.
Services, retail, packages and memberships together. Retail and memberships carry the margin.
When money was taken. Packages are better attributed on purchase than on redemption.
The column that makes this page worth doing. Without it the report is a group average.
Step by step
Written for somebody with Zenoti open in the next tab. Report names vary by edition, so each step says what to look for.
One row per sale with a contact detail, the total, the date and the centre.
A services-only file understates every channel that brings engaged guests and flatters the ones that bring discount-seekers.
First visits are usually promotional. The channels separate on what the guest spent afterwards.
A national campaign and a local one need to be distinguishable, or the split cannot be made.
The join runs on the phone and the email, normalised, with results reported per location as well as per group.
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 Zenoti 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
Two locations twenty miles apart can face different competitors, different price expectations and a different local search landscape.
A channel that produces the cheapest new guest at one can be the most expensive at another, and a blended report will never show it because the average sits between them.
Splitting revenue by centre turns one ambiguous number into a set of local decisions, which is how a group actually allocates.
It also identifies the locations where a channel is carrying the group average, which is usually two or three of them.
Those are the sites where a change in spend has an effect, and the rest is noise being managed as though it were signal.
A guest on a monthly membership is recurring revenue with a predictable life, quite unlike one who books a treatment when a promotion runs.
Counted as a single sale, a membership looks small; counted across its life it is often the most valuable outcome a channel can produce.
The report sums by guest across the window and keeps memberships identifiable where the export allows, so the two outcomes are not averaged together.
Channels differ sharply in how often their guests convert to membership, and that difference is usually larger than the difference in first-visit value.
For a group, shifting spend toward the channels that produce members is the single highest-leverage finding this report produces.
Introductory pricing is close to universal in this category, so the first sale measures the offer rather than the guest.
Every source looks similar at that point, which is why cost per new guest is such a stable and such a useless ranking.
Six to twelve months of sales shows which guests returned at full price, and the ordering is frequently the reverse of the acquisition-cost ordering.
It also shows which offers produce returning guests, which is a creative decision rather than a channel one and is often the cheaper fix. Changing an introductory offer costs a morning; replacing a channel costs a quarter, and the file usually shows the first is what was needed.
A package bought once and redeemed over months, or a gift card bought by one person and used by another, both break a naive match on the treatment date.
Attributing on redemption spreads one decision across a season and credits whatever ran each time; attributing on purchase keeps it with the campaign that produced it.
The report sums by guest and uses the purchase date, and flags guests whose spend is dominated by a single prepaid event rather than a habit.
A gift card's redeemer is a new relationship of their own, and the report treats them as such rather than crediting the original purchase's channel. Crediting both to one campaign would double-count a guest the group acquired once, which is the sort of quiet inflation that makes a report impossible to defend.
Fair questions
It reports what was sold at each. It has no record of the campaign that produced the guest.
Which is exactly why the per-location split matters: the same spend is landing in a dozen different markets.
Yes, which is why the first sale cannot rank channels and six months of them can.
No. It reads an exported file, so your appointments, guest records and payment vault stay where they are.
Sales with a guest contact detail, the total, the date and the location.
Because a channel that wins in one catchment routinely loses in another, and the group average describes neither.
Yes. They carry the margin, and membership conversion is where channels differ most.
Six to twelve months, because the first visit is almost always promotional.
Attributed on the purchase date, so one decision is not spread across a season of redemptions.
The purchaser and the redeemer are different people. The purchase is attributed; the redeemer is a new relationship.
Yes, where the lead file distinguishes them, which is worth setting up before the first report.
They are reported separately, so the decision stays yours.
Any sale with no traceable lead, usually walk-ins and word of mouth.
A contact detail, an amount, a date and a location. No treatment records, no photographs, no consent forms, no card data. Encrypted in transit and at rest and deleted with the import.
Guest value per source per location, first visit and later spend apart, memberships identified, and everything unmatched kept visible.
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.
Zenoti 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 Zenoti, no API key, and no need to have been tracking anything until now. Last year works as well as this month.