Book a call
Tool in production

Cal.com

Scheduling on your own server. Self-service slots for clients, availability management, recurring appointments, reminder emails — a concrete alternative to Calendly and Doctolib for practices, firms and consultancies with confidentiality obligations.

Project profile

Cal.com

Scheduling infrastructure for everyone

As of: June 2, 2026

GitHub stars

45k

Forks

14k

Open issues

1.4k

License

MIT

Latest version

v6.2.0

Language

TypeScript

First release
March 22, 2021
Last commit
May 29, 2026

Third-party source · Wikidata (CC0)

Wikidata profile

Cal.com

Q134218991

License

MIT

What is Cal.com?

Cal.com is an open-source scheduling tool — the alternative to Calendly: clients book slots themselves, availabilities are managed centrally, recurring appointments are possible, reminder emails go out automatically. Cal.com Inc. runs a commercial cloud variant; the software itself (the whole repo) is licensed under MIT.

Unlike Doctolib or Calendly, Cal.com runs entirely on your own server. Every appointment record, every client record, every configuration stays in your own hands. For industries with professional confidentiality (psychotherapy, law, tax advisors, family doctors), that is the decisive difference.

Why a therapy practice self-hosts Cal.com

In a psychotherapy practice the mere appointment falls under Art. 9 GDPR as a 'special category of personal data' — the information 'Mrs Meier has an appointment with Dr. Behrens on Tuesday 10:00' already reveals that Mrs Meier is in psychotherapeutic treatment. This information must not land in a US cloud database with Calendly, even with a DPA.

Doctolib would be a German alternative — but costs €99–199 per therapist per month and comes with aggressive marketing pressure (patient acquisition platform). Cal.com : one container stack on a Hetzner you own, one-off setup, no per-seat licence, no marketing add-ons. The practice saves €5,000–9,000/year and keeps full data sovereignty.

Client case study

Praxisgemeinschaft Behrens & Kollegen

Psychotherapy group practice in Lower Saxony, 5 people — 4 therapists (two CBT, one psychodynamic, one systemic) plus 1 paralegal. Around 240 patients in ongoing treatment. 9 months ago migrated from Excel + Outlook to Cal.com . Today: patients book follow-up sessions themselves, the paralegal has visibility into all 4 calendars, double bookings are history.

Art. 9 GDPR appointment protection

Appointment data in psychotherapy is a 'special category' under Art. 9 GDPR. It must not live in a US cloud DB, not even with a DPA. Own server at Hetzner Frankfurt: trivially demonstrable .

Recurring appointments as a series

Therapy typically runs in 50-minute sessions, recurring every 1–2 weeks over 25–80 sessions. The patient books the whole series once, can shift individual sessions, the rest stays in place.

Individual therapist availability

Every therapist works differently: CBT-therapist Behrens has Wed+Thu off, psychodynamic-therapist Klein only works mornings, paralegal may see every calendar but not edit. Cal.com captures that per user with an individual schedule.

Reminder emails 24h ahead

Patients forget appointments. An automatic reminder email 24 hours before reduces the no-show rate in the practice from 8 % to 2 %. SMS reminder optional via the practice's own Twilio account.

Patient self-service rescheduling

Patients can cancel or reschedule themselves — up to 24 hours before. After that: call the paralegal. Cal.com sends the rescheduling confirmation automatically, the therapist gets a notification.

Practice software integration

The practice uses a German practice-management system (billing, patient records). Cal.com fires a after each booking to that system, which enters the appointment into the patient record. No double entry.

What the practice actually does with it

Eight productive usage patterns from 9 months of Cal.com practice at Behrens & Kollegen. Each pattern replaces a recurring paralegal task or a previous Excel .

Initial appointment booking from the practice website

On behrens-practice.com there is a button 'Book a first session'. The Cal.com embed shows free slots for all 4 therapists for 'Initial 50 min'. The patient books, Cal.com sends a confirmation plus a privacy notice PDF as an attachment.

