“RevolutionEHR already reports revenue.”
It does, and it has no record of what produced the patient, because that predates the chart.
For RevolutionEHR
Export collections from RevolutionEHR, upload the leads behind them, and rank channels on the whole patient rather than the appointment.
No API key Nothing to install in RevolutionEHRNothing to install No card requiredNo card
CloseRev reads a RevolutionEHR export of collected revenue — the patient's phone or email, the amount and the date — and matches it against the calls, forms and listings that produced the appointment. Optometry has an unusual shape: the examination is often largely covered by a plan and the optical dispense carries the margin, so a channel that fills the diary is not necessarily a channel that pays for it. Collections with no traceable lead are reported as Direct / Unknown.
Last checked against RevolutionEHR's own documentation on September 24, 2026.
The gap
Every channel can fill exam slots. Only some of them bring patients who buy glasses.
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. Both are worth exporting — plan-covered patients often give an email only.
Professional fees and optical together, as received. Charges are not collections, and vision plan reimbursement differs from both.
When money arrived. Plan payments land well after the appointment.
Exam, frames, lenses, contact lenses. This is the split that makes the report worth running.
Step by step
Written for somebody with RevolutionEHR 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.
Ranking on total collections hides the whole finding, which is that channels differ mostly on the optical half.
Vision plan reimbursement is slow and contact lens supply is annual, so a quarter measures the diary rather than the patient.
Tracked numbers, local search, plan provider directories, social and any community or school screening programme.
The join runs on the phone and the email, normalised, with exam and optical revenue reported apart.
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 LASIK & Vision Correction page — not from a RevolutionEHR account.
| Channel | Share | Sales | Revenue |
|---|---|---|---|
| Google Ads | 68 | $306,000 | |
| Meta Ads | 39 | $171,000 | |
| Email marketing | 14 | $63,000 | |
| Direct / Unknown | 80 | $360,000 |
Unmatched sales stay in Direct / Unknown. They are never spread across the paid channels to make the total look better.
The argument
Where a vision plan covers most of the examination fee, the appointment itself contributes little and the dispense is where the practice earns.
That makes appointment volume an actively misleading measure of a marketing channel, because it is the half that is subsidised.
Channels differ substantially on capture rate — the share of examined patients who buy frames or lenses — and nothing in a booking report reveals it.
Splitting collections into professional and optical, then ranking sources on the optical half, is the single most useful thing this data can do.
It frequently shows that the cheapest source of appointments is the most expensive source of revenue.
Being listed as a provider for a vision plan produces a steady stream of patients who chose you from a list because you were in network.
That is a real acquisition channel with a real cost — the plan's fee schedule — and it is almost never compared with paid media on equal terms.
Those patients also behave distinctively at the dispense, because the plan sets an allowance and the patient decides whether to exceed it.
Ranking plan-sourced patients on collected revenue against search-sourced patients answers a question most practices have only ever argued about.
The answer varies by practice and by plan, which is exactly why it has to be measured rather than assumed.
A contact lens wearer buys supply every year, sometimes through the practice and sometimes elsewhere, and each purchase is modest.
Counted per transaction they look unimportant; summed across a patient over several years they are among the most valuable outcomes a channel produces.
The report sums by patient across the window, which makes the annuity visible instead of scattered.
Channels differ in how many contact lens wearers they bring, and a practice that knows which ones can weight its spend accordingly.
It also identifies where supply is leaking to online retailers, which is a pricing decision the marketing report can inform but not make. A channel bringing wearers who buy their supply elsewhere is producing less than its first-year numbers suggest, and the gap widens every year it goes unmeasured.
A practice runs on patients returning every one to two years, and recall communications bring most of them back.
Counted as a source, recall would take credit for the majority of the practice's revenue and make every acquisition channel look ineffective.
Reported separately, it becomes the retention measure it is, and the acquisition channels can be judged on the patients they actually introduced.
Whether a channel's patients return for recall is itself one of the more valuable things the report shows, and it is a better predictor of a practice's future than any first-year figure. A source whose patients never come back is buying you one dispense; a source whose patients return every other year is building the practice.
Fair questions
It does, and it has no record of what produced the patient, because that predates the chart.
That measures the subsidised half. Optical collections measure the half that pays for the practice.
Then that is your largest channel and it has never been ranked against the paid ones on revenue.
No. It reads an exported file, so your charts, prescriptions and scheduling stay where they are.
Collected revenue with a patient contact detail, the amount and the date.
Because the exam is often largely covered and the optical carries the margin, so channels differ mostly on the second.
A year, because plan reimbursement is slow and contact lens supply is annual.
Yes, as their own source, ranked on collected revenue against the paid channels.
Summed by patient across the window, so an annuity is not read as a series of small transactions.
No. It is retention and is reported separately, or it would take credit for most of the practice.
Yes, where the export carries one.
Charges, plan reimbursement and patient payments are three different numbers, and only one of them arrives.
Any collection with no traceable lead, usually walk-ins and word of mouth.
A contact detail, an amount and a date, plus a revenue type if you include one. No prescriptions, no clinical records, no plan details, no card data. Encrypted in transit and at rest and deleted with the import.
Collections per acquired patient by source, exam and optical apart, recall separated from acquisition, 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.
RevolutionEHR 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 RevolutionEHR, no API key, and no need to have been tracking anything until now. Last year works as well as this month.