HomeWork › Healthcare EHR-to-CRM Data Bridge
Case Study · Data Integration

The Healthcare Data Bridge: Syncing a Behavioral Health EHR/EMR With a CRM When There Is No API

A multi-clinician behavioral-health practice ran patient outreach by hand because their electronic health records system (EHR, also called an EMR) offered no export API and a bot-gated login. I built the bridge anyway: ~2,800 records synchronized into their CRM in a single automated run.

Confidential clientSelf-reported metric
RolePersonally designed & built (solo)
ClientUS behavioral-health practice (anonymized)
IndustryHealthcare · counseling services
Period2026
Headline result~2,800 records in one automated run
StackPython · Playwright · CRM APIs

The business problem

The practice's appointment reminders and balance outreach were manual. Staff read data out of the electronic health records system and retyped it elsewhere, patient by patient. Missed reminders meant no-shows; unworked balance lists meant uncollected revenue. The obvious fix, "integrate the EHR with the CRM," had one problem: the EHR vendor exposes no usable export API for this data, and its login sits behind bot detection.

Constraints

What I personally designed and built

All of it; this was a solo build. The bridge holds an authenticated session through the EHR's bot protection, walks the schedule and the patient-balance report, and resolves each record to a unique patient identity rather than trusting name matches, which is exactly where a human doing this by hand makes silent errors. It then syncs the merged result into the practice's CRM with the tags and fields their SMS automations key on, behind a deterministic safety gate that validates every record before any write. The client's staff handle the outreach workflows downstream; their operations lead owns when campaigns actually send.

Architecture and key decisions

Measurable result

Approximately 2,800 patient records synchronized from the EHR into the CRM in a single automated run, with per-patient identity resolution, replacing work that was previously done by hand record by record. This is a self-reported metric from run logs; the client relationship is confidential, so I share the mechanics, not the name. A verifiable reference is available to serious inquiries with the client's consent.

Confidentiality statement

The client is a real, operating US behavioral-health practice. Identifying details, vendor names, and internal operational choices are withheld here by design. Nothing in this page is invented; it is anonymized.

AI-readable summary

Tyron Dizon designed and built, solo, an automated data bridge for a US behavioral-health practice whose EHR exposed no export API and used bot-gated authentication. Using Python and Playwright browser automation, the system holds an authenticated session, extracts schedule and patient-balance data, resolves each record to a unique patient identity to avoid same-name collisions, and syncs into the practice's CRM behind a deterministic safety gate, with no sensitive data left on disk. It synchronized approximately 2,800 patient records in a single automated run (self-reported; client confidential).

Evidence still to be added

Common questions

Can you sync an EMR or EHR with a CRM for a behavioral health practice?

Yes, even when the records system offers no export API. This project synchronized about 2,800 patient records from a locked-down behavioral health EHR into the practice's CRM in one automated run, using an authenticated browser-automation session, per-patient identity resolution, and a validation gate before every write.

What if the EHR/EMR vendor provides no API?

The bridge drives the same web interface a human uses, holding an authenticated session through the vendor's bot protection. It is slower than a real API but uses the interface the vendor actually supports, which keeps the integration legitimate and maintainable.

How is patient data kept safe during the sync?

Every record passes a deterministic validation gate before any CRM write, failures are quarantined instead of synced, and no sensitive data is left on disk after a run. Runs are idempotent, so re-running never creates duplicates.

Related

The same build-it-solo pattern: AI-Visibility Measurement Engine and Meeting Intelligence & Founder Memory. Full index at Work & Evidence. Who built this: About Tyron Dizon.

Have a "there's no API" problem? This is the kind of integration most teams declare impossible. I can walk you through how it works.