Recurring sessions as a series

After the initial session: the therapist creates a 'Session 50 min', recurring Tue 10:00 every 2 weeks, 25 appointments. The patient receives an iCal file for all 25 appointments. Rescheduling individual dates does not affect the series.

Availability per therapist

Each defines their own working hours and breaks. Ms Behrens: Mon+Tue+Fri 08:00–17:00, break 12:00–13:00. Cal.com computes free slots from availability minus existing bookings — automatically.

Reminder emails automatic

24 hours before each appointment: an email to the patient with date, time, therapist, address, cancellation deadline. Texts are configured in the Cal.com editor, with variables for patient name and appointment detail.

Patient self-service

With the confirmation the patient gets a rescheduling link. Up to 24 hours before the appointment: reschedule or cancel themselves. Cal.com updates the therapist calendar automatically and sends a notification.

Paralegal overview across all 4 calendars

The paralegal has a 'Manager' role across all 4 therapists — sees in a combined view who is booked when with whom. Can book manually (for patients without internet), cannot edit.

Webhook after booking

On every booking: a to the practice-management system with appointment details. That system enters the appointment into the patient record, automatically creates an initial-anamnesis template (for first session) or a session-note template.

Own mail server for sending

Cal.com does not use Sendgrid or Resend (US cloud) but the practice's own mail server (mail.behrens-practice.com via SMTP). Patients see 'booking@behrens-practice.com' as the sender — familiar and GDPR-compliant.

Core capabilities of Cal.com

What Cal.com delivers technically — and which capabilities really carry a practice setup.

20+ event-type configurations

Per event type (e.g. 'Initial 50 min', 'Follow-up session 50 min', 'Phone consultation 30 min') its own configuration: duration, buffer time, availability, booking form fields, reminder . Typical practice setups have 4–6 event types per therapist.

Buffer times between appointments

Between two 50-minute sessions there is often a 10-minute break — for notes, a short bathroom visit. Cal.com automatically sets the next possible slot 60 minutes after the end of an appointment, no manual slot blocking required.

Multi-user with roles

Team members with different roles: Owner (practice lead), Member (therapists), Manager (paralegal). Permissions: who sees which calendar, who may edit event types, who lands in the team round-robin.

Webhooks for external workflows

On every event (booking, reschedule, cancel, meeting end) a is sent to configurable URLs. Connection to practice software, accounting, your own mail setup, workflows — all possible.

Custom branding

Practice logo, own colours, custom domain (booking.behrens-practice.com instead of cal.com/dr-behrens). Looks not like Cal.com but like the practice's own software — important for patient trust.

REST API for custom code

Cal.com has a complete REST (v2). The practice software can query, create, change appointments programmatically. Even without the layer — direct integration for deeper .

Honest alternatives

If Cal.com is not a fit — what else?

Three alternatives with different focuses. Cal.com is the most pragmatic pick for GDPR-bound industries.

SaaS market leader

Calendly

Calendly LLC, USA

  • + Market leader, very mature product
  • + Out of the box, productive in 5 minutes
  • − US cloud, problematic for Art. 9 GDPR
  • − From $12/user/month, cumulative

DACH healthcare SaaS

Doctolib

Doctolib SAS, FR/DE

  • + GDPR compliant, DACH focus
  • + Includes patient acquisition platform
  • − €99–199/practitioner/month
  • − Marketing pressure, platform lock-in

Office integration

Microsoft Bookings

Microsoft, EU+US cloud

  • + Included in Microsoft 365 Business
  • + Deep Outlook integration
  • − Microsoft cloud (data location choice but MS)
  • − Feature set smaller than Cal.com/Calendly

Rule of thumb: anyone with a GDPR requirement and a container server is well placed on Cal.com . Doctolib is right when patient acquisition via the platform is desired. Calendly remains sensible for uncritical appointments (sales calls, hobby). Microsoft Bookings pays off when Microsoft 365 is already in place and data sitting with MS is acceptable.

