The scheduling engine for custom patient apps

Build your own booking UI or drop in ours. Either way, we handle what’s underneath: fast availability across every provider, atomic booking that never double-books, and policy-enforced schedules.

Running patient booking today

CNY Fertility
Remedy
Amma
Nurx

Your EHR is the system of record. It shouldn’t be the booking experience.

Telehealth funnels live or die on the booking step. Patients fill out intake, pick a time, and either become customers or bounce. Most EHR schedulers were never built for that.

So teams build their own. And then they own a scheduling engine forever.

Slow availability

Thirty seconds to compute a week of slots is normal for an EHR. In a booking flow, it’s a spinner the patient watches while they decide to leave.

EHR
30s
SavvyCal
240ms

Double-booking

When everyone is fighting over the next two hours of appointments, two requests a millisecond apart have to resolve correctly. Some schedulers give both patients the slot.

10:00
booked
10:00
409

Rules the generic tools can't express

Provider rotations, state licensure, virtual-versus-in-person, protocol-specific constraints. Off-the-shelf HIPAA schedulers get you 70% of the way there, and the last 30% becomes your problem.

Off-the-shelf
70%
You
30%

Your booking flow. Our engine.

SavvyCal Appointments is the scheduling layer between your patient app and your EHR. Build the booking experience on our API, or embed our components and skip the front-end work. Your app stays the source of truth for patients. We compute availability, enforce the rules, and book atomically.

  • Built for your front end, or ours
  • Built for healthcare
  • Built to sit in a funnel
Capabilities

Everything a scheduling engine has to get right

The front-desk view

One schedule across every provider. Block a sick day, see who’s affected, reschedule them, all from one screen.

Provider self-service, with a safety net

Providers set their own hours and blocks, and connect Google Calendar so a forgotten lunch blocks the slot automatically.

Atomic booking

Two patients can’t get the same slot. Bookings resolve consistently under burst load, so your funnel doesn’t need to re-fetch and retry.

Policies, enforced server-side

Minimum notice, reschedule and cancellation windows, provider utilization, per-service slot cadence, monthly schedule releases.

Notifications, yours or ours

Bring your own reminder system, or use ours with fully customizable MJML templates.

Developers

Built to be called from code

Full OpenAPI spec. Every object — services, staff, schedules, blocks, clients, appointments — is create/read/update/delete over the API. Sandbox accounts are free and immediate.

  • Availability computed server-side; your app never reconciles slots
  • Webhooks for every appointment and block event
  • Written in Elixir, for teams who care about that sort of thing
Read the docs
Request
GET /v1/services/{service_id}/slots
?from=2026-09-01
&until=2026-09-03
Response
{
"data": {
"aggregated_slots": [
{
"count": 3,
"start_at": "2026-09-01T14:00:00Z",
"end_at": "2026-09-01T14:15:00Z"
},
{
"count": 2,
"start_at": "2026-09-01T14:15:00Z",
"end_at": "2026-09-01T14:30:00Z"
}
]
}
}

Case Study
CNY Fertility

Already running patient booking at scale

CNY Fertility, one of the largest fertility networks in the US, had an EMR with no API and a manual, phone-driven scheduling process. Echobind built their patient app on SavvyCal Appointments. Consult wait times went from over a month to two days, with 100% self-service booking, rescheduling, and cancellation.

Read the case study
Parents holding their newborn
1 month → 2 days

Consult wait time at CNY Fertility, before and after.

100%

Self-service booking, rescheduling, and cancellation.

40+ providers

Sub-second availability, a month of slots at a time.

Michael Yared

SavvyCal worked closely with our team every step of the way. The incumbents we tried in the past only got us 70% there and were very pricey.

Michael Yared

CEO, Echobind

From sandbox to production in three steps

  1. Step 01

    Model your practice

    Create services, add providers, set working hours and slot rules. Or do all of it over the API.

  2. Step 02

    Wire in your app

    Embed the booking flow or call the API directly. Listen for webhooks to stay in sync.

  3. Step 03

    Go live under a BAA

    Sign the BAA, migrate your first tenant, and turn off the EHR's scheduler.

Questions engineers ask

Something we didn’t cover? Talk to the founder.