---
title: "Deploy Sync Google, Outlook & iCloud Calendars — Self-Host Keeper.sh on Railway"
description: "Self-host Keeper.sh: sync Google, Outlook & iCloud. MCP server included."
category: "Automation"
url: https://railway.com/deploy/keeper
---

# Deploy Sync Google, Outlook & iCloud Calendars — Self-Host Keeper.sh on Railway

Self-host Keeper.sh: sync Google, Outlook & iCloud. MCP server included.

**[Deploy Sync Google, Outlook & iCloud Calendars — Self-Host Keeper.sh on Railway on Railway](https://railway.com/template/keeper)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/keeper/manifest.json

- **Creator:** SilverBanana
- **Category:** Automation
- **Total deploys:** 1

## Template content

### Keeper

- **Image:** ghcr.io/ridafkih/keeper-standalone:2.10
- **Public domain:** Yes

## Documentation

# Deploy and Host Keeper.sh on Railway

![Keeper.sh self-hosted calendar sync dashboard](https://raw.githubusercontent.com/ridafkih/keeper.sh/main/applications/web/public/open-graph.png)

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

1. Click **Deploy on Railway** — Keeper.sh and PostgreSQL build automatically (~2–3 minutes)
2. Generate two secrets and set them in Variables:
   ```
   BETTER_AUTH_SECRET=
   ENCRYPTION_KEY=
   ```
3. Set `BETTER_AUTH_URL` to your Railway public domain
4. Set `DATABASE_URL` to your Railway PostgreSQL connection string
5. 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
6. 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 |

&gt; **Google OAuth scopes required:** `https://www.googleapis.com/auth/calendar`
&gt; and `https://www.googleapis.com/auth/userinfo.email`
&gt;
&gt; **Microsoft OAuth scopes required:** `Calendars.ReadWrite`, `User.Read`, `offline_access`
&gt;
&gt; You only need OAuth credentials for the providers you want to connect. iCloud uses
&gt; 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](https://github.com/ridafkih/keeper.sh) — source and releases
- [Keeper.sh Package](https://github.com/ridafkih/keeper.sh/pkgs/container/keeper-standalone) —
  Docker image releases
- [Google Cloud Console](https://console.cloud.google.com) — create OAuth credentials for
  Google Calendar
- [Microsoft Azure App Registration](https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps) —
  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.

## Similar templates

- [N8N Main + Worker](https://railway.com/deploy/n8n-main-worker) — Deploy and Host N8N with Inactive worker.
- [Evolution API with n8n](https://railway.com/deploy/evolution-api-with-n8n) — Automate WhatsApp workflows with Evolution API, n8n, and Postgres.
- [Postgres Backup](https://railway.com/deploy/postgres-s3-backups) — Cron-based PostgreSQL backup to bucket storage

Open this page in a browser: https://railway.com/deploy/keeper
