Skip to content
BotServBotServ
Cal.comCalendlyAppointment SchedulingSelf-HostingOpen SourceCalendar

Cal.com Self-Hosted: Calendly Alternative

Self-host Cal.com: Open-source appointment scheduling as Calendly alternative. Docker setup, calendar sync, workflow automation.

S

schutzgeist

3 min read
Cal.com Self-Hosted: Calendly Alternative

Cal.com self-hosted: Calendly alternative for appointment booking

What this article covers

  • What Cal.com is: the leading open-source appointment scheduling platform.
  • Self-hosting with Docker, calendar integration (CalDAV, Google, Outlook).
  • Event types, availability, team bookings.
  • Workflow automation: webhooks, n8n, confirmations.
  • When self-hosting makes sense versus Cal.com Cloud.

Introduction

Cal.com is the open-source answer to Calendly: shareable booking links, availability management, calendar sync, team round-robin scheduling. When self-hosted, you maintain full control over booking data, which matters for GDPR compliance since appointment details typically qualify as personal data.

Self-hosting requires more effort than spinning up a single container (Next.js app + Postgres + Prisma), but it’s manageable and often the GDPR-compliant solution for consultants, agencies, and service providers.

Common use cases

  • Consultation scheduling: clients book their own slots, your calendar fills automatically.
  • Team scheduling: round-robin distribution across team members.
  • Recruiting: interview scheduling without email back-and-forth.
  • Support slots: customers book support windows.
  • AI workflows: n8n responds to bookings to send reminders, generate prep documents, update CRM records.

Installation: Docker (honestly, moderate complexity)

Cal.com is a Next.js application, and the official self-hosting approach uses Docker with a custom build:

git clone https://github.com/calcom/docker.git calcom-docker
cd calcom-docker
cp .env.example .env
# Edit .env: NEXTAUTH_SECRET, DATABASE_URL, etc.
docker compose up -d

Key .env variables:

NEXTAUTH_SECRET=random-long-string
CALENDSO_ENCRYPTION_KEY=random-long-string-32-chars
DATABASE_URL=postgresql://calcom:password@db:5432/calcom
NEXT_PUBLIC_WEBAPP_URL=https://calendar.your-domain.com
EMAIL_FROM=calendar@your-domain.com
EMAIL_SERVER_HOST=smtp.your-mailserver.com
EMAIL_SERVER_PORT=587
EMAIL_SERVER_USER=...
EMAIL_SERVER_PASSWORD=...

After startup: create an admin account, define event types, connect calendars.

Calendar integration

  • CalDAV: Nextcloud Calendar, ownCloud, Radicale; the natural choice for self-hosters.
  • Google Calendar: OAuth integration.
  • Outlook/Exchange: Microsoft 365.
  • Multiple calendars: availability syncs across all calendars with conflict detection.

Event types and availability

  • Event types: “30-min call”, “60-min consultation”, “initial meeting”, each with its own duration, buffer time, and location type (video link, phone, in-person).
  • Availability: weekdays, time slots, exceptions, and buffers between appointments.
  • Team events: collective (everyone must be available) or round-robin (rotating assignment).
  • Booking page: your public link at calendar.your-domain.com/you.

Automation with n8n

Cal.com sends webhooks when bookings are created or cancelled:

Cal.com webhook: BOOKING_CREATED
    │
    ▼
n8n: extract data (name, time, notes)
    │
    ├─→ Twenty CRM: create contact/deal
    ├─→ Ollama: generate personalized prep notes
    ├─→ Email: send confirmation with agenda
    └─→ Telegram: internal notification
# In n8n HTTP Request node or custom script:
# Cal.com API is RESTful - fetch bookings:
import requests
r = requests.get(
    "https://calendar.your-domain.com/api/v1/bookings",
    headers={"Authorization": "Bearer YOUR_API_KEY"})

Practical example: prep agent

# On new booking -> Ollama writes prep notes
booking = webhook_payload["booking"]
prep = ollama_client.chat(model="llama3.1:8b", messages=[{
    "role": "user",
    "content": f"Generate 5 prep points for an initial meeting with "
               f"{booking['name']} ({booking.get('notes','no notes provided')})."
}])
# Store as a comment on the booking or internal note

Security and data protection

  • GDPR: booking data on-premise, no US vendor, no data processing agreement issues.
  • Email delivery: use your own SMTP for confirmations, see Self-Hosting.
  • HTTPS: booking page must use TLS for trust and security.
  • Rate limiting: since the booking page is public, add rate limits and spam protection.

Cal.com vs. Calendly

AspectCal.com self-hostedCalendly
Data control✅ Your server❌ US cloud
CostServer only$10-20/user/month
SetupDocker, moderateNone
FeaturesCore solid, enterprise features limitedMature
GDPR✅ Straightforward⚠️ Data processing agreement needed

Further reading

  • IRC-Coding.de: Programming tutorials on webhooks and calendar APIs.
  • n8n: Workflow automation for bookings.
  • Twenty CRM: sync bookings to your CRM.
  • Nextcloud: self-host CalDAV calendars.
  • Docker: container fundamentals.

Key takeaways:

  • Cal.com is open-source Calendly: booking pages, calendar sync, team scheduling.
  • Self-hosted means GDPR-friendly, booking data stays off US servers.
  • Setup is more involved (Next.js + Postgres) than a single container.
  • Webhooks plus n8n turn it into an automation building block.
  • The right choice for consultants and service providers with data protection requirements.

FAQ

Is Cal.com self-hosted difficult?

Moderately. It’s a Next.js app with Postgres and Prisma, not a single container. The official Docker repository helps, but updates and email setup require ongoing maintenance. If you just want simple booking functionality, Cal.com Cloud is an option.

Which calendars can I connect?

CalDAV (Nextcloud, Radicale), Google Calendar, Outlook/M365, and Apple Calendar via CalDAV. You can connect multiple calendars simultaneously for conflict checking.

Do I need my own SMTP?

Yes, for booking confirmations and reminders. You’ll need an SMTP server, either your own mail server, Postfix, or an external provider. Without SMTP, you won’t send confirmations.

Team bookings?

Yes. Collective (everyone must be available) and round-robin (rotating assignment) are core features. Great for support teams and sales.

Alternatives?

Easy!Appointments (lighter, PHP-based), Fossil or cron-based tools, or Nextcloud Appointments if you already run Nextcloud. Cal.com is the most mature option.

AI integration?

Via webhooks: n8n or a custom script responds to bookings. Ollama can write prep notes, answer FAQs, or draft follow-ups. Cal.com also has an API for direct integration.

Sources and further reading

Back to Blog
Share:

Related Posts