“DrChrono already reports collections.”
It does, and it has no record of what produced the patient, because that predates the chart.
For DrChrono
Export collections from DrChrono, upload the leads behind them, and rank channels on what was actually received.
No API key Nothing to install in DrChronoNothing to install No card requiredNo card
CloseRev reads a DrChrono export of collected payments — the patient's phone or email, the amount and the date — and matches it against the calls, listings and ads that produced the first appointment. In a practice billing insurance, the money arrives long after the visit and in an amount nobody chose, which makes both the window and the basis decisions worth stating. Collections with no traceable lead are reported as Direct / Unknown.
Last checked against DrChrono's own documentation on September 25, 2026.
The gap
Charges, allowed amounts and payments are three different numbers, and marketing is usually judged on the first one.
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 patient record. Mobile numbers match best; the email is a useful second key.
Payments received, from the payer and the patient together. Charges are a list price nobody pays.
When money arrived. Keep the date of service too — the gap is the payer's, not the patient's.
What was done. Values differ enough between visit types to make a blended average unusable.
Step by step
Written for somebody with DrChrono open in the next tab. Report names vary by edition, so each step says what to look for.
One row per payment with a patient contact detail, the amount and the date.
Charges bear little relation to what arrives, and ranking marketing on them rewards the coding rather than the channel.
Long enough for claims to have adjudicated and for patients who needed follow-up to have had it.
Otherwise a slow payer credits whatever marketing ran three months after the patient arrived.
Tracked numbers, local search, payer directories, referrals from other practices and any listing you pay for.
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 Medical Clinics page — not from a DrChrono account.
| Channel | Share | Sales | Revenue |
|---|---|---|---|
| Google Ads | 41 | $148,200 | |
| Meta Ads | 33 | $81,900 | |
| Email marketing | 16 | $39,000 | |
| Direct / Unknown | 44 | $120,900 |
Unmatched sales stay in Direct / Unknown. They are never spread across the paid channels to make the total look better.
The argument
A practice produces a charge, a payer produces an allowed amount, and a payment eventually arrives that matches neither.
Marketing reports in this field are frequently built on charges, because charges are available immediately and are the largest of the three.
That ranks channels by what was billed rather than by what was received, and the difference is not even across payers or visit types.
Collections is the only basis that survives a conversation with whoever runs the practice, and it is the one this report uses.
Where you want a charges view for volume, run it as a second labelled report rather than mixing bases in one ranking.
A patient who arrived in March generates a claim that adjudicates over weeks and pays over months, sometimes twice after an appeal.
Grouping revenue by payment date therefore attributes a March patient to June's marketing, which is simply wrong.
Carrying the date of service through lets the report group by when the patient arrived, which is the grouping a spending decision needs.
It also produces the lag per payer mix, which is a cash-flow number the practice can use quite apart from marketing.
A year of data is the practical minimum, because a shorter file is mostly claims that have not finished paying.
Being in network puts the practice on a list that patients choose from, and a meaningful share of new patients arrive that way.
The cost of that channel is the negotiated rate — real money, agreed in advance, and never compared with what a paid campaign costs per patient.
Ranking directory-sourced patients on collections against search-sourced ones answers a question most practices have only argued about.
The answer varies by specialty and by contract, which is exactly why it has to be measured rather than assumed. A practice that is in network with one payer on good terms and another on poor ones has two different channels wearing the same label.
A self-pay patient pays at the visit, at a price the practice set. An insured patient pays a fraction, months later, at a price a contract set.
Blended, a channel producing self-pay patients looks fast and small while one producing insured patients looks slow and large, and neither reading is about marketing.
Splitting them where the export allows gives two honest rankings and removes most of the timing distortion from the file.
For practices with a cash-pay service line, that split is usually the reason to run this at all.
It also changes what the practice is willing to pay for a patient. A cash-pay aesthetic or wellness patient is worth a multiple of an insured visit at the same appointment length, and a single blended cost per patient hides that entirely.
Fair questions
It does, and it has no record of what produced the patient, because that predates the chart.
They are, and they rank channels by billing rather than by money. The easier number is the wrong one, and it is wrong in a direction that flatters whoever codes most aggressively.
Then that is your largest channel and it has never been costed against the paid ones.
No. It reads an exported file, so your charts, notes and scheduling stay where they are.
Collected payments with a patient contact detail, the amount and the date.
Charges are a list price nobody pays, and the gap between them and payments varies by payer and visit type.
Because a claim pays months later, and grouping by payment date credits the wrong quarter's marketing.
A year, so claims have adjudicated and follow-up visits have happened.
Yes, as their own source, ranked on collections against the paid channels.
Yes, where the export allows, and it removes most of the timing distortion.
Yes, where the export carries one. A blended average across visit types is rarely actionable.
They stay in the file. A channel's value includes the patients who came once.
Any collection with no traceable lead, usually untracked calls and word of mouth.
A contact detail, an amount and a date, plus a visit type if you include one. No clinical notes, no diagnoses, no procedure codes, no insurance identifiers. Encrypted in transit and at rest and deleted with the import.
Collections per acquired patient by source, grouped by when the patient arrived, self-pay and insured apart where available, 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.
DrChrono 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 DrChrono, no API key, and no need to have been tracking anything until now. Last year works as well as this month.