Read standings into a sheet or site
Two doors. If the division is on a public dashboard, you don’t need a key at all. For private data, a read key does it.
No key: the public read API
Everything a public dashboard shows is also JSON — slugs are in the dashboard URL (/shared/<org>/<competition>/<division>):
curl https://seazn.club/api/v1/public/orgs/riverside/competitions/summer-league/divisions/mens-a/standingsWith a read key: any division
# stages of a division
curl https://seazn.club/api/v1/divisions/$DIVISION_ID/stages \
-H "Authorization: Bearer sc_your_key"
# standings snapshot of a stage
curl https://seazn.club/api/v1/stages/$STAGE_ID/standings \
-H "Authorization: Bearer sc_your_key"Google Sheets
Apps Script’s UrlFetchApp + a time-driven trigger keeps a sheet current:
function pullStandings() {
const res = UrlFetchApp.fetch(
"https://seazn.club/api/v1/stages/" + STAGE_ID + "/standings",
{ headers: { Authorization: "Bearer " + KEY } });
const rows = JSON.parse(res.getContentText()).data.rows;
const sheet = SpreadsheetApp.getActiveSheet();
sheet.clearContents();
sheet.appendRow(["Rank", "Entrant", "P", "Pts"]);
rows.forEach(r => sheet.appendRow([r.rank, r.entrant_name, r.played, r.points]));
}TypeScript
const res = await fetch(
`https://seazn.club/api/v1/stages/${stageId}/standings`,
{ headers: { Authorization: `Bearer ${process.env.SEAZN_KEY}` } },
);
const body = await res.json();
if (!body.ok) throw new Error(body.error.message);
console.table(body.data.rows);Prefer an iframe? Pro orgs can embed live standings directly — see the sharing panel on any division, no code beyond a copy-paste snippet.

