How to self-host Cal.com in 2026: own your scheduling
Calendly charges per user. Cal.com Cloud charges per user. The self-hosted Community Edition is free — you pay only for the server. Three ways to do it, including a 3-minute deploy on livemy.app.
Dmytro Chervonyi
Co-founder & CMO, livemy.app
Last updated
TABLE OF CONTENTS
item

AI Summary
Cal.com is the open-source Calendly alternative — 36,000 GitHub stars, full scheduling feature set, multi-calendar integration. Cal.com Cloud charges $12/user/month (Team) or $37/user/month (Organization). The self-hosted Community Edition is free — you pay only for the server, around $5–20/month on a VPS or $20/month flat on livemy.app. The tricky part isn't the deployment, it's the Google Calendar OAuth setup — plan 30–45 minutes for that the first time. This guide walks the three self-host paths, the essential environment variables (NEXTAUTH_SECRET, CALENDSO_ENCRYPTION_KEY, GOOGLE_API_CREDENTIALS), the 3-minute livemy.app deploy, and the five things that quietly break self-hosted Cal.com.
What Cal.com is and why people self-host it
Cal.com is open-source scheduling — think Calendly, but free, customizable, and run on your own server. Around 36,000 GitHub stars in 2026, full feature set including team scheduling, round-robin, payment-gated bookings, and Google/Outlook/iCloud calendar integration.
Three reasons to self-host instead of using Cal.com Cloud.
Per-user pricing on Cloud. Cal.com Team is $12/user/month; Organization is $37/user/month. A 10-person sales team running team scheduling lands at $120–$370/month. Self-hosted is flat regardless of seat count.
Custom domain + branding. Cloud's custom domain is part of the paid plans. Self-hosted is yours from day one — the booking page lives on book.yourdomain.com with your branding.
Data sovereignty. Calendar data, contact info, payment metadata — all on your server. Important for compliance-heavy teams and any team uneasy about scheduling SaaS holding customer PII.
Three ways to self-host Cal.com
Path A: Docker Compose on your own VPS
Cal.com's official Docker image is at calcom/cal.com on DockerHub. The team also publishes a reference docker-compose.yml in the main repo. Spin up a VPS (4 GB RAM recommended), install Docker, drop the Compose file, configure environment variables, set up nginx + SSL.
The catches. The Cal.com docs themselves note that self-hosting requires "advanced knowledge of server administration, database management, and securing sensitive data." Realistic time-to-first-deploy: 2–6 hours, plus the 30–45 minutes for Google Calendar OAuth.
Path B: Managed Docker host (Coolify, Dokploy, Railway)
Railway and Coolify both ship Cal.com as a one-click template. Cleaner setup than raw Compose. You still do the Google OAuth dance, but the infra parts are handled.
Path C: livemy.app one-click deploy
Pick the Cal.com template, point your domain, ship. livemy.app provisions PostgreSQL, handles SSL, applies daily backups.
The good. Three-minute deploy. $20/month flat. The Google OAuth setup is still on you (this is a Google requirement, not a host one), but everything else is handled.
From zero to Cal.com on livemy.app (about 3 minutes)
Step 1: Sign up at livemy.app, pick Maker
Go to livemy.app, click Start free, pick Maker ($20/month) for always-on. Free-tier sleep would delay reminder emails and webhook deliveries.
Step 2: Deploy from the Cal.com template
In the dashboard: New project → Template → Cal.com. livemy.app pulls the official image, provisions PostgreSQL, sets up volume storage.
Step 3: Configure the essential environment variables
Under Project Settings → Environment Variables:
NEXTAUTH_URL— your full public URL withhttps://NEXTAUTH_SECRET— a 32+ character random string (used to sign auth tokens)CALENDSO_ENCRYPTION_KEY— a 32-character random string (used to encrypt credentials stored in the database)DATABASE_URL— PostgreSQL connection (auto-populated by livemy.app)
Plus SMTP variables for email delivery (Mailgun, Postmark, Resend, SendGrid — any provider works).
Step 4: Deploy and complete the Cal.com setup
Typical deploy time: 3–5 minutes (Cal.com has a heavy initial Prisma migration). When status flips to Live, visit the URL, create the owner account, configure your first availability window.
Step 5: Point your domain
Add custom domain, update DNS, wait for SSL. Update NEXTAUTH_URL to the new domain and redeploy — NextAuth uses it for callback URLs.
Step 6: Set up Google Calendar OAuth (the 30-45 minute part)
This is the hardest step in any Cal.com self-host. There's no way around it because Google requires per-app OAuth credentials.
Go to Google Cloud Console, create a new project
Enable the Google Calendar API
Configure the OAuth consent screen (Internal or External, app name, scopes for
calendar.eventsandcalendar.readonly)Create OAuth client ID credentials. Add both
https://yourdomain.com/api/integrations/googlecalendar/callbackandhttps://yourdomain.com/api/auth/callback/googleas authorized redirect URIsDownload the JSON credentials file. Copy the entire JSON contents into the
GOOGLE_API_CREDENTIALSenvironment variable
Redeploy. Connect a calendar from inside Cal.com to confirm OAuth works. Repeat the OAuth dance for Outlook / iCloud if your team uses them.
Five things that quietly break self-hosted Cal.com
1. NEXTAUTH_URL doesn't match the public URL
NextAuth uses this to build callback URLs. Mismatch — say it's http://localhost:3000 in dev and you forgot to update it — and Google OAuth fails with "redirect URI mismatch" because Google sees an unexpected callback.
Fix. Set NEXTAUTH_URL to the final public URL with https:// and no trailing slash. Redeploy. Re-test one OAuth connection.
2. CALENDSO_ENCRYPTION_KEY changes lock all stored credentials
Cal.com encrypts third-party OAuth tokens (Google, Outlook) with this key. Change the value after users have connected calendars and every connection breaks — the encrypted tokens in Postgres can no longer be decrypted.
Fix. Set CALENDSO_ENCRYPTION_KEY once at first deploy, save it somewhere secure, never change it.
3. Google OAuth redirect URI not exact
Google rejects any redirect URI that doesn't match exactly — including trailing slash, http vs https, and any extra path segments. The Cal.com docs list both required URIs; you need both, and both have to be byte-exact.
Fix. Copy the redirect URIs from your live Cal.com instance directly into Google's OAuth client config. After custom domain changes, update the URIs in Google Cloud Console.
4. Email delivery requires SMTP credentials
Cal.com sends confirmation emails, calendar invites, reminders. Without SMTP variables set, bookings happen but the invitee never gets the calendar invite or confirmation — you get a Cal.com that quietly looks broken.
Fix. Set EMAIL_SERVER_HOST, EMAIL_SERVER_PORT, EMAIL_SERVER_USER, EMAIL_SERVER_PASSWORD, EMAIL_FROM. Mailgun, Postmark, Resend all work. Test by creating a booking with a different email address.
5. Webhooks fire to NEXTAUTH_URL
Cal.com's webhook system signs and delivers events to your endpoints using the URL configured in NEXTAUTH_URL. If you set up webhooks against the temporary subdomain and then changed to a custom domain, the webhook deliveries succeed but the signing URL is wrong, which trips signature verification on the receiver side.
Fix. After any URL change, regenerate webhooks (Cal.com dashboard → Settings → Webhooks → edit each one) to refresh the signing payload.
Cost: Cal.com Cloud vs self-hosted
Real numbers for a small team of 10 doing sales scheduling.
Cal.com Cloud Team: $12/user × 10 = $120/month
Cal.com Cloud Organization: $37/user × 10 = $370/month (this tier adds SSO, advanced reporting, custom branding)
Self-hosted on a $10 VPS: $10/month flat + email provider ($0–10) = $10–20 total
Self-hosted on livemy.app: $25/month flat ($20 Maker + $5 backups) + $0–10 email = $25–35 total
For a 10-person team, self-hosting on livemy.app saves $85–$345/month. Annual savings: $1,000–$4,000.
FAQ
Is self-hosted Cal.com free?
The software is free under the AGPL license. You pay for the server, email delivery, and any optional Google/Outlook/iCloud OAuth fees (none for personal use). Realistic monthly cost: $10–35/month total. Unlimited users at that flat cost — the big win vs Cal.com Cloud's per-user pricing.
Do I need Google Calendar OAuth for self-hosted Cal.com?
Only if you want users to connect their Google Calendars (which most do). Cal.com works without it for booking only, but real calendar sync requires the OAuth setup. The 30–45-minute setup is a one-time job; once done it covers all users.
Can I migrate from Calendly to self-hosted Cal.com?
Yes. Cal.com has an official Calendly importer that pulls event types, availability, and team data. Bookings on Calendly stay there (no migration for historical bookings), but going forward, new bookings happen on your self-hosted Cal.com. Plan for 1–2 hours for a small team.
Can multiple users share one self-hosted Cal.com?
Yes — unlimited users on one instance. This is the big win over Cal.com Cloud, which charges per user. A 50-person organization runs on the same $25/month livemy.app instance as a solo founder.
Will self-hosted Cal.com auto-update?
On livemy.app, you can opt into auto-update or pin to a specific version. Cal.com ships frequent updates — weekly minor releases, occasional larger ones. Self-hosting means you control the upgrade cadence; auto-update on a managed platform like livemy.app keeps you current without manual work.
Self-host Cal.com — unlimited users, flat $25/month
If you're a small team paying Calendly or Cal.com Cloud per seat, self-hosting drops the per-user math. The cheapest path is a $10 VPS. The fastest path is livemy.app's Cal.com template — just budget the 30–45 minutes for Google OAuth.
→ Start free on livemy.app · Cal.com template with Postgres provisioned, custom domain, SSL, backups, all on Maker at $20/month flat.
Stuck on the Google OAuth setup? Email hello@livemy.app with the error message. Replies inside one business day.
Read next

Dmytro Chervonyi
,
Co-founder & CMO, livemy.app
Co-founder & CMO at livemy.app. 12 years as a CMO scaling SaaS from $0 to $10M+ ARR across marketing, sales, and infra products and tools. Now building the missing step between AI-built code and a live URL — for non-developers who’d rather ship than learn DevOps.


