Treatment value, not inquiries
Rank channels by what was actually paid, so package buyers stop being averaged away.
Marketing attribution for med spas and dermatology practices
Match completed, paid treatments to the inquiries and ads that produced them — including the packages bought months after the first consultation.
$165,600 72% of $230,000 paid
The blind spot
Aesthetic inquiries are cheap to generate and mostly do not convert. The ones that do range from a single treatment to a multi-thousand-dollar package, and inquiry volume tells you nothing about which is which.
What you get
Rank channels by what was actually paid, so package buyers stop being averaged away.
A consultation in March that buys a package in July still matches the ad behind it.
A contact detail, an amount and a date. No clinical or treatment detail needed.
A worked example
Not impressions, not leads, not cost per click. Closed revenue, by the channel that produced it, for a period you choose — with the portion we could not trace shown rather than quietly shared out across your paid channels.
| Channel | Sales | Revenue | Share | % |
|---|---|---|---|---|
| Meta Ads | 96 | $78,200 | 34% | |
| Google Ads | 61 | $55,200 | 24% | |
| Email marketing | 44 | $32,200 | 14% | |
| Direct / Unknown | 79 | $64,400 | 28% |
Aesthetics is one of the few local categories where paid social genuinely outperforms search for lead volume, which makes the reporting particularly misleading. Meta will show you hundreds of cheap inquiries; it cannot show you which of them bought a package.
Ranking by paid treatment value separates the channel that fills a consultation diary from the channel that fills a bank account. They are frequently not the same, and the gap is usually largest for the highest-value treatments.
Elective aesthetic treatment is discretionary, often discussed with a partner, and frequently booked around an event months away. A consultation in March that becomes a package in July is entirely normal and entirely invisible to click attribution.
Matching on the client rather than the session credits the July purchase to the March ad. It also lets you analyze a season that has already finished, which is how you find out whether last summer's campaign actually paid.
Prepaid packages are how most aesthetic clinics smooth their year, and they make the revenue question genuinely ambiguous rather than merely fiddly. A client pays $2,400 in February for six sessions and takes them through to October. There are two defensible dates for that money and two defensible ways to book it, and the clinic's own records probably hold both — the takings on the day the card was charged, and the redemptions spread across the eight months that followed. Neither is wrong, and a report built on one will not agree with a report built on the other.
For attribution the payment date is the better choice, and not for accounting reasons. It sits closest to the decision, which is the thing the advert actually influenced. Booking the revenue on redemption spreads one marketing outcome across eight monthly reports and makes each month's ranking partly an artefact of what clients happened to redeem that month, which nobody chose and no campaign caused. It also delays the signal: a campaign run in February would not be fully assessable until the following winter, by which time it has been renewed or cancelled on a guess.
Whichever a clinic picks, the rule is to pick once and write it down. Switching halfway through a year produces a trend line measuring the export rather than the business, which is precisely the failure this exercise exists to remove. Clinics wanting both views usually export twice into separate imports and compare them, which takes an afternoon and occasionally reveals something worth knowing: a channel that looks strong on takings and unremarkable on delivered treatment is selling packages to people who do not come back to use them, and that is a retention problem wearing a marketing result.
The monthly membership changed this category more than any device did. A client on a recurring plan at $99 or $199 is worth several multiples of a walk-in appointment over a year, attends on a schedule rather than on a whim, and buys retail while they are already in the building. An advert producing members and an advert producing single treatments look almost identical on cost per lead, sit next to each other in the same account, and are not remotely the same business. One of them is buying a subscriber and the other is buying an afternoon.
Judged over thirty days, the membership advert loses and loses badly. Its first month's revenue is a single installment against a full treatment fee from the one-off booking, so on any monthly report it appears to be the weaker buy. Judged over a year, with every installment tracing back to the client who signed up, the ranking inverts and usually by a wide margin. This is the most common reversal in aesthetic reporting and it is structurally invisible to any tool that closes its books monthly, which is all of the ones inside the advertising platforms.
Running it properly is a matter of date range rather than setup. Export twelve months of takings with the client's phone or email on every row, and each recurring charge joins to the same person and therefore to the same original inquiry. Mapping a column that marks membership rows as Product / service lets the report separate recurring revenue from one-off treatment, which answers the question behind the question: is the membership push recruiting new clients, or is it a discount being handed to regulars who were already coming in every eight weeks and paying full price?
Injectables, devices and retail skincare arrive through the same card terminal and behave nothing alike. Tox is priced by unit, repeats on a twelve-week rhythm and is the habit that keeps somebody attached to a clinic. Device treatments are seasonal, expensive, often bought once and heavily influenced by whatever the clinic has just financed. Skincare is small, high-margin and driven almost entirely by whoever is standing at the desk when a client leaves. One revenue total across all three tells a clinic very little about what its advertising actually bought.
The correction is the money rather than a column. Ranking on collected revenue, with the sale count beside it, already shows whether a channel's total is carried by a handful of large device sales or by many repeat injectable visits, because the average value per sale gives it away. A service-line or treatment column would make the split explicit, but what treatment somebody bought is health information, and it does not belong in a file sent to CloseRev, which signs no business associate agreements. Where there is more than one clinic, a location column mapped as Location is the breakdown to use. Nobody could have seen any of this while everything sat inside one number at the top of a dashboard.
Retail deserves to be in the file even though it feels like it belongs to the front desk rather than to marketing. It is genuine money from a client an advert produced, it is usually the most profitable line in the building, and leaving it out understates exactly the channels that bring people back rather than through once. The match does not read what was sold — only that an amount was paid on a date by somebody the inquiry file also knows — so a product name in the export is ignored rather than treated as an error.
Why it matters
"We generated 400 leads" invites an argument. "This channel closed $186,400 last quarter, here is the reconciliation" ends one. The teams that can show closed revenue by channel are the teams that get the next increase approved, because they are asking with evidence rather than with conviction.
Killing spend is politically harder than adding it, because someone always owns the channel being cut. A number that reconciles to the sales export takes the argument out of the room — you are not overruling a colleague's judgment, you are reading the same ledger they are.
Platform-reported conversions do not reconcile to revenue, and eventually someone in finance notices. Reporting built from your own closed-sales export starts from the number finance already trusts, which is why it holds up when it is checked.
Because this reconciles exports rather than tracking visitors, it works on months that have already closed. You are not instrumenting now to learn something in ninety days — you can answer for last quarter today, which is usually when the question is being asked.
Honest answers
You do not need to. Nothing is installed anywhere — this reconciles two exports after the fact, which is exactly why it suits clinics with restrictions on their site.
That is the normal case, and the reason this works as two files rather than an integration. They never have to talk to each other.
Organic social lands in Direct / Unknown unless it appears in a lead export. That is honest, and quantifying it is useful — it is often larger than people expect.
Pricing
The price here is the price on the invoice, plus any sales tax that applies — no per-call, per-minute or per-form fees. Growth usually fits aesthetic clinics and dermatology practices — thirteen months of history to compare a month to the same month last year, and a PDF you can put in front of whoever holds the budget.
A business scaling ad spend
$49/mo
billed monthly
Questions
Anything else? Talk to us — a person answers, usually the same day.
Completed, paid treatments: client phone or email, the amount, and the date. Nothing clinical.
Partly. The channel ranking shows each channel's sale count beside its revenue, so a channel whose clients buy packages shows a higher value per sale. A treatment or package column is not one to add, because what treatment somebody bought is health information.
No. Phone or email, an amount and a date is enough.
A phone number or an email, an amount and a date. Treatment detail is not read and should be left out of the export.
As long as your data covers. There is no window that expires.
Yes, with a location column, which often reveals that a channel works in one city and not another.
Yes. Nothing had to be installed at the time.
Paid treatment rows analyzed in a calendar month. Inquiry rows do not count.
Payment date, usually. It sits closest to the decision the advert influenced, and redemption spreads one marketing outcome across months of reports. Either is defensible; changing method halfway through a year is not, because the trend then measures the change.
Yes, if you export each charge as its own row against the client. Every installment carries the same phone number, so all of them credit the inquiry that originally produced that member rather than the month they happened to land in.
Include them. They are real money from a client a channel produced, and leaving them out understates the sources that bring people back to the clinic rather than through it once. The match ignores the product name itself.
Not with this report. A provider column would show revenue by injector, but which practitioner treated somebody can reveal what they were treated for, so it stays out of the export. A location column mapped as Location is the breakdown available.
List that source in the inquiry file and it is ranked alongside everything else on money collected. It is a common way to find out that heavily discounted first visits rarely produce a second one at full price.
Run the range across a year and compare visits per client by source. A channel averaging one visit per client and a channel averaging four cost the same per lead and are obviously not worth the same amount.
CloseRev does not sign HIPAA Business Associate Agreements and is not built for protected health information. Upload only non-clinical takings data — a phone number or email, the amount and the date — never consultation notes, medical history, treatment records or photographs. If your clients' phone numbers and emails count as PHI under your obligations, talk to your compliance lead before using CloseRev.
Nearby
Match completed treatments and the revenue they earned to the campaigns that produced the patient, across medical and cosmetic work alike.
See how it worksMatch completed, paid procedures to the inquiries and ads that produced them — including the ones booked six months after the first consultation.
See how it worksMatch completed procedures and their revenue to the campaigns that produced the patient, months after the free consultation.
See how it worksWhere your sales already are
CallTrackingMetrics attributes the contact. Match those contacts against your sales export and rank channels on the money rather than on the volume.
What to exportExport completed appointments from Boulevard, upload the leads that produced them, and rank marketing on what clients actually spent.
What to exportExport invoiced visits from ezyVet, upload the inquiries beside them, and rank marketing on what clients billed rather than on appointments booked.
What to exportExport your Square transactions, upload the inquiries beside them, and find out which marketing produced the people who walked in.
What to exportExport your Mindbody sales, upload the leads that produced them, and rank marketing on what members spent rather than on trials booked.
What to exportExport collected production from Curve, upload the inquiries beside them, and rank marketing on what patients actually paid for.
What to exportExport your tickets from Mangomint, upload the leads that produced them, and rank marketing on client value rather than on bookings.
What to exportExport your sales, upload the leads that produced them, and find out which channels produce clients who stay rather than clients who visit.
What to exportExport your sales from Vagaro, upload the leads that produced them, and stop paying to acquire clients who were already coming.
What to exportExport Birdeye conversations as your lead file, match them against closed revenue, and find out what the widget and the listings are worth.
What to exportExport your lead ads, match them against closed sales, and find out which campaigns produced customers rather than contact details.
What to exportExport your Pinterest leads, match them against closed sales, and measure the channel across the length of the project rather than the length of a report.
What to exportExport collections from ChiroTouch, upload the leads behind them, and rank marketing on the plan rather than the first appointment.
What to exportExport sales from Zenoti, upload the leads behind them, and get guest value per source per location.
What to exportExport inquiries and treatment revenue from PatientNow, join them, and rank channels on treatments rather than on consultations booked.
What to exportExport sales from Fresha, upload your lead sources, and stop paying to acquire clients who were already arriving.
What to exportExport sales from WellnessLiving, upload the leads behind them, and rank channels on members rather than on intro passes.
What to exportExport your bookings, match them against closed sales, and find out which appointment types and which channels produced revenue.
What to exportCapture Yelp calls and requests as leads, match them against closed sales, and separate what the ads added from what the listing would have brought anyway.
What to exportFrom the blog
Multi-site healthcare groups usually conclude that attribution is off limits because the data is clinical. It is not, because attribution does not need clinical data. What it needs is a phone number, an amount and a date, and there is a way to handle even those properly.
Read the articleCall tracking answers one question well: which campaign produced the ring. It has no view of what happened after the call ended, which is where the money is decided. This is what the gap costs, and how to close it without replacing the call tracker you already have.
Read the articleAttribution demos are unusually easy to pass, because the product is a number and any number looks convincing on a slide. These are the questions that separate a system that measures from one that produces confident output — including the ones we would rather you did not ask us.
Read the articleStart today
Upload two exports and see your real revenue by channel in minutes. 14 days free, no card.