Treatment revenue, not inquiries
See which channels produced collected revenue rather than which produced the most inquiries — on most books those are not the same channels.
Marketing attribution for concierge and direct primary care practices
Match enrolled members and the membership revenue they generate over years to the campaigns that produced them.
$204,000 51% of $400,000 paid
The blind spot
A membership is $2,400 a year for as long as it renews. Judging acquisition on a first month makes every channel look unaffordable.
What you get
See which channels produced collected revenue rather than which produced the most inquiries — on most books those are not the same channels.
However long the patient takes to decide, the case is credited to the campaign that produced them rather than to whatever ran last.
Exact matches only, with weaker links held back for a person to accept or reject — which is what makes the collected revenue figure survive being questioned.
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 | 40 | $96,000 | 24% | |
| Referral partners | 31 | $76,000 | 19% | |
| Email marketing | 13 | $32,000 | 8% | |
| Direct / Unknown | 82 | $196,000 | 49% |
A member who stays five years is worth $12,000. A channel judged on the first month's payment appears to cost more to acquire than it earns, and gets cut.
Because the match is on the member, every renewal credits the original channel. That is the difference between a marketing budget that can be defended and one that cannot.
Members arrive through existing patients, physicians and employers, and practices rarely have any measurement of which of those actually produces enrollments.
Referred members can go into the lead file, tagged with the referrer. Ranked on membership revenue, the referral sources may show that one or two relationships produce most of the growth — a fact worth knowing before renewing an advertising contract.
The whole proposition rests on the panel being small. Six hundred members instead of two and a half thousand patients is what buys the same-day appointment and the unhurried consultation, and a practice that grows past its cap has sold something it can no longer deliver. So marketing in this model is not a growth engine in the usual sense. Once the panel is full, its only job is to replace the members who leave, which is a materially different brief from the one most agencies are given.
That changes which number matters. Cost per inquiry is close to irrelevant when the practice needs thirty new members a year rather than three hundred; what matters is whether a source produces members who stay, because a member recruited and lost within a year has cost a seat and returned one annual fee. A channel producing twelve inquiries and eight long-tenured members is worth more than one producing two hundred inquiries and a churn problem. That comparison is not close, and nothing in a monthly acquisition report will ever make it, because both channels look identical in the month the member signed.
Measuring it requires nothing beyond exporting membership payments with a contact detail and running the report across several years. Every renewal joins to the same person and therefore to the source that recruited them, so a channel whose members stay keeps accumulating revenue while one whose members leave stops. Sources may turn out to be sharply differentiated on what they earn over time and barely differentiated on acquisition cost. It also means the honest reporting period here is years rather than quarters, which suits a model whose whole argument is about continuity.
One inquiry frequently becomes three memberships. A spouse joins at the same time, an adult child is added, sometimes a parent follows a few months later, and the practice books each of them as a separate member with their own annual fee. The inquiry file holds one name and one phone number. The revenue file holds three names, and possibly three different contact details, only one of which the advertising ever touched. On any acquisition report the campaign that produced the household is therefore credited with a third of what it actually delivered.
Left alone, that produces a systematic undercount. The source is credited with one membership and the other two fall into Direct / Unknown, which is honest but unhelpful — it makes every acquisition cost in the practice look roughly three times worse than it is for exactly the channels that recruit families. Since family enrollment is one of the strongest signals a practice has that its proposition is landing, penalizing it in the report is a particularly unfortunate way to be wrong.
The fix is in the contact detail, not an identifier. Each additional member is a separate row, and it is credited to the household's original inquiry only if it carries a contact detail from that inquiry — putting the paying member's email on every family member's row does exactly that, while the phone field can still carry the member's own number. A household or account identifier is not a matching key. Without a shared detail, the extra memberships appear as unmatched revenue rather than being guessed at, because inferring a family relationship from a shared surname and an address is not something this product will do. That is a deliberate limit rather than a gap: a contact detail is a fact the practice holds, and a shared surname is a guess.
Members recruited in one month renew in that month for as long as they stay. After three or four years a practice's billing calendar has hardened into a pattern set by whichever campaigns happened to be running in previous Januaries, and a monthly revenue report is largely a record of past recruitment rather than current performance. A channel that has not delivered a new member in two years can still dominate a given month's figures and look like the practice's best source.
This is not a small distortion. In a subscription model with high retention, new business is a thin layer on top of a thick base, and any report that does not separate the two will be read as though the base were a result. Practices make real decisions on this, usually to keep funding whatever the report says is producing revenue, which is the source that produced it several years ago. The base is also the most reassuring number in the practice, which is part of why nobody looks closely at what it is made of.
Separating new enrollments from renewals is a column in the export, mapped as Product / service, and it changes what the page is for. The report then shows new-enrollment and renewal revenue as separate lines, with how much of each traces to a channel, so both are visible instead of one blended figure. It does not rank channels within each line. Running the comparison annually rather than monthly helps as well, because an annual view is not hostage to which members happen to renew in a given two-week period. The new-business layer may turn out thinner than expected, and it is better to find that out while the panel is still full rather than a year after it stopped being.
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
Which is why renewals must credit the original channel — that is where the value of an enrollment actually is.
Which the Direct / Unknown bucket is honest about. The report measures the part you pay for.
Only a contact detail, an amount and a date are needed. No clinical information of any kind.
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 membership medicine and direct primary care 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.
Enrollments or membership payments: a member email or phone, the amount, and a date.
Yes — they credit the channel that produced the member.
Yes, and it is worth doing: leaving referrals out makes the paid channels look more important to your collected revenue than they are.
Not as a rate. Renewals keep crediting the channel that recruited each member, so over a multi-year range a channel whose members stay accumulates more revenue than one whose members leave; a cancellation date is not read.
Practices, yes: a practice column mapped as Location. A physician column is not one to add, because which physician somebody sees can reveal what they are treated for.
Yes — patient records are encrypted both in transit and at rest, kept inside your own workspace, and removable on request. A DPA is available.
Yes. Most membership medicine and direct primary care practices begin with last year, because it is the cheapest way to find out whether the exercise tells them anything.
Enrollment or payment rows analyzed in a calendar month. Inquiry rows do not count.
Put the paying member's email on every family member's row and the additional memberships credit the inquiry that produced them. A household or account identifier is not used for matching; without a shared contact detail they appear as unmatched revenue rather than being guessed at from a shared surname.
The payment date, since that is when the money arrived and it keeps the report consistent with your accounts. Enrollment dates work too, provided you use the same choice every period.
Add a column marking each row as a new enrollment or a renewal and map it as Product / service. The report then shows new and renewal revenue as separate lines, with how much of each traces to a channel, instead of blending the two into one figure.
Include them if the practice collected the money. They join to the same member and credit the same source, and leaving them out understates channels that recruit members who use the practice heavily.
Upload the historical inquiry records alongside and those members match normally. Where no inquiry record exists they sit in Direct / Unknown, which is the honest answer and usually a large and informative number.
Which sources produce members who stay. At capacity the entire marketing job is replacing churn, so tenure by channel is the only figure that helps, and it takes several years of renewals to see.
CloseRev does not sign HIPAA Business Associate Agreements and is not built for protected health information. Upload only membership payments — a phone number or email, the amount and the date — never diagnoses, visit notes, prescriptions or anything from the chart. If your members' phone numbers and emails count as PHI under your 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 cycles and their value to the inquiries and campaigns that produced them, across a decision measured in months.
See how it worksMatch program revenue and repeat prescriptions to the inquiries and ads that produced the patient — because month one is not the business.
See how it worksWhere your sales already are
Match collected revenue to the campaigns and calls that produced the patient, across the months a claim takes to settle.
What to exportExport collected payments from AdvancedMD, upload the inquiries beside them, and rank marketing on what was actually received.
What to exportExport collections from eClinicalWorks, upload the sources behind first visits, and rank channels on the patients who stay.
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 big unattributed bucket is not a broken report. It is a measurement — and there are only four things it can be. Here is how to read it, how to shrink it, and why any tool that hides it is lying to you politely.
Read the articleStart today
Upload two exports and see your real revenue by channel in minutes. 14 days free, no card.