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
| Aspect | Cal.com self-hosted | Calendly |
|---|---|---|
| Data control | ✅ Your server | ❌ US cloud |
| Cost | Server only | $10-20/user/month |
| Setup | Docker, moderate | None |
| Features | Core solid, enterprise features limited | Mature |
| 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?
Which calendars can I connect?
Do I need my own SMTP?
Team bookings?
Alternatives?
AI integration?
Sources and further reading
- Cal.com: official website.
- Cal.com Self-Hosting: documentation.
- IRC-Coding.de: programming tutorials.


