How OrthoCarolina Integrated Epic Data into Our Marketing Technology Stack (Without Losing Our Minds)
.png)

If you want the full story of how OrthoCarolina dropped cost per lead by 80% and turned compliance into a growth engine, I’m happy to share that that write-up is available for your reading pleasure.
This is not that story. This is the narrower, messier sequel: how my multi-location orthopedic practice succeeded in wiring Epic (MyChart) into our marketing technology stack in 90 days, so we can now reliably measure revenue from marketing activity.
As Freshpaint’s recent State of Healthcare Marketing 2026 report finds, only 37% of healthcare marketing leaders say their executives view marketing as a “strategic growth driver”; related, only 1% of marketers can connect over half their spend to outcomes.
Connecting marketing tactics to bottom-funnel outcomes is the ultimate lever to change that dynamic. Below, I’m covering:
- What worked well in our Epic integration journey
- What didn’t work as easily
- What I’d do differently if I were starting from scratch, and
- The lessons you can take forward in enacting an Epic integration at your own healthcare organization.
Check out the recording of the webinar where I joined Freshpaint experts to cover the integration of Epic into OrthoCarolina’s marketing technology stack in depth.
Where Our Story Starts Today: With Ad Platforms Optimizing for Booked Appointments, EHR Integration Was the Next Hill to Climb
At OrthoCarolina, our footprint is big enough that we effectively function as the “third system” in our market (based in Charlotte, North Carolina), behind two major hospital systems. That visibility is great for growth and not so great for inconsistent governance.
To solve for that, we’d already:
- Put a HIPAA‑safe tracking foundation in place with Freshpaint.
- Re‑connected downstream signals like booked appointments with the ad platforms, driving unified, cross-channel measurement.
- Proved that compliance and performance are not in conflict. In our case, they accelerated each other, unlocking data-driven geographic expansion strategy, operational improvements that improved booking efficiency, and many more growth outcomes.
While booked appointments are helpful, it’s fair to say that arrived appointments pay the bills. The obvious next frontier for us was to tie marketing investment directly to arrived appointments within our EHR, Epic.
With a 9-16% no‑show rate, even small improvements in arrivals at OrthoCarolina could translate into meaningful incremental revenue without increasing ad spend.
So the question became: “How do we get just enough Epic data out to optimize marketing, without turning this into a three‑year IT science project?”
That’s the problem we set out to solve.
Step 1: Reframing Epic as a revenue and risk project
If you pitch Epic integration as “more granular marketing attribution,” it will die somewhere between legal and IT.
We framed it instead around two things:
- Risk: As a highly visible, physician‑owned practice in our market, we’re an easy target for regulatory scrutiny. We’d already moved to a privacy‑first tracking foundation precisely to avoid becoming a cautionary tale.
- Revenue: We were already using Freshpaint to tie booked appointments back to channels and improve CPL by 80%. The next logical lever was to optimize on arrived visits and show rates — something only Epic could tell us.
That framing changed the stakeholder conversation:
- Legal & compliance saw Epic integration as an extension of the same risk‑reduction work we’d already done, not as a workaround.
- Physician leadership understood this as a way to protect and grow revenue per visit, rather than an exercise in chasing more leads.
- IT and analytics saw a bounded, enterprise data‑sharing problem, not an open‑ended request for “all the data.”
Only after we had that coalition and aligned understanding in place did we get serious about the “how.”
Step 2: Getting Epic, OrthoCarolina, and Freshpaint on the Same Page
Epic is a closed ecosystem. Their documents live behind customer access, and vendors don’t get free rein to poke around.
For months, most conversations in the market about “Epic + ad performance” ended with some version of: “We’ve tried this. It’s not possible.”
What changed for us wasn’t a new product feature; it was getting all three parties on the same call: Our Epic analysts, our internal web and growth team, and Freshpaint engineering.
On that joint call, Epic did something important: they pointed us to a specific hook that already existed in MyChart, including the query parameter on MyChart URLs.
That gave us a home for a Freshpaint identifier that could:
- Ride along from our public site into MyChart.
- Survive login and scheduling flows.
- Re‑appear in an Epic report we could safely export.
Once that pattern clicked, the integration stopped resembling magic and started looking more like plumbing.
Step 3: Wiring MyChart into Freshpaint (Without Touching Epic code)
The next phase was a three‑link chain.
Link 1: Tagging MyChart links on our site
On orthocarolina.com, any “Schedule in MyChart” button points to a MyChart domain.
Freshpaint shipped us a small script that our web team dropped onto the site. Its job was simple:
- Watch for clicks on tags whose hostname matches our MyChart domains.
- Read the Freshpaint device ID from the browser.
- Append that device ID into the Epic query parameter before redirect.
Conceptually:
- The user clicks a Google ad.
- Lands on our site (Freshpaint sees the click, assigns a device ID).
- Clicks a MyChart scheduling link.
- Script adds the device ID into Epic.
- MyChart passes that value through into Epic’s Clarity tables.
No code inside Epic and no invasive SDKs — just URLs and a field Epic already supports.
Link 2: Getting the right appointments out of Epic
Freshpaint and our Epic analysts found the specific data sources in Epic where the query lands. From that, a recurring export was built, to include the identifier we used, appointment ID and timestamps, and basic metadata (location, service line, status: booked/attended/canceled).
Security and data governance were non‑negotiable. The steps we hardwired:
- Files landed on a secure SFTP or portal that Freshpaint could access programmatically (not via a human logging in and dragging CSVs around).
- Nothing flowed back into Epic. The data only moved one way, in a format legal and compliance had signed off on.
Now we get to the part where a lot of teams get stuck. “Two weeks of work” for Epic can easily span:
- Web / MyChart configuration
- EHR analysts
- Reporting developers
- InfoSec reviews
What helped us was treating this as a joint project with Freshpaint, not just an internal IT ticket. When our Epic team had questions, Freshpaint engineering was there to answer them live, which ensured our team had immediate access to subject matter expertise and undoubtedly accelerated the process by days, if not weeks.
Link 3: Joining the dots and pushing “attended” back into ad platforms
Once those exports started landing, Freshpaint:
- Joined the Epic files back to:
- Freshpaint’s own event stream (page views, clicks, call events)
- Ad platform click IDs and campaign data
- Created conversion events that demonstrated appointments booked and attended, based on Epic fields.
- Sent those events back into Google and Meta as optimization goals, not just reporting metrics.
From this point on, the Epic integration wasn’t just a reporting feed; it was actively shaping how platforms spent our money.
Where We Underestimated the Work
I wish I could say it was all smooth once the plumbing was in, but there were three big areas where we had to recalibrate expectations.
1. Scheduling UX was a bigger constraint than Epic
As we started to see more of the funnel, it became obvious that our own scheduling experience was a major drag on performance:
- Only ~25% of our appointments are booked online. Our target is 55-65%.
- The current flows inside Epic, shaped by years of complex provider preferences, required 11-13 clicks, whereas competitors’ took 2-3.
An Epic integration into our martech stack wouldn’t fix that. So we went back to physician leadership and got approval to fully rebuild our scheduling system on top of Epic, with online booking share and show rates as explicit success metrics.
In hindsight, I would have paired “Epic + Freshpaint” and “scheduling UX overhaul” as a single program from day one.
2. Replicability across Epic flavors isn’t guaranteed (yet)
We and Freshpaint are very bullish; everything we’ve seen suggests the field patterns are repeatable for Epic + MyChart open scheduling installs.
But we’ve also learned to be candid about what we still don’t know:
- Hosted vs. on‑prem Epic environments may behave differently.
- Some organizations rely more on authenticated MyChart flows than on public open scheduling links.
- Not every Epic team has the same comfort level with extracting and sharing these fields.
Today, my mental model is: The pattern is real, but it’s still in “design‑partner” mode, not a shrink‑wrapped implementation guide.
This is an exciting place to sit if you’re willing to be an early mover and test and learn. It’s frustrating if you’re expecting a PDF you can just hand to IT.
3. The narrative around experiments matters as much as the data
There’s one more lesson we learned, and it’s more about communication than code.
When you run early Epic experiments, the data will be noisy: Volumes are small, scheduling flows are in flux, and not all sources (walk‑ins, phone, third‑party call tracking) are equally represented.
On Freshpaint’s side, engineering lead Andrew Lai was explicit about this risk: unless we actively manage the narrative, someone else will interpret the experiment for us, and not necessarily in our favor. We were mindful that early tests be treated as trials, so that the conclusion didn’t become, “Epic integration didn’t move the needle. The product failed.”
Internally at OrthoCarolina, that meant:
- Treating the first 3-6 months as a beta, not a finished feature.
- Making sure our execs understood what we were testing and what a successful test looked like, even if the metric movement was modest.
- De‑briefing results to project team members jointly with Freshpaint, instead of in separate rooms.
If I could rewind, I’d start that expectation‑setting before the first Epic file ever landed.
The Practical Epic Playbook I’d Hand Another Marketer
Here’s how I’d distill our experience for another marketing leader who wants the Epic upside without losing their mind.
1. Anchor the project on arrived appointments
Make your north star unambiguous: Move from “cost per lead” to “cost per arrived appointment,” then eventually to revenue per channel.
Frame every stakeholder conversation, including Epic’s, around that outcome. It’s easier to get alignment on a metric everyone already cares about than on abstract “attribution.”
2. Build a lightweight, cross‑functional Epic squad
You don’t need a 40‑person steering committee, but you do need a small group who knows they’re co‑owning the experiment. Before involving your vendor, map:
- Legal / compliance
- CIO / Epic leadership
- Analytics / reporting
- Growth / marketing
Get them to agree to:
- A narrow first use case (e.g., one service line, open scheduling only).
- A definition of success that includes learning, not just lift.
3. Use existing Epic hooks first, not custom builds
Ask your Epic team (or your vendor, with Epic on the call) very specific questions:
- “Can we pass an external identifier into MyChart via an existing Epic hook?”
- “Where does that land in Clarity for our install?”
- “Can we get a recurring export of that field plus basic appointment outcomes?”
Lean on fields Epic already supports before you even think about deeper customization.
4. Keep the first file dumb and safe
For your first export, resist the temptation to boil the ocean. Aim for:
- One identifier
- Appointment ID and date/time
- Basic status (booked / attended / canceled)
- A small handful of non‑sensitive fields (location, high‑level service line)
You can always add more columns later. Getting any file flowing and validated is the real milestone.
5. Pair Epic work with a ruthless look at scheduling UX and call flows
Don’t let Epic be a distraction from more obvious friction points, such as:
- How many steps does it take to book online?
- What percent of volume is booked via phone‑only?
- Is your current call tracking stack going to survive an Epic‑centric world?
We discovered that our biggest gains would come from improving the plumbing into Epic (scheduling, call routing) at least as much as from pulling more data out of it.
6. Treat your first 6-12 months as design‑partner R&D
Finally, be honest with yourself and your org: this is still emerging territory. That doesn’t mean you wait. It means you:
- Choose a vendor who’s willing to be in the trenches with you — on calls with Epic, with your analysts, and with your execs. In our case, an Epic integration would never have happened without Freshpaint, who I look to as more of a partner than a vendor.
- Socialize early that some experiments will underwhelm, but each one buys you pattern recognition you can’t get any other way.
For us, that partnership mentality has mattered as much as any individual feature. The transition from seeing Freshpaint as “just” a compliance vendor to a true performance partner, with epic muscle behind it (pardon the pun, it had to be done), has been critically important.
Where We Go From Here
With Epic data now flowing through Freshpaint and into OrthoCarolina’s marketing tech stack, we are now in the early days of closing the gap in our no-show rate, improving visibility into booked appointment patterns, and measuring associated incremental revenue increases.
As you can see from my experience, Epic integration is not a one‑click toggle. It’s a multi‑stakeholder negotiation wrapped around a very specific piece of plumbing.
Done well, though, it’s one of the few projects that can legitimately move you from CPL to revenue per channel, and from “marketing asks for budget” to “marketing is driving revenue by decreasing our no-show rate.”
That’s a hill worth climbing.

.png)





.jpg)