Pricing

MIT. Self-hosted. No per-seat cost.

License

MIT — true OSI open-source license for the entire Cal.com code. Self-hosting for any number of users without obligations. Alongside there is a commercial cloud service Cal.com Cloud (from $12/user/month) — not relevant for self-hosting.

Running costs

Four containers (Cal.com + PostgreSQL + Redis + API v2) on your own Docker host. RAM footprint around 1 GB for 5–10 users. A Hetzner VPS (CPX21 from €7/month) covers 50+ users. No per-seat licence.

Effort

Initial setup: 1 day (compose, DNS, own SMTP, branding). Practice configuration with 4 therapist profiles, event types, workflows, practice-software webhook and paralegal training: 2–3 consulting days.

One caveat: Cal.com has no mobile apps (only PWA), and SMS reminders need an own Twilio account (or alternatives like Sipgate). For a practice of 5–15 users typically unproblematic. Cal.com Inc. reserves additional features for Cal.com Cloud (e.g. insights dashboard, app store) — the variant remains complete for the core (scheduling).

Webhook after booking to your own practice software

# Cal.com Settings → Webhooks → Add

URL: https://practice-software.local/api/calcom-hook
Method: POST
Secret: ${WEBHOOK_SECRET}

Events:
  - BOOKING_CREATED
  - BOOKING_RESCHEDULED
  - BOOKING_CANCELLED
  - MEETING_ENDED

Payload example:
{
  "triggerEvent": "BOOKING_CREATED",
  "payload": {
    "type": "50min session",
    "title": "Session with client #4711",
    "startTime": "2026-06-09T10:00:00.000Z",
    "endTime": "2026-06-09T10:50:00.000Z",
    "organizer": {"name": "Dr. Behrens", "email": "..."},
    "attendees": [{"id": "...", "email": "..."}],
    "uid": "abc-123"
  }
}
On every new booking Cal.com fires a webhook with the appointment data to your own practice software — no Calendly hub in the middle. Source: own practice, MIT.

Cal.com self-hosted compose setup

services:
  calcom:
    image: calcom/cal.com:v6.2.0
    container_name: calcom
    restart: unless-stopped
    depends_on: [calcom-db, calcom-redis]
    environment:
      - NEXTAUTH_SECRET=${NEXTAUTH_SECRET}
      - CALENDSO_ENCRYPTION_KEY=${CALENDSO_ENCRYPTION_KEY}
      - NEXT_PUBLIC_WEBAPP_URL=https://booking.behrens-practice.com
      - DATABASE_URL=postgresql://calcom:${DB_PASS}@calcom-db:5432/calcom
      - REDIS_URL=redis://calcom-redis:6379
      - EMAIL_FROM=booking@behrens-practice.com
      - EMAIL_SERVER_HOST=mail.behrens-practice.com
    networks: [frontend, calcom-net]

  calcom-db:
    image: postgres:16
    container_name: calcom-db
    restart: unless-stopped
    environment:
      - POSTGRES_DB=calcom
      - POSTGRES_USER=calcom
      - POSTGRES_PASSWORD=${DB_PASS}
    volumes:
      - ./calcom-db:/var/lib/postgresql/data
    networks: [calcom-net]

  calcom-redis:
    image: redis:7-alpine
    container_name: calcom-redis
    restart: unless-stopped
    networks: [calcom-net]

networks:
  frontend:
    external: true
  calcom-net:
Four containers: Cal.com web, own PostgreSQL, Redis cache, API v2. Leaner than a Calendly migration would suggest. Source: docs.cal.com, MIT license.

Related topics

Cal.com needs a platform and mail delivery

as the container engine, your own mail server for GDPR-compliant delivery, Caddy as the HTTPS layer:

Ready for the next step?

Free intro call, no strings attached. In 30 minutes you'll know whether and how AI can help your business.

Book a callBAFA funding