Spectator experience · 2026-05-23

Calendar subscribe is the most underused water polo feature

One link, pasted into Apple Calendar or Google Calendar once, and every game on the schedule shows up automatically — with every future change syncing in the background. The feature has existed for a decade. Almost no water polo club uses it. Here's the case for turning it on, and the 2-minute setup.

Published May 23, 2026 · ~5 min read

Every water polo club has a schedule. Most clubs publish it as a PDF or a Google Sheet, send a link to spectators twice a season, and then field a steady stream of "what time is the Saturday game?" messages from spectators who never bookmarked the link. The solution has existed since iOS 3.0: a public calendar subscribe URL that pushes the schedule directly into every spectator’s calendar app, with every future change syncing automatically. This is a five-minute pitch for the feature.

The "what time is the game?" problem

Here’s a chat thread that happens at every water polo club every weekend:

  1. Coach, Wednesday: "Saturday game at 10 at Pacific Pool."
  2. Spectator A, Thursday: "Is it 10 AM or 10 PM?"
  3. Spectator B, Friday: "Did the time change? I thought we said 11."
  4. Spectator C, Saturday morning: "Are we still on for 10? My kid is getting in the car now."
  5. Coach, Saturday 9:45: "YES 10 AM, at Pacific Pool, in the warm-up area now."

Every coach has lived this. Every spectator has been one of the spectators in this thread. The information is in the schedule PDF, posted on the team website, in the group chat from three weeks ago. None of it reached spectators in the format they actually use to decide whether to put their kid in the car.

The format spectators use is their calendar app. Not the website. Not the group chat. Not the PDF on the fridge. The calendar app on their phone, which they look at to decide what they’re doing this weekend.

If the game isn’t on the calendar, the game might as well not exist.

What "calendar subscribe" actually means

Calendar subscribe is a standard internet feature built into every modern calendar app — Apple Calendar, Google Calendar, Outlook, Fastmail, Proton Calendar, all of them. It’s specified by the iCalendar (.ics) standard, which has been stable since 1998.

The mechanic is simple:

  1. Your website publishes a URL that returns a list of events in .ics format. The URL is public; anyone with it can read.
  2. A user adds that URL to their calendar app as a "subscription."
  3. The calendar app refreshes the URL periodically (every 15 minutes to a few hours, depending on the app and settings).
  4. Every event published at the URL appears on the user’s calendar, color-coded as a separate calendar so they can hide it when they want.
  5. When the schedule changes — game moved from Saturday to Sunday, time pushed back, venue changed — the change reaches every subscriber automatically. No one has to forward anything.

The crucial property: subscription, not import. If a user "imports" a calendar, it’s a one-time copy. Future changes don’t propagate. If a user "subscribes," changes propagate forever. This is the difference that makes the feature valuable.

Why this is different from "share to calendar." Most schedule platforms have a "Save to Google Calendar" button on individual events. That’s one event, one click, no future updates. Calendar subscribe is the whole season, one URL, automatic updates. The UX is identical; the underlying mechanic is fundamentally different.

Why almost no water polo club uses this

The feature has been built into every calendar app since before water polo software existed. Why don’t more clubs use it?

Three reasons:

  1. It’s not the default in most sports admin tools. TeamSnap, SportsEngine, etc. can publish .ics URLs, but the feature is buried in settings most coaches never touch. Most clubs use spreadsheets and PDFs — neither of which generates an .ics feed.
  2. Spectators don’t know to ask for it. If a spectator has never used calendar subscribe for anything else (their kid’s school doesn’t offer it, their employer doesn’t), they don’t know the feature exists. They never ask.
  3. The UX of adding a calendar subscription used to be terrible. Pre-iOS 14, adding a calendar subscription on iPhone required Safari plus a wonky webcal:// URL plus several confirmation dialogs. Modern iOS handles it as a one-tap install from any link.

None of these reasons are good. They’re all friction, and the friction has been mostly eliminated by modern OS updates. The feature is ready to use; it just needs someone to turn it on.

The 2-minute setup (for spectators)

If your club already publishes a calendar subscribe URL (Eggbeater-powered tournaments and leagues do this automatically), here’s how to add it:

#1

Get the calendar subscribe URL

Where to find it: Open the public tournament or league URL. Find the "Subscribe in Calendar" button (usually on the Schedule tab). Copy the .ics URL it generates. It looks like https://ebwp-push.sarah-new.workers.dev/calendar/CODE.ics.

#2

Add the URL to your calendar app

Apple Calendar (Mac): File → New Calendar Subscription, paste the URL, click Subscribe.

Apple Calendar (iPhone): Tap the .ics link in your email or the website; iOS handles the install automatically.

Google Calendar: Settings → Add calendar → From URL, paste the URL.

Outlook: Add calendar → Subscribe from web, paste the URL.

#3

Set refresh frequency

How often to refresh: Apple Calendar: 15 minutes or hourly is ideal. Outlook: same. Google Calendar auto-refreshes every 1-12 hours (you can’t set the exact frequency). For most water polo schedules, this is plenty — schedule changes don’t usually happen in the final hours before a game.

That’s it. From now on, every game on the schedule appears on your calendar with the right time, venue, and opponent. If the coach reschedules a game, the change reaches your calendar within the refresh window. No one has to forward anything; you don’t have to bookmark the website.

The setup for coaches and club admins

If you’re a coach or club admin who wants to publish a calendar subscribe URL for your team’s schedule:

  1. If you’re on Eggbeater: the URL is generated automatically for every tournament and league. Find it under Schedule → Share → Calendar Subscribe. Send it once at the start of the season. You’re done.
  2. If you’re on Google Sheets / a spreadsheet: Sheets can publish a calendar view as .ics. It’s clunky — you have to use Apps Script or a third-party tool — but it works for stable schedules.
  3. If you’re on TeamSnap: their .ics export exists. Find it under Schedule settings. Same caveats as above: it’s buried, but it’s there.
  4. If you’re rolling your own: the .ics format is plain text and easy to generate from any schedule data. Look up the iCalendar spec (RFC 5545) — a few hours of work and you have a feed.

The most important thing: publish it before the season starts and tell spectators about it in the welcome email. Don’t wait until week three to introduce the feature; by then spectators have settled into "I’ll figure out the schedule from the chat" and won’t switch.

What this changes culturally

Calendar subscribe sounds like a small QoL feature. The cultural effect is bigger:

  1. Spectator questions drop ~80%. "What time is the game?" stops being asked because the answer is on every spectator’s calendar already. Coaches save 30-60 minutes a week on communication.
  2. Schedule changes stop being crises. When the host reschedules a game (rain, pool maintenance, ref shortage), the change propagates to every subscriber’s calendar. No more frantic chain of forwarded emails.
  3. Conflicts surface earlier. Spectators seeing the full season on their calendar can flag week 7 conflicts in week 1, instead of week 6.
  4. The schedule becomes a real thing. When it’s a PDF buried in a Google Drive folder, the schedule is theoretical. When it’s on a spectator’s calendar, the schedule is part of how they plan their life.

Eggbeater publishes a calendar subscribe URL automatically

Every tournament and league hosted on Eggbeater has a public .ics URL the moment the schedule is published. Spectators add it to Apple Calendar, Google Calendar, or Outlook in one tap. Every schedule change propagates automatically.

See the spectator guide