Deploy Sync Google, Outlook & iCloud Calendars — Self-Host Keeper.sh on Railway
Self-host Keeper.sh: sync Google, Outlook & iCloud. MCP server included.
Just deployed
/var/lib/postgresql
Deploy and Host Keeper.sh on Railway

Keeper.sh is an open-source calendar sync platform with 1.1k+ GitHub stars that solves the double-booking problem — connect Google Calendar, Microsoft Outlook, Office 365, iCloud, CalDAV, and ICS feeds into a single unified view where your availability is always accurate across every platform. It also ships as an MCP server, so your local AI agents can read and manage your schedule directly without API keys or third-party integrations.
Running three calendars across Google, Outlook, and iCloud without Keeper means you're one ignored invite away from a double-booking. Self-host on Railway for ~$5–10/month — no Calendly subscription, no per-seat fees, full ownership of every event.
What This Template Deploys
| Service | Purpose |
|---|---|
| Keeper.sh Standalone v2.10 | All-in-one container — web UI, API, cron scheduler, background worker, and Caddy reverse proxy in a single image behind one port |
| PostgreSQL 17 | External persistent database — calendar sync state, user accounts, OAuth tokens, and event data survive every redeploy |
The standalone image bundles cron, worker, web, API, Redis, and Caddy internally. Using an external Railway PostgreSQL instance ensures all calendar data persists independently of the container across redeploys and version updates.
About Hosting Keeper.sh
Managing multiple calendars across Google, Outlook, and iCloud without sync means your availability in each platform is always slightly out of date. Keeper.sh solves this by running a background sync process that propagates events across all connected calendar sources — when something is blocked in Google, it appears blocked in Outlook and iCloud within seconds.
Without a managed host, you're managing Docker Compose, OAuth credentials for Google and Microsoft, SSL, and 24/7 process uptime. Railway provisions all of it automatically.
Typical cost: ~$5–10/month on Railway's Hobby plan. Calendly Teams costs $16/user/month. Motion costs $34/month. Keeper.sh on Railway gives you multi-provider calendar sync at flat compute cost with full data ownership.
Deploy in Under 5 Minutes
- Click Deploy on Railway — Keeper.sh and PostgreSQL build automatically (~2–3 minutes)
- Generate two secrets and set them in Variables:
BETTER_AUTH_SECRET= ENCRYPTION_KEY= - Set
BETTER_AUTH_URLto your Railway public domain - Set
DATABASE_URLto your Railway PostgreSQL connection string - Add OAuth credentials for Google (
GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET) and/or Microsoft (MICROSOFT_CLIENT_ID,MICROSOFT_CLIENT_SECRET) — optional but required for those providers - Open your Railway URL — connect your first calendar and sync begins immediately
No SSH. No Docker Compose. No reverse proxy setup.
Common Use Cases
- Fix double-bookings across Google, Outlook, and iCloud — Keeper.sh syncs all three in real time so accepting a meeting in Google immediately blocks the slot in Outlook and iCloud; no manual checking across platforms required
- Self-hosted alternative to Calendly — manage your availability from a single unified calendar without paying $16/user/month or routing your schedule data through Calendly's servers
- AI agent calendar access via MCP server — Keeper.sh ships as an MCP server; your Claude, Cursor, or any local AI agent reads your real-time schedule and can create, modify, or cancel events directly without third-party calendar API integrations
- Personal CalDAV and ICS aggregation — connect any CalDAV-compatible calendar source or ICS feed alongside Google and Outlook for a unified view across all personal and work calendars
- Privacy-first calendar sync — all OAuth tokens, event data, and availability information stay in your Railway PostgreSQL instance; no third-party sync service processes your schedule
- Remote team scheduling without per-seat tools — deploy one Keeper.sh instance for your team; each member connects their own calendar sources for unified availability without per-seat scheduling software fees
Configuration
| Variable | Required | Description |
|---|---|---|
BETTER_AUTH_SECRET | ✅ Required | Authentication session secret — generate with openssl rand -base64 32 |
ENCRYPTION_KEY | ✅ Required | Calendar data encryption key — generate with openssl rand -base64 32 |
BETTER_AUTH_URL | ✅ Required | Your Railway public domain — e.g. https://your-app.up.railway.app |
DATABASE_URL | ✅ Required | PostgreSQL connection string — use Railway reference variable from PostgreSQL service |
GOOGLE_CLIENT_ID | Optional | Google OAuth client ID — required for Google Calendar sync |
GOOGLE_CLIENT_SECRET | Optional | Google OAuth client secret |
MICROSOFT_CLIENT_ID | Optional | Microsoft OAuth client ID — required for Outlook/Office 365 sync |
MICROSOFT_CLIENT_SECRET | Optional | Microsoft OAuth client secret |
PORT | Auto-set | Railway injects the port automatically |
> Google OAuth scopes required: https://www.googleapis.com/auth/calendar
> and https://www.googleapis.com/auth/userinfo.email
>
> Microsoft OAuth scopes required: Calendars.ReadWrite, User.Read, offline_access
>
> You only need OAuth credentials for the providers you want to connect. iCloud uses
> CalDAV credentials (no OAuth app required).
Keeper.sh vs. Calendar Sync Alternatives
| Keeper.sh (Railway) | Calendly Teams | Motion | Fantastical | |
|---|---|---|---|---|
| Monthly cost | ~$5–10 flat | $16/user | $34/month | $4.99/device |
| Google + Outlook + iCloud sync | ✅ All three | ✅ Read-only | ✅ Yes | ✅ Yes |
| CalDAV + ICS support | ✅ Yes | ❌ No | ❌ No | ✅ Yes |
| MCP server for AI agents | ✅ Built-in | ❌ No | ❌ No | ❌ No |
| Data ownership | ✅ Your instance | ❌ Calendly servers | ❌ Motion servers | ❌ Fantastical servers |
| Self-hostable | ✅ Yes | ❌ No | ❌ No | ❌ No |
| Open source | ✅ Yes | ❌ No | ❌ No | ❌ No |
| Per-seat fees | ✅ None | ❌ Yes | ❌ Yes | ❌ Per device |
Dependencies for Keeper.sh Hosting
- Railway account — Hobby plan (~$5–10/month) for Keeper.sh and PostgreSQL
- Google Cloud OAuth app (free — required only for Google Calendar)
- Microsoft Azure app registration (free — required only for Outlook/Office 365)
- iCloud: no OAuth app — uses Apple ID app-specific CalDAV password
Deployment Dependencies
- Keeper.sh GitHub Repository — source and releases
- Keeper.sh Package — Docker image releases
- Google Cloud Console — create OAuth credentials for Google Calendar
- Microsoft Azure App Registration — create OAuth credentials for Outlook
Implementation Details
Deploys ghcr.io/ridafkih/keeper-standalone:2.10 — a single container with the web app,
API, cron, worker, Redis, and Caddy. Only the web interface is exposed via Railway's HTTPS
proxy. An external Railway PostgreSQL instance handles persistence — calendar sync state,
OAuth tokens, and event data survive all redeploys independently of the container.
Frequently Asked Questions
What calendar sources does Keeper.sh support? Google Calendar (via OAuth), Microsoft Outlook and Office 365 (via OAuth), iCloud (via CalDAV app-specific password), any CalDAV-compatible calendar server, and ICS feed URLs. You can connect any combination of these simultaneously from a single Keeper.sh instance.
How does the MCP server work? Keeper.sh exposes an MCP (Model Context Protocol) server endpoint. Configure your AI assistant (Claude Desktop, Cursor, or any MCP-compatible client) to point at your Railway Keeper.sh URL. The AI agent can then read your calendar, check availability, and create or modify events directly — without you manually sharing calendar credentials.
How much does it cost compared to Calendly? Keeper.sh on Railway runs at ~$5–10/month for the full stack. Calendly Teams costs $16/user/month — for a 3-person team that's $48/month. Motion costs $34/month. iCloud family sharing doesn't sync with Google. Keeper.sh solves the multi-calendar problem at flat compute cost with no per-user fees.
Do I need to create OAuth apps for every calendar provider? Only for Google and Microsoft. iCloud uses CalDAV credentials (an Apple app-specific password) — no OAuth registration required. You only need to create OAuth apps for the providers you actually want to connect.
Does calendar data leave my infrastructure? No. OAuth tokens, calendar events, and availability data are stored in your Railway PostgreSQL database. Keeper.sh syncs directly between calendar providers using your credentials — no event content passes through any third-party sync service.
How do I update Keeper.sh to a newer version?
Update the image tag in Railway service settings to the latest release (e.g.
ghcr.io/ridafkih/keeper-standalone:2.11) and redeploy. Your PostgreSQL data — sync
state, OAuth tokens, and calendar data — is unaffected by updates.
Why Deploy and Host Keeper.sh on Railway?
Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.
By deploying Keeper.sh on Railway, you get a self-hosted calendar sync platform — Google, Outlook, iCloud, and CalDAV unified with an AI-ready MCP server — at ~$5–10/month flat with no per-seat fees and full ownership of your calendar data.
Template Content