Industry guide · Custom Software

Optometry Practice Software for Multi-Location Groups: Where Off-the-Shelf Breaks and What to Build Instead

The short answer

If you run four or more optometry locations and your team is rekeying exam data into claim forms, tracking frame inventory in spreadsheets, or writing off denied VSP and EyeMed claims because nobody caught them in time, building is usually the right call. Across 2,000+ projects, Digital Heroes sees a focused first release land at $60k to $130k and ship in 12 to 16 weeks. A full platform replacing your practice management layer runs $150k to $400k phased over 6 to 12 months. Below that scale, keep RevolutionEHR or Eyefinity and fix your process instead.

Why practice software makes or breaks a multi-location optometry group

A six-location optometry group is really three businesses wearing one coat. There is a medical practice billing exams and medical eye visits to Blue Cross and Medicare. There is a retail store selling $400 frames and $250 progressive lenses with vision plan allowances applied. And there is a lab logistics operation moving jobs to Essilor or a local finishing lab and back. Your practice management system was built for one of those three. Usually the first one. The other two get spreadsheets.

The scene we get called about is always some version of this. It is Tuesday morning at the third-busiest location. The optician has a patient at the board who wants a specific Ray-Ban frame. The system says two in stock. The optician walks the wall, does not find them, calls the flagship store, waits three minutes while someone else walks their wall. The frames were sold Saturday at the flagship because inventory syncs nightly and Saturday's sale posted after the sync window. The patient waits eleven minutes, picks a frame she likes less, and walks out with a smaller ticket. That happens somewhere in your group several times a day and you have no report that names it.

Meanwhile the billing coordinator is working a denial queue in a browser tab next to VSP's portal and EyeMed's portal, because RevolutionEHR pushes claims out but the plan-side rejections come back in formats the system does not reconcile. She works denials in a Google Sheet. She catches most of them. The ones she does not catch are real money. Run the math on your own book: a four percent uncaptured denial rate on a $185 average medical claim, at 3,000 exams a month across six locations, is six figures a year that quietly becomes a write-off after it ages past the timely filing window. Most groups cannot produce that number without a two-day audit, which is the actual problem.

Problem one: inventory and the exam room do not know about each other

