Eggbeater Water Polo — water polo club management app League Setup Walkthrough
← Eggbeater

Set up your water polo league, step by step

A guided walkthrough from empty admin panel to live spectator URL with auto-syncing Google Sheets workbook. Designed for a first-time league admin — read top to bottom, ~30 minutes to complete.

Walkthrough

  1. Subscribe to the league SKU
  2. Open the Leagues tab
  3. Run the setup wizard
  4. Add teams and rosters
  5. Generate or import the schedule
  6. Configure phases
  7. Set points and tiebreakers
  8. Publish to spectators
  9. Export to Google Sheets
  10. Score your first game
1

Subscribe to the league SKU

Open eggbeater.app/admin.html and sign in with the Google account that owns your club. Click the Purchases tab in the sidebar.

Pick the right SKU for your league:

  • Club League — $99/season — Your club's own internal or recreational league. All teams belong to your club.
  • Multi-Club League — $249/season — Teams from multiple clubs (regional leagues, cross-club competitions). Inherits every Club League feature plus visiting-club spectator access and cross-club standings.

Stripe handles the checkout. Cancel anytime — the subscription is per season, not annual. Once payment clears, the Leagues tab in the sidebar shows a crown 👑 instead of a lock 🔒.

If you're unsure: start with Club League. You can upgrade to Multi-Club mid-season without losing data — Eggbeater promotes the same league pkg into the higher tier.
2

Open the Leagues tab

In the admin sidebar, click Leagues. You'll see a setup card at the top with two primary buttons:

  • Set up league → launches the wizard for a brand-new league
  • 📥 Import from Sheet pulls an existing schedule from Google Sheets
  • 📋 Import league JSON loads a complete league config from a JSON file (used for migrations and seed scripts)

Below the setup card you'll find the empty states for Live Dashboard, Live Game Console, Standings, Player Stats, and Past Leagues. They fill in as you complete the next steps.

Heads up: the Director tab in the sidebar is for tournament workspaces. When this club has a league configured, Director shows a banner pointing back here. Don't try to manage a league from the Director tab.
3

Run the setup wizard

Click Set up league →. The wizard is one scrolling form. Fill in:

  • League name — e.g. "Bay Area Adult Water Polo League"
  • Season label — e.g. "Spring 2026" or "2026 Winter Season"
  • League ID — auto-generated from the name; you can edit it before publishing
  • Display language — sets the default language for spectators (English, Spanish, or French). Spectators land in your chosen language automatically; the picker still lets them switch.

Save and close at any point — your wizard draft persists locally until you commit.

4

Add teams and rosters

In the wizard's Divisions & Teams step, add at least one division (most leagues use one — e.g. "Adult" or "Open"). For each division, list every team by name.

Rosters can be loaded two ways:

  • League Rosters card on the Leagues tab — paste a CSV with columns Team, Cap #, First Name, Last Name (optional Division)
  • Google Sheets URL — pull directly from a tab in the same sheet that holds your schedule

Roster entries flow into:

  • The Alignements writeback tab (with per-player stats columns)
  • The cap# → name auto-resolve in the per-game edit modal (so you don't have to remember who #11 is when entering saves)
  • The player-stat aggregator for W-T-L attribution
5

Generate or import the schedule

Two paths depending on whether you have an existing schedule:

Auto-generate

  • In the wizard's Format step, pick: Round Robin, Single Elimination, Double Elimination, Swiss, Weekly Pods, or Pools-to-Bracket
  • In Schedule preset, set the game day (e.g. Thursdays), start times (e.g. 20:00 and 21:00), pool/court names, and minimum rest between same-team games
  • Click Generate Schedule → and the wizard materializes every match with date, time, and venue

Import from Google Sheets

  • Click 📥 Import from Sheet on the Leagues tab
  • Paste the sheet URL or CSV content
  • Map columns (Eggbeater auto-detects most standard headers)
  • Preview the first 5 rows, then Import N games
Eggbeater saves the column mapping as a template so you can re-use it next season without re-mapping.
6

