Set up your water polo club, manage tournament schedules, run live scoring, and keep parents informed — all in one place.
Eggbeater is a tournament management platform built for water polo clubs and high school programs. Your admin panel is where you build schedules, manage rosters, communicate with spectators and families, and run live scoring — all from your phone or laptop.
Spectators and admins can access Eggbeater via our mobile-optimized web app or by downloading the Eggbeater native app for iOS or Android.
Go to eggbeater.app/admin.html?club=your-club-id in any browser. Bookmark it for quick access.
Tap Sign In with Google and use the Google account that was authorized by your club's platform admin. Your email must be on the approved admin list.
Use the age group pills at the top of the screen to switch between teams (e.g., 14U Girls, 16U Boys). Each age group has its own schedule, roster, and tournament data.
Add your games, import your roster, configure settings, then hit Save & Deploy to publish everything to the spectator app instantly.
Tip: The admin panel works great on mobile. You can manage everything from the pool deck on your phone.
The header bar is your command center. It shows your club name, the current tournament, and the active age group. Here's what each piece does:
The admin panel is organized into tabs. On desktop/tablet, all tabs are visible directly in the left sidebar — no More button needed. On mobile, the primary tabs (Schedule, Roster, Games) are in the bottom bar, and the remaining tabs are one tap away via the More button:
When you first access your club's admin panel, complete these steps to get everything configured:
Spectator Link: Your club's app URL is eggbeater.app/?join=your-club-id. Spectators open this link, pick their age group, and they're set. No account required.
Go to the Games tab to build your tournament schedule. You have several options:
For most tournaments, start with the hosted tournament flow: the tournament director publishes the event package and team admins import it with the share code. Use the standard Bracket Sheet Sync when the event is only sharing a normal Google Sheet. Use the Futures Bracket Import Wizard when the tournament is sharing a mixed-age Futures sheet with color legends.
Current recommended tournament flow: Ask the tournament director for the hosted tournament package or T-Score share code first. That path carries the full tournament structure more cleanly, especially for divisions, crossover games, and rebracketing. If the event only distributes a Google Sheet, use the standard Bracket Sheet Sync for a normal sheet and the Futures wizard for mixed-age Futures tabs.
If you do receive a Google Sheet from the tournament director, you can still pull your team's schedule directly from it — no copy-pasting required. The app re-checks the sheet on a schedule and now updates games, official final scores, resolved next opponents, venue, and cap color from that sheet when the data becomes available.
Before you start: Standard Bracket Sheet Sync works with a public viewable sheet. The Futures wizard uses Google Sheets API access, so the admin signs in with Google during setup and the testing account must have access to the sheet.
J3:M6). If the first row of that range contains pool names like "Pool A / Pool B / …", the app picks them up as headers automatically. Tap Fetch Pools → and you'll see a preview grid of all pools and seeds.
J13:M29) and tap Fetch Re-bracket →. If it's a one-day tournament, tap No, single day.
Finding the right cell ranges: Open the Google Sheet, click the top-left cell of the pool grid and note the cell reference in the top-left of the sheet (e.g. J3), then click the bottom-right cell (e.g. M6). Your range is J3:M6. The same method works for the re-bracket range.
Futures color-aware import: The dedicated Futures Bracket Import Wizard now handles mixed-age shared tabs, merged or offset legend labels, Google sign-in, malformed row corrections, venue confirmation for directions, and follow-on path detection. It also auto-generates the tournament ID so later syncs stay attached to the correct event.
After deploying games through NJO Mode, spectators can subscribe to a WebCal calendar feed that auto-updates in Google Calendar, Apple Calendar, or Outlook.
webcal:// link appears. Copy and share it with spectators and families (e.g. in a group chat). They tap the link once to subscribe — all games appear as calendar events immediately.These features are automatic — once you deploy games, spectators get access to all of them with no extra setup on the admin side.
Tip for admins: Let your spectators and families know these features exist! A quick message in your group chat — "You can add a widget or follow the game on your lock screen" — drives adoption.
NJO Mode is a dedicated wizard for USA Water Polo's National Junior Olympics — a 4-day, multi-bracket tournament with a complex advancement structure. It reads directly from the MASTER BY DIVISION sheet that USA Water Polo posts each year, which contains every game for every division in a single tab.
When to use NJO Mode vs Bracket Sheet Sync: Use NJO Mode when you have the USA Water Polo MASTER BY DIVISION sheet. Use the regular Bracket Sheet Sync wizard for all other tournaments. NJO Mode auto-detects the sheet format — if it sees the GMID division column it knows it's an NJO sheet.
#gid=… at the end), and paste it into the field. Tap Detect NJO Format →. The wizard fetches the sheet, finds the GMID column, and lists all available division codes (e.g. 12G, 12GX, 14G, 14GX).
Spectator calendar updates: Bracket games start as "Bracket Game TBD — Gm 125". As auto-sync confirms opponents (e.g. Winner of Gm 97 is resolved to San Clemente Red), the calendar event title updates automatically on every calendar app that subscribed. Spectators don't need to do anything — their calendar just updates.
GMID codes explained: The division code format is {age}{gender}{bracket}. Gender: G = Girls, B = Boys, C = Coed. Bracket: no suffix = Championship, X = Classic. Examples: 12G = 12U Girls Championship · 12GX = 12U Girls Classic · 14B = 14U Boys Championship · 10C = 10U Coed Championship.
In the Games tab, configure your tournament details:
Toggle a game to Upcoming Mode to show tournament info (name, dates, venue) without revealing the full schedule. Useful when you know the tournament but haven't finalized games yet. Spectators see the coming soon message instead of an empty schedule.
Remember: Changes aren't visible to spectators until you Save & Deploy. You can edit freely without affecting what spectators see.
Go to the Roster tab to manage your team's players. Each player has a cap number, first name, and last name.
If your age group has multiple teams (A/B/C), each team has its own roster section. Players are assigned to a specific team. You can customize team labels in the Games tab → 🏊 Multi-Team Mode section (e.g., "Red" and "Blue" instead of "A" and "B"). Requires Club Plan.
Tap Export Roster CSV to download your roster as a spreadsheet file. The file is named with your club ID and age group (e.g., pacific-waves-14u-girls-roster.csv).
When you're hosting a tournament, every registered team gets a card in the Tournament Director tab with its own inline roster editor — no need to bounce between the team admin's app and yours. Each team card shows:
Auto-refresh suspension: the moment you start editing a team's roster, the dashboard's auto-refresh pauses for that card so an incoming poll can't overwrite the cap numbers you're typing. Auto-refresh resumes after you save. If the poll does arrive with a newer roster while your edits are pending, the app preserves your draft and offers Restore my changes so you don't lose work.
Why it matters: Tournament directors used to have to call the team coach or wait for them to redeploy when a cap number was wrong. Now you can fix it in seconds from the host cockpit, and the change broadcasts to every spectator within 5 seconds.
The 💾 Save & Deploy button is the most important button in the admin panel. Here's the workflow:
Safe to experiment: Until you deploy, spectators see the last deployed version. Edit freely, preview everything, then deploy when it looks right.
You don't need to deploy after: changing club info/branding (saves automatically), sending push notifications, or managing admin access.
If your tournament has bracket play after pool play, use Auto-Populate Bracket in the Games tab. It analyzes pool play results, ranks teams by record and goal differential, and maps them to bracket seeds. You can review and manually adjust seeds before applying.
Save any tournament structure as a reusable template with Save as Template. Next time you set up a similar tournament, load the template and your games, bracket format, and structure are pre-filled — just update dates and opponents.
If your club is hosting a tournament (not just attending one), the Tournament Director tab is your event control center. From here you build the event package, publish it to participating teams, and monitor every game live throughout the weekend.
The cockpit is split into three workspaces:
When the tournament structure is ready, tap Publish Event in the Tournament Director Setup workspace. The platform generates a 6-character share code (e.g. K7M-3QP) that participating team admins enter in their own admin panel under Hosted Tournament → Import by Code.
Why share codes beat sharing a Google Sheet: Sheets need every team admin to set up the import wizard correctly, and one bad cell range breaks the import for that team. The hosted package is the canonical source — one click, every team aligned, rebracketing handled centrally.
During the event, the Live Dashboard in the Tournament Director tab is your operations view. Tiles update in real time as scorers at each pool record events:
Auto-refresh: the dashboard polls every 5 seconds while you're on the page. If you're editing a team's inline roster, auto-refresh suspends for that team card until you save (see Section 5) so a poll can't overwrite your cap edits mid-keystroke.
When you publish the event, a public spectator URL is generated automatically:
eggbeater.app/tournament.html?code=K7M-3QP
Anyone with that link sees the live tournament — pools, brackets, schedule, live scores, per-player box scores — with no install or account required. The page also auto-themes to your hosting club's branding via the /club-branding endpoint, so the primary and secondary colors, logo, and header style you set in Club Info → Branding apply automatically. Visiting parents see your tournament, in your colors, on the same domain as the rest of the platform.
This URL is the one you put on registration forms, share in tournament emails, and pin to your club's social media. As games are scored throughout the weekend, the page refreshes every 5 seconds with new scores, bracket advancement, and finalized box scores.
Every published hosted tournament gets its own printable Game-Desk Quick Reference guide for volunteer scorers, available in English, French, and Spanish. The guide is generated from the canonical Tournament Scorer Guide and customized with your tournament's name, dates, and clock settings.
Print before tournament day. Wi-fi at pools is unpredictable; printed guides at every game desk mean volunteer scorers always have a reference even if their phone signal drops.
If your club hosts multi-week league play instead of (or alongside) tournament weekends, the Leagues tab in admin handles the whole season — from setup wizard to publishing a public /leagues/{slug}/ page parents can follow without an account.
Two SKUs cover the two shapes of league:
The full setup walkthrough lives in the League Builder Guide — this section just covers what changes inside the admin panel.
The Leagues tab shows a 👑 crown when your club is entitled and a 🔒 lock otherwise. Subscribe through Settings → Manage Subscription if locked.
The wizard is a single scrolling form: league identity, divisions & teams, format, schedule preset, points & tiebreakers. Save and close at any point — your draft is preserved locally.
One weekly preset (game day + start times + minimum rest between same-team games) auto-generates every match. Or import an existing schedule from Google Sheets with reusable column templates.
A 6-character share code goes live with a public spectator URL. The /leagues/{slug}/ SEO page is auto-generated.
Tournaments and Leagues stack. A club can run a tournament and a league at the same time — they publish under separate share codes and don't interfere. Same admin panel; different tab.
Week-aware Live Activities. League games on iOS lock screens read "Week 3 · vs Stingrays" instead of a generic "next game" — helpful when families are tracking a multi-month season at a glance.
Spectators who enable notifications in the app receive push alerts on their phone. You control what gets sent:
Tap Load Subscriber Stats in the Communication tab to see how many spectators have notifications enabled, broken down by age group and notification type.
Connect external messaging services to automatically post score updates:
After connecting, score updates and announcements can be sent to these channels alongside push notifications.
During a game, a designated scorer opens the spectator app (not the admin panel), taps on the active game, and enters the live scoring view. They can:
Score updates push to all spectators watching in real time and can also update the Apple Watch companion app for spectators following the current game. If the scorer loses internet, updates queue locally and sync automatically when connectivity returns.
Set a Scoring Password in Tournament Settings to prevent unauthorized scoring. Only people with the password can submit live scores. Share it with your designated scorer at each game.
After a game, spectators can tap Share Result on any completed game card to generate a branded image with the final score. It's sized for Instagram and can be shared directly to iMessage, Instagram Stories, or any social app.
Every scorer panel (in both the regular Scores tab and the Tournament Scorer modal) has a small 🕐 Clock: ON pill in the header. Scorers can tap it to flip to 🕐 Clock: OFF:
score.clockMode) so spectator-side surfaces (public tournament page, Live Activity, Watch app, home-screen widget) hide the clock label too — no half-empty 0:00 ghost.As a tournament director, you don't need to do anything special — the toggle is per-scorer-device. If a parent scorer at a side game flips OFF, that game's spectators see no clock; another scorer at the next pool with ON shows clock times. Both scorers' data flows into the same Live Dashboard and Box Scores identically; the only difference is whether clock times appear next to events.
The top of the Archive tab shows your club's season record at a glance — overall wins, losses, ties, and win percentage across all age groups. Each age group has its own row with a record summary and color-coded win percentage bar.
Every archived tournament is stored permanently with full game results and rosters. Tap any archived tournament to see the detail view with all game scores, roster snapshot, and metadata. You can also load an archived roster back into a current tournament.
In the Roster tab, tap Load Season Stats to see cumulative player statistics across all archived tournaments: games played, goals, assists, steals, ejections, and goals per game. Stats are sortable by any column. Players and spectators can also see these stats in the public app.
Export game results or your roster as CSV files at any time. Files are named with your club and age group for easy organization.
In the Club Info tab, the Branding section lets you customize how the spectator app looks for your club:
Changes preview in real time as you pick colors. Tap Save Branding when you're happy with the look.
Pro tip: Use your club's official colors for a polished, professional look. If you're unsure of the hex codes, check your club's website or ask your club coordinator.
The colors and logo you save in Club Info → Branding are served from the platform's /club-branding endpoint and applied automatically wherever your club appears:
eggbeater.app/?join=your-club) themes from these values on every load.eggbeater.app/tournament.html?code=...) auto-theme to the hosting club's branding — so a tournament you host shows up in your colors to every visiting family.Changes to branding don't require a deploy — saving in Club Info pushes the new values immediately and devices pick them up on next refresh.
In Club Info, the admin management section lets you control who has access:
Each admin has a role that controls their access level:
Use the Scorer role to give a parent access to run the scoreboard at a tournament without granting full admin permissions.
Build or import hosted tournament packages with seeding grids, divisions, and game formats. Tournament directors publish the event, and team admins import it with the 6-character code.
View subscriber counts by age group, daily page views, and platform growth metrics in the Communication tab.
Spectators can choose Light, Dark, or System theme in the app settings. Great for poolside visibility in bright sun or evening games.
If your organization type is set to "High School," you get a History tab for tracking season-by-season tournament results. Import results directly from MaxPreps by pasting the schedule page URL, or add them manually. History data powers the multi-season record displayed to spectators. The app now also guards against duplicate tournament-history collisions when IDs or repaired imports overlap.
The admin History tools now work from durable scored-game records, mirrored scorer drafts, and server-backed scorer sessions — not just browser-local history. Use them when a scorer closes a game incorrectly, a final score changes on the official sheet, or a tournament needs to be rebuilt cleanly.
Need help? Tap the Help tab inside the admin panel for detailed documentation on every feature, or reach out to your platform administrator.