Optical inventory is not warehouse inventory. A frame has a SKU, but it also has a color, an eye size, a bridge, a temple length, a status (board stock, backorder, or on a patient's face for a trial), and a vision plan tier that determines whether the patient's allowance covers it or they pay an upgrade out of pocket. Off-the-shelf practice systems model frames as a flat SKU with a count. Everything after that lives in the optician's head.

Eyefinity Practice Management and RevolutionEHR both have a frames module. Neither treats real-time cross-location availability as a first-class thing, because their architecture assumes a location is an island that syncs on a schedule. You cannot bolt real-time onto a nightly batch. And when you add Frames Data catalog imports on top, you get duplicate SKUs for the same physical frame across locations, which means your reorder logic is working from a fiction.

What a custom build does: one inventory ledger, event-sourced, with every movement (receipt, sale, transfer, trial, return, discontinue) written as an event with a location and a timestamp. The optician's tablet queries live availability across all six stores and shows a hold button that reserves the frame at the flagship for 48 hours and generates the transfer pick ticket. The doctor's exam room screen shows, during the refraction, which frames on this store's board actually fit this patient's PD and this Rx's lens thickness, so the handoff to optical is a recommendation and not a browse. Reorder rules run per location, per brand, per price band, using that location's own sell-through instead of a chain-wide average that keeps shipping $89 frames to the store that only sells $300 ones.

Problem two: the claim is built after the exam instead of during it

The doctor documents the exam. Hours or days later, the biller opens the chart, reads the note, decides whether this was a routine vision exam (bill VSP) or a medical visit (bill the medical carrier), picks the codes, and submits. That gap is where the money leaks. The doctor knew at minute four that the patient's diabetes made this a medical visit. The biller finds out on Thursday and has to interpret a note written for clinical purposes rather than billing ones.

Off-the-shelf systems cannot close this gap because their exam module and their claims module are separate products that talk through a document. Eyefinity and RevolutionEHR both push to a clearinghouse and both give you a claims worklist. What neither gives you is a rules engine that knows your payer mix, your plan contracts, and your historical denial patterns, because no vendor can write payer-specific logic for tens of thousands of practices on different contracts.

What a custom build does: the claim assembles itself while the exam is documented. Chief complaint and diagnosis codes drive a routing decision (vision plan or medical carrier) at the point of care, and the doctor sees a one-line prompt when the system thinks this should be medical. A scrub layer runs your own denial history as rules before submission: if this payer denied this CPT and modifier combination thirty times in the last year, the claim stops in a queue before it goes out rather than coming back as a rejection four weeks later. AI does real work here. A model reads the clinical note and proposes the routing and the codes with a confidence score, the biller confirms or corrects, and every correction becomes training data for your practice's own patterns. On the intake side, an extraction model reads the insurance card photo and the eligibility response and pre-fills the plan, the allowance remaining, and the last exam date, which kills the two-minute front-desk portal lookup your team repeats 3,000 times a month.

Problem three: recall and no-shows are treated as a marketing problem

Every optometry group has a recall list. Most run it through Solutionreach, Weave, or Demandforce, which fire a text at the 12-month mark and call it done. The result is a chair that sits empty at 2:40 on a Wednesday while a patient who has not been seen in 26 months gets the same generic text as the patient who was in last month.

The recall tools cannot fix this because they sit outside your data. They get a name, a phone number, and a last-visit date through an integration. They do not know that the patient is a myopia-control kid whose parent will absolutely book 4:30 but never 10 a.m., or that this patient's VSP benefit resets in November with the allowance unused, or that they bought a six-month supply of contacts eight months ago and are rationing.

What a custom build does: recall priority computed from your own data rather than a calendar. Benefit reset date, unused allowance, contact lens supply burn rate, the last three appointment behaviors, and the specific chair gaps at their preferred location combine into a ranked outreach list that gets worked in that order. AI helps at two concrete points. First, an after-hours booking agent on your site and phone line that has real availability, understands "I need a contact lens exam, I wear Acuvue Oasys, and I have VSP", and books into the right appointment type with the right duration, so the 6 p.m. to 8 a.m. window stops being a voicemail graveyard. Second, a short-horizon forecast that reads next week's schedule and your own historical no-show rates by patient and by slot, and tells the manager on Friday which slots are likely to open, so overbooking becomes a decision instead of a gamble.

Problem four: you cannot see the group, only the stores

Ask your practice system which location has the best capture rate, meaning patients who had an exam and bought glasses from you rather than walking out with the Rx. You will get six answers you have to assemble in Excel, and they will not agree, because each location's staff records the walk-out differently. Ask which doctor's exams convert best into optical revenue and you will get nothing, because the exam and the optical sale live in tables that were never designed to be joined for that question.

That is a data model consequence, not a reporting bug. Multi-location was added to these products as a tenant flag rather than a design premise, which is why the rollups are shallow and why anything cross-store is a CSV export. Buying a BI (Business Intelligence) tool on top does not fix it. You pay a consultant to build dashboards over a schema that does not contain the relationships you need.

What a custom build does: a shared model where a patient, an encounter, a claim, an optical order, and a lab job are linked entities carrying the location and the provider on each. Then the questions answer themselves. Capture rate by location, by doctor, by day of week. Remake rate by lab and by lens design, which is how you find out that the finishing lab handling two of your stores remakes at more than double the rate of the others, and that difference is worth a renegotiation. Days to deliver by lab. Revenue per exam hour by provider, which is the number that actually tells you where to add a chair.

What this costs and how long it takes

These are Digital Heroes numbers from our own delivery across 2,000+ projects, not industry survey figures. A focused first release, meaning one hard problem solved properly and running in your stores, is $60k to $130k and ships in 12 to 16 weeks. For an optometry group that first release is usually either the claims layer (routing, scrub, denial worklist, reconciliation against VSP and EyeMed) or the unified inventory and optical order layer. Pick one. The groups that try to do both in release one are the groups that ship in month nine.

A full platform, meaning you replace the practice management layer and run exams, optical, claims, labs, and reporting on your own system, is $150k to $400k phased over 6 to 12 months. That range is wide because of what drives it in this category specifically.

Integrations are the biggest single lever. Every diagnostic device you want in the chart is its own project. Zeiss, Topcon, Optos, and Icare each speak their own dialect of DICOM or something worse, and some require a device-side broker on the store network. Budget per device family, not per device. Clearinghouse integration (Change Healthcare, Availity, Trizetto) is well-trodden, but the payer-specific edge cases are where weeks go. Lab integrations via DVI or a direct Essilor connection add real time. Frames Data licensing and catalog sync is a known quantity but not free.

HIPAA is not a line item you skip, and it is not expensive if you design for it. Audit logging on every PHI read, encryption at rest and in transit, role-based access down to the location level, BAAs with every vendor including your AI provider, and a documented breach process. If you also sell to patients online, you inherit PCI scope. The expensive version of compliance is the one you retrofit in month eight.

Migration is the underestimated one. Twelve years of charts in RevolutionEHR, with scanned documents, historical Rx data, and claim history, is not a CSV export. Budget four to eight weeks of a real engineer's time and expect to run parallel for a full billing cycle.

Build or buy: take the position

Buy if you are one to three locations doing under about 1,200 exams a month. RevolutionEHR or Eyefinity, priced per provider per month, will hold you, and your problems are process problems that software will not solve. A custom build at this scale is a vanity project with a maintenance bill.

Build when three of these are true at once. Your denial and write-off leakage exceeds the annual cost of a build, which for most groups happens between four and six locations. You employ someone whose actual job is moving data between systems, or you have a spreadsheet the business would stop without. You have a service line the market does not serve well, like myopia management with its own recall cadence and treatment protocols, or dry eye with device-driven treatment plans, and your system cannot model it. Or you are acquiring practices, and every acquisition costs you three months of data cleanup because there is no clean way to fold a new location into your stack.

There is a middle path and we recommend it more often than a rip-and-replace: keep RevolutionEHR as the system of record for charts and build the layer that is bleeding. Claims intelligence, unified inventory, group reporting, and patient booking can all sit on top through the API while the clinical record stays where it is. That is the $60k to $130k first release, it pays back inside a year at six locations, and it does not bet the practice on a migration.

How to choose a developer for optometry practice software

Ask them to model the data on a whiteboard before you sign anything. A developer who has built in this category will draw the encounter, the Rx, the optical order, and the lab job as separate entities with their own lifecycles, and will ask you whether a contact lens Rx and a spectacle Rx are the same thing in your world. A developer who has not will draw a patients table and an appointments table. That distinction is visible in fifteen minutes and it predicts everything.

Ask what they have shipped against a clearinghouse and a vision plan. Which clearinghouse, which payers, and what happened when a claim came back with a rejection the spec did not describe. The answer tells you whether they have lived inside an 837 and a 999 or only read about them. Ask specifically about vision plan claims versus medical claims, because a developer who has only done medical will not understand why the same exam routes two ways.

Ask how they handle a store with bad internet. Your locations lose connectivity. If the answer does not include offline capability for the exam room and the point of sale (POS), with a conflict resolution story for what happens when two stores sold the same frame while one was offline, they have not run software in a retail environment.

Ask who owns the code and get it in writing before the first invoice. You should own the repository, the infrastructure accounts, and the deployment pipeline, and you should be able to hand the whole thing to another firm on thirty days notice without a conversation. Any hesitation there is your answer. Also ask what the BAA situation is with every subprocessor including whatever AI vendor sits behind the coding assistant, because that liability is yours, not theirs.

Research & sources

The evidence behind this guide

Independent findings on why this investment pays off. Every link goes to the primary source.

  1. The 2024 DORA report found AI adoption significantly increases individual productivity, flow, and job satisfaction, but negatively impacts software delivery throughput and stability - a paradox leaders must manage with fundamentals like smaller batch sizes and robust testing. Source: DORA / Google Cloud (2024) →
  2. Median SaaS spend reached $9,455 per employee, and organizations leave an average of 36% of their SaaS licenses unused. Source: Zylo (2026) →
  3. An EY survey found one in five U.S. payrolls contains errors, each costing an average of $291 to remediate, with a typical 1,000-employee organization spending roughly 29 workweeks per year fixing common payroll errors. Source: EY (Ernst & Young) (2022) →
  4. 88% of organizations are concerned about employee retention, and providing learning opportunities is respondents' #1 retention strategy; career progress is cited as people's top motivation to learn, yet only 36% of organizations qualify as 'career development champions.'. Source: LinkedIn Learning (2025) →
Rohan Malhotra · Enterprise Software Consultant

Rohan advises mid-market and enterprise teams on ERP, CRM and custom software, and has led delivery on dozens of business-software builds.

Writes for Digital Heroes, shipping business software for 2,000+ brands across 55+ countries since 2017.

FAQ

Frequently asked questions

How much does custom optometry practice software cost for a 6-location group?
A focused first release solving one hard problem, usually claims intelligence or unified optical inventory, runs $60k to $130k and ships in 12 to 16 weeks based on Digital Heroes delivery across 2,000+ projects. A full platform replacing your practice management layer is $150k to $400k phased over 6 to 12 months. At six locations the first release typically pays back inside a year through recovered denials and reduced write-offs alone.
Should we replace RevolutionEHR or build on top of it?
Build on top of it in most cases. Keep RevolutionEHR as the system of record for clinical charts and build the layer that is actually bleeding money, usually claims routing and denial recovery, cross-location inventory, or group-level reporting. This avoids a chart migration, costs a fraction of a full replacement, and connects through the API. Full replacement only makes sense when the clinical model itself blocks a service line you need.
What does it cost to migrate 12 years of patient charts off Eyefinity or RevolutionEHR?
Budget four to eight weeks of senior engineering time as part of the project, not a separate quote, and plan to run both systems in parallel for a full billing cycle. The cost driver is not the structured data, it is scanned documents, historical Rx formats that changed over the years, and claim history that has to reconcile penny for penny. Anyone quoting a chart migration as a two-week CSV import has not done one.
Is a custom optometry system HIPAA compliant?
It is compliant if it is designed that way from day one: audit logging on every PHI read, encryption at rest and in transit, role-based access scoped to location, signed BAAs with every vendor in the chain including your AI provider, and a documented breach response. This adds cost to the design phase rather than creating a separate compliance project. The expensive version is retrofitting it after the build, which we have been called in to fix and it is never cheap.
Can custom software handle VSP and EyeMed claims better than off-the-shelf?
Yes, and this is usually the single highest-return piece. Off-the-shelf systems submit claims and show you a worklist, but they cannot encode your specific payer contracts or your own denial history as pre-submission rules because they serve thousands of practices with different contracts. A custom scrub layer stops known-bad claim patterns before they go out and routes vision versus medical at the point of care instead of days later in the billing queue.
How long before we see money back from a custom build?
For groups doing 2,500+ exams a month, the claims-focused first release typically starts recovering denials in the first full billing cycle after go-live, which is roughly month five counting from kickoff. Inventory and capture-rate work takes longer to show up because it changes staff behavior and not just a workflow, so give that two quarters. Recall and booking improvements show in the schedule within weeks.
Who owns the code if we hire an agency to build this?
You should, completely, and it should be in the contract before you pay anything. That means the repository, the cloud accounts, the deployment pipeline, and the documentation, transferable to another firm on thirty days notice without negotiation. Digital Heroes ships this way by default. If a developer wants to hold the infrastructure or license the code back to you, walk.
At what number of locations does building actually make sense?
Usually between four and six, but the location count is a proxy for the real signals. Build when your annual denial write-offs plus the salary of whoever manually moves data between systems exceeds the build cost, or when you have a service line like myopia management or dry eye that your system cannot model. At one to three locations, RevolutionEHR or Eyefinity will hold you and your problems are process problems.
Where does AI genuinely help in an optometry practice, and where is it hype?
It genuinely helps in three places: reading the clinical note to propose vision versus medical routing and codes with a biller confirming, extracting insurance card and eligibility data at intake to kill the front-desk portal lookup, and an after-hours booking agent with real availability that understands appointment types and plans. It is hype anywhere it is asked to make a clinical judgment or approve a claim without a human confirming. Every AI vendor in the chain needs a BAA.
How long does it take from first call to software my team can actually use?
Plan for four to six months: two to three weeks of discovery, two to four weeks of design, then a 10 to 16 week build with testing. In Digital Heroes delivery experience the schedule killer is not engineering speed but decision lag; a client who takes two weeks to approve wireframes adds two weeks to launch. Book a weekly 30-minute decision slot before kickoff and most of that risk disappears.
How many people should be working on my software project?
A typical $40,000 to $150,000 build runs on three to five people: a technical lead, one or two developers, a designer, and someone owning QA and project communication, often as overlapping part-time roles. More bodies do not make software arrive faster; past a point they slow it down with coordination overhead. The question that matters more than headcount is whether one named senior engineer is accountable for the outcome.
Should I ask for a fixed price or pay the agency hourly?
Fixed price for the first version, hourly or retainer for what comes after launch. A fixed-scope, fixed-price V1 puts the estimation risk on the agency, which is exactly where you want it while trust is unproven; hourly billing on an unscoped greenfield build is a blank check. After launch, flip it, because maintenance and small features arrive unpredictably and fixed-pricing every ticket wastes everyone's time.
Can I build my product on a no-code tool like Bubble instead of hiring developers?
For testing whether anyone wants the product, yes, and Bubble's paid plans start at $29 a month, which is the cheapest validation you will ever buy. The ceiling arrives with complex data relationships, heavy integrations, performance at a few thousand users, and the fact that you cannot export a Bubble app to servers you control. A path many Digital Heroes clients take: prove demand on no-code, then rebuild custom once revenue justifies it, treating the no-code version as a paid prototype rather than a foundation.
How much should a small business expect to pay for custom software?
Across 2,000+ Digital Heroes projects, a small business system that replaces spreadsheets or one core workflow typically lands between $40,000 and $80,000, with more complex first versions running up to $150,000. The two levers that move the number most are integrations and user roles, not the team's hourly rate. Any quote under $15,000 for a full production system means the vendor has not understood your scope yet.
Should I hire a freelancer or an agency for my software project?
A skilled freelancer is the right call for a single-discipline scope under roughly $15,000, like a website, a plugin, or one integration. Above that, projects need design, backend, testing, and project management at once, and a solo builder becomes the single point of failure: if they get sick or take a bigger client, your project simply stops. Agencies bill 20-40% more per hour but carry continuity, code review, and someone to escalate to, which is what you are actually buying.
How do I calculate whether custom software will pay for itself?
Divide the build cost by the monthly benefit, where benefit is hours saved times loaded hourly cost, plus subscription fees replaced, plus any revenue the software unlocks. Three staff saving 10 hours a week each at a $40 loaded rate is about $62,000 a year, which pays back a $60,000 build in roughly 12 months. Across Digital Heroes internal-tool projects, 12 to 24 months is the normal payback range, and anything projecting under 6 months usually means the spreadsheet is hiding costs.
How long does it take to build a custom web or mobile app from scratch?
Plan on 8 to 16 weeks for a focused first version and 4 to 9 months for a larger platform, which is the typical spread across Digital Heroes builds. The first 2 to 3 weeks go to discovery and design before any production code ships. The two things that stretch timelines most are integrations with legacy systems and slow feedback from your side, not developer speed.
What should I prepare before contacting a software development agency?
A one-page brief beats a 40-page requirements document: the business problem in plain words, who will use the system, the 5 to 10 workflows it must handle, the tools it must connect to, and your budget range and deadline driver. You do not need wireframes, a specification, or technical vocabulary; producing those is the agency's job during discovery. Stating a budget range up front is the single best move, because it gets you honest scoping instead of a quote engineered to win the meeting.
Keep reading
let's build

Build something worth launching.

A plan, a team, a timeline, within 24 hours. No decks, no discovery calls. Tell us what you're building and we'll come back with a real scope and a real number.

message us directly · we reply within one business day

mission briefing

Monthly dispatch

Playbooks, real build costs, and what we're shipping. One email a month. No fluff.

visit us

New York HQ

1140 Broadway, Suite 704 · New York, NY 10001

Get directions
Online now

Hey there 👋 How can we help you today?