Treatment value, not call count
Rank channels by the treatment they produced, so a channel with fewer, larger cases wins properly.
Marketing attribution for Dentists
Match your practice-management export to your call and ad data, and see which channels produced treatment that was actually paid for.
$207,000 68% of $304,400 paid
The blind spot
You know how many calls the ads produced. You do not know how many became a $4,000 implant case and how many were a cleaning that never rebooked — so the ad spend decision is made on call volume, which is the one number that does not pay the lease.
What you get
Rank channels by the treatment they produced, so a channel with fewer, larger cases wins properly.
A consult in March that accepts in June still matches the ad that produced the call.
Encrypted, isolated to your practice, deletable in one click. We are a processor, and there is a DPA.
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 | % |
|---|---|---|---|---|
| Google Ads | 38 | $124,800 | 41% | |
| Meta Ads | 31 | $54,800 | 18% | |
| Email marketing | 14 | $27,400 | 9% | |
| Direct / Unknown | 46 | $97,400 | 32% |
Two campaigns produce forty calls each. One fills hygiene appointments; the other produces three implant consults, two of which accept. On call volume they look identical. On revenue they are not remotely comparable, and the practice that cannot tell them apart usually keeps funding the wrong one.
Dentistry makes this worse than most industries because the spread between a cleaning and a full-arch case is enormous. Averaging across them hides exactly the cases that pay for the marketing.
CloseRev ranks channels by the treatment value that was actually produced, taken from your own practice-management export. Not booked value, not estimated value — what was invoiced.
A consult in March that accepts a plan in June is the case a click-attribution tool loses. The cookie is gone, the session is long over, and the ad platform has closed the books on that month.
Because matching is on the patient's phone number or email rather than on a browser session, the June revenue is still credited to the March ad. It also means you can answer the question retroactively: the quarter that already closed can be analyzed on your first afternoon, without having had anything installed at the time.
You are uploading patient contact details and treatment revenue, so this is a fair question and it deserves a direct answer. Data is encrypted in transit and at rest, isolated to your practice's workspace, and deletable — records and the original file — in one click. We act as a data processor and provide a DPA.
The match needs a phone number or an email, an amount and a date. Clinical notes, diagnoses and treatment codes are not needed and are not read, so the smallest export that works is also the least you ever hand over.
A crown posted at $1,480 in a PPO practice is not $1,480 of anything. The contracted adjustment comes off before the money moves, the patient portion arrives on a different day from the insurer portion, and a practice participating in six plans has six different real prices for one procedure. Rank channels on production and you have partly ranked them on which insurers their patients happen to carry, which is not a marketing decision anybody made and not a thing any campaign can be adjusted to fix. The number looks precise, it comes out of the practice-management system, and it is answering a question nobody asked.
This matters more than it sounds, because plan participation and channel are correlated rather than independent. Insurance-directory traffic and searches phrased around what a plan covers deliver patients on the worst fee schedules in the practice. Searches for a named procedure, and referrals from existing patients, skew toward people paying their own way at the full fee. A production-based ranking flatters the first group and understates the second, and a practice acting on it funds the channel that fills chair time with the least profitable work available. That is the opposite of what the exercise was meant to achieve.
The correction is to export the collections column instead, or the net figure after adjustments where the system keeps them apart. The match itself has no opinion — it reads a contact detail, an amount and a date, and treats whatever number you send as the money. So the choice is yours, and the only real rule is to keep it the same from one month to the next, because a switch halfway through the year produces a trend line about your export habits. Run it both ways once: if the two rankings disagree about a channel, that disagreement is itself the finding.
The first visit is rarely where a general practice makes its money. The value of a new patient is the recall cycle: two hygiene appointments a year, the restorative work found during them, and eventually the crown, the root canal or the implant that pays for the whole relationship. A channel judged on the revenue from a patient's first appointment is being judged on the smallest number that patient will ever produce. The emergency-toothache channel wins that comparison every time, and contributes almost nothing to the schedule twelve months later, by which point the budget has already been moved toward it.
Run the same reconciliation across a full year and the ranking rearranges itself. Because the join is on the patient rather than on a browser session, every subsequent visit from that person traces back to the advert that produced the first one, whether it happened in March or the following February. Sources delivering patients who attend recall separate visibly from sources delivering a single painful evening and a patient nobody sees again. Neither is worthless, but they are different purchases, and a practice that funds them from one budget on one number cannot tell which of them it is buying.
This is also the honest argument against reading much into a single month. Thirty days of data ranks channels on urgency, because urgent problems are the only ones that start and finish inside thirty days, and a practice acting on that ranking will slowly convert itself into an emergency clinic. Comparing twelve months against the twelve before it asks about the thing a general practice actually sells, which is a patient list rather than a series of appointments. That longer comparison costs nothing extra to run, because the records were kept for billing regardless of whether anybody was measuring marketing at the time.
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
It usually is. Any column layout works and any column order — you confirm the mapping once and it is the same next month. Extra columns are ignored rather than treated as an error.
Probably, and for a dental practice that is genuine: word of mouth, a family member of an existing patient, someone who drove past the sign. That bucket is shown rather than redistributed across your paid channels, because inflating Google Ads with walk-ins would make the number useless for deciding anything.
Then you already have one of the two files. CloseRev takes the export your call tracker produces and joins it to what the patient actually paid — which is the part call tracking cannot see, because it ends at the call.
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 dental practices running Google and Meta ads — 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.
A list of completed, paid treatment: a patient phone number or email, the amount, and the date. Most systems have a production or collections report that already does this. Nothing clinical is needed.
No. If you already use them, their export is useful as the second file. If you do not, your ad platforms' lead exports work as well.
Yes — include a location column and the report breaks down by it, so you can see that Meta works in one suburb and not the other.
As far as your exports go. Because nothing had to be installed at the time, you can analyze months that closed before you had ever heard of us — which is usually the fastest way to decide whether the tool is telling you anything you did not know.
A phone number or an email, an amount and a date. Nothing clinical. You choose what goes in the file you export, and the match reads only those three things.
The number of treatment or sales rows analyzed in a calendar month. Your call and lead rows do not count, however many there are.
Yes. Invite them to your workspace, or they can run it from their own Agency account with a workspace for your practice.
Each sale is credited to the earliest inquiry carrying that number, automatically; a shared number is not sent to review. For a family that found you through one advert, that is the right answer. Where it may not be, an email on each row helps, because email is checked before phone, and every match can be traced back to the two rows behind it.
No. A phone number or email, an amount and a date are enough. Names help you recognize a row when reviewing, but the match does not depend on them.
Collections, in most practices. Production includes contracted adjustments that never arrive, so it overstates insurance-heavy channels against fee-for-service ones. Whichever you pick, keep it consistent between months, or the trend line ends up measuring your export choice rather than your marketing.
Yes. The report ranks on collected value, so a source producing four implant cases outranks one producing forty check-ups, and the sale count beside it shows each channel's average value. A procedure category is not a column to add: what somebody was treated for is health information and stays out of the export.
Export the amount the practice received and the date it arrived. How the patient funded it is between them and the lender, and the match reads only a contact detail, an amount and a date — nothing about the arrangement behind it.
Map a patient-status column as Product / service (one extra breakdown per import) and the report splits on it. Paid channels may look considerably better against new-patient revenue alone, because an established patient whose number is not in the lead file sits in Direct / Unknown, where it cannot inflate an advert's total.
That works, with one thing to know: nothing is combined. Each row is one sale in the report and counts toward the monthly record allowance, so a visit billed across five codes shows as five sales. All five carry the same phone number and credit the advert that produced the patient, so the revenue lands in full. Summing to one row per visit before export keeps the sale count meaningful, uses fewer records and leaves the codes out of the file.
Yes, and it is the comparison worth making in a practice with a recall cycle. Upload both periods and the report runs over either range, because nothing needed to be installed at the time last year happened.
CloseRev does not sign HIPAA Business Associate Agreements and is not built for protected health information. Upload only the non-clinical part of a collections report: a phone number or email, the amount and the date. Never tooth charts, procedure codes, diagnoses or clinical notes. If your practice treats patient phone numbers and emails as PHI under its obligations, talk to your compliance lead before using CloseRev.
Nearby
Match your billing export to your call and ad data, and see which channels produced procedures that were paid for rather than inquiries that were not.
See how it worksMatch started treatment plans and their contract value to the consultations and ads that produced them.
See how it worksMatch completed fittings and the revenue they earned to the campaigns and free-test offers that produced the patient.
See how it worksWhere your sales already are
Match accepted, completed and collected treatment to the campaigns and calls that produced the patient.
What to exportExport collected production from Curve, upload the inquiries beside them, and rank marketing on what patients actually paid for.
What to exportUse the patients Solutionreach messages as one side of the match and collected production as the other.
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 the leads your campaigns produced, match them against closed sales, and find out which campaigns produced revenue rather than form fills.
What to exportUse NexHealth bookings as your lead file, match them against collected production, and separate the patients you acquired from the ones who rebooked.
What to exportExport your conversations, match them against closed sales, and find out what texting actually produced.
What to exportExport call records from Weave, match them against collected production, and find out what the phone was actually worth.
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 exportExport your WhatConverts leads, match them against your invoices, and see where the recorded values and the real ones part company.
What to exportExport collections from Open Dental, bring the referral source and your other lead files with them, and rank every source on what it collected.
What to exportExport collections from Denticon, upload the leads behind them, and rank sources on the patients the group actually won — office by office.
What to exportCallRail tells you which campaign produced the call. Match the caller against your sales export and find out which calls became money.
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 articleA QR code dashboard counts phones that opened a link. It does not count people, it does not count the customers who saw the code and phoned instead, and it says nothing about sales. Here is how to set codes up so a scan can become a lead with a phone number or email, and how to judge every truck, sign, flyer and mailer by the sales it closed.
Read the articleStart today
Upload two exports and see your real revenue by channel in minutes. 14 days free, no card.