Your sheet is the source of truth

Stop emailing schedule updates.

CalRelay turns any spreadsheet into a live, subscribable calendar feed. Edit your sheet — everyone’s calendar stays in sync. No exports, no re-sends, no “final_v3” attachments.

No account needed — see your calendar first. Free plan, no credit card. Subscribers never need an account.

Works withGoogle Sheetsany CSV URLpasted tablesAirtable, Notion & Excel — on the roadmap

Built for league coordinators, team managers, ops leads, run club captains, and school volunteers — anyone whose schedule already lives in a spreadsheet.

Share link to live calendar in three minutes

No OAuth dance, no add-ons to install, nothing for your subscribers to sign up for.

1

Paste a link to your schedule

A Google Sheet share link (“anyone with the link can view”) is the usual path — but any public CSV URL or a pasted table works just as well.

2

Map columns and preview

Tell CalRelay which columns are the title, date, and location — we suggest a mapping from your headers. Preview every parsed event before anyone subscribes.

3

Send one link to your roster

Every feed gets a clean subscribe page with one-click buttons for Apple, Google, and Outlook. They tap once and stay in sync forever.

A live feed, not another stale file

One-shot CSV converters give you a snapshot that’s wrong by next week.CalRelay keeps polling your sheet, so calendars follow the schedule — not the other way around.

🔄

Always in sync

We poll your sheet automatically and regenerate the feed. Change a row, and subscribers’ calendars update — no re-export, no re-send.

📲

One-click subscribe page

Big, obvious buttons for Apple Calendar, Google Calendar, and Outlook. Nobody copies and pastes a feed URL, ever.

🌍

Timezones done right

Explicit feed timezone, optional per-row overrides, and all-day events that land on the right day in every zone. The #1 source of calendar bugs, handled.

🩺

Feed health panel

See exactly which rows parsed, which didn’t, and why — with the raw cell values. Nothing is ever silently guessed or silently dropped.

🛡️

Never serves garbage

Someone renamed a column? We freeze the feed at its last good state, flag it, and email you a one-click fix — instead of blanking 200 calendars.

🪪

Edits update, never duplicate

Every row gets a stable event ID, so changing a time updates the existing event in subscribers’ calendars rather than creating a copy.

Simple pricing

Free to start. Upgrade when your season depends on it.

Free

$0
forever
  • 1 feed, up to 100 events
  • Syncs every 60 minutes
  • Hosted subscribe page
  • Feed health panel
Start free

Team

$29/mo
for organizations
  • 50 feeds, unlimited events
  • Priority sync
  • Shared workspace
  • Everything in Pro
Start Team

Questions, answered honestly

Do my subscribers need a CalRelay account?
No. Subscribers click one button on your subscribe page and never touch CalRelayagain. Their calendar app checks the feed on its own from then on.
How fast do subscribers see my changes?
CalRelay refreshes your feed within minutes of a change. Apple Calendar and Outlook subscribers typically see updates within about 15 minutes.
Google Calendar polls external feeds on its own schedule and can take up to 24 hours to show changes — that’s a Google limitation every feed provider shares. We tell you (and your subscribers) this up front instead of letting you find out on game day.
Does my spreadsheet have to be public?
Your sheet needs link-sharing turned on (“anyone with the link can view”) so CalRelay can read it. It’s never listed anywhere, andCalRelay never gets edit access or asks for your Google login. If you ever turn sharing off, we pause the feed at its last good state and email you.
What happens if someone breaks the sheet?
If a mapped column is renamed or deleted, CalRelay keeps serving the last valid calendar, flags the problem in your feed health panel, and emails you a one-click path to fix the mapping. Your roster never sees an empty calendar.
What date formats can it read?
Real-world ones: 3/4/26, Mar 4, 2026-03-04 7pm, March 4th @ 7. You pick your locale (month-first vs day-first) at setup, and anything ambiguous is shown to you with the raw value instead of being guessed.

Your schedule already exists.

Make it a calendar your whole roster subscribes to — in about three minutes.

Create your feed — free