Configure phases

Leagues with multiple stages — preseason exhibition, regular season, playoffs — should configure phases so standings and stats segment correctly.

Each phase has:

  • ID — e.g. regular-season, playoffs
  • Name — display label (e.g. "Regular Season", "Playoffs", or in your league's working language)
  • Typeregular, playoff, preseason, or exhibition
  • Counts toward standingstrue for regular season + playoffs; false for preseason and exhibition

Each game has a phaseId. Edit a game (✏️ Edit button) to change which phase it belongs to, or mark it as an exhibition game so it doesn't affect standings even when finalized.

What you'll see: On the standings card, click the phase pills (All phases / Regular Season / Playoffs) to filter the standings to that phase only. Same applies to the Player Stats card.
7

Set points and tiebreakers

In the wizard's Points & tiebreakers step, configure your scoring rules.

Default points policy: 3 win / 1 tie / 0 loss. Shootout wins default to 2 pts (per FINA convention).

Tiebreakers resolve teams with equal points. The default chain (most-to-least applied):

  1. Points
  2. Wins
  3. Head-to-head record
  4. Goals against (fewer is better)
  5. Goals for
  6. Goal differential (capped at ±5/game)
  7. Team name (alphabetical)

Many leagues simplify to a shorter chain like points → goals-for → name. Pick whatever matches your league's bylaws — Eggbeater applies it consistently across all standings views.

8

Publish to spectators

On the Leagues tab, find the Publishing card and click Publish League. Eggbeater:

  • Mints a 6-character share code (e.g. SPRG26) — admins can pick the code
  • Activates a public spectator URL: eggbeater.app/tournament.html?code=YOUR_CODE
  • Auto-generates an SEO landing page at /leagues/{your-slug}/
  • Applies your club's branding (logo + primary/secondary colors) to the spectator page

The spectator page detects the league's display language and auto-switches the UI accordingly. French leagues land in French; Spanish leagues land in Spanish.

Re-publish anytime. Pushing updates to the schedule or roster doesn't change the share code — visitors keep using the same URL.
9

Export to Google Sheets

On the standings card header, click 📊 Export to Sheets. The first time you'll grant Google Sheets API access via OAuth. After that:

  • Eggbeater creates a new workbook in your Drive titled "{League Name} — {Season}"
  • Initial export populates ~7 tabs: League Overview, Master Schedule, Standings (combined + per-phase), Per-division standings
  • Additional tabs land on subsequent exports as data accumulates: Alignements (with per-player stats), Statistique per phase, Career, Archives, and one Feuille de match per played game

Auto-sync: every time a game's score flips to FINAL, the workbook updates within a few seconds — no manual re-export needed. Auth survives for ~50 minutes; after that, click Re-export once to refresh the token.

For leagues migrating from a spreadsheet: Eggbeater's workbook is designed to mirror common league sheet structures (master schedule, rosters with stats, per-phase player stats, career totals, per-game scoresheets) so admins can run Eggbeater alongside their existing sheet during the migration period and verify the numbers match.
10

Score your first game

Three paths to record a score:

A. Live scoring during the game

  • The scorer at the desk opens eggbeater.app on a tablet, enters the share code, picks the game, and starts the clock
  • Tapping Goal, Assist, Save, etc., logs events with the cap number and timestamp. Button labels render in the league's display language (English, Spanish, or French) automatically.
  • Spectators see updates within 5 seconds. Standings re-rank live.

B. Final score only

  • In the admin Live Game Console, type the final score in each team's input and click Save
  • The game flips to FINAL. Auto-sync pushes the score to the Google Sheets workbook within 3 seconds.

C. Backfill events from a paper scoresheet

  • Click 📝 Log on the game's tile
  • Enter events one at a time: period, time, cap color, team, cap #, action, position
  • Each submission appends to the game's action log and refreshes the per-game writeback tab

Before flipping a game to FINAL, fill in the two referee names via ✏️ Edit. Eggbeater warns when the refs are missing on a non-exhibition game.