Where every number comes from
Only data we already collect, from public and primary sources, with provenance on every row. If a field cannot be sourced under these rules it does not appear.
Sources
terms · cadence| Source | What it gives | Terms and how we read it | Update cadence | Notes |
|---|---|---|---|---|
| Bandwagon's own users | Stances, takes, picks, reactions | Our terms; aggregated and anonymised before publication; one account per verified email | Snapshots every 1 h; the Index weekly; the app live | House personas and banned accounts excluded from every published number |
| Wikidata (SPARQL) | Team identity, founding, venues, colors, aliases; head coaches and managers; people's biographies by ESPN-id properties | CC0. One query per league per entity type, identified User-Agent, one request in flight, Retry-After honored, results cached a day | Daily (24 h) | Known to lag trades and sackings; the roster source wins where both know a value |
| ESPN public roster, standings and scoreboard JSON | Who is on each team today, standings, schedules and scores, draft facts, and the contract figures ESPN reports | Public endpoints, read politely with a From header and a day's cache; confirm the terms before relying on them further. Treated as a named news organization's report for contracts, never as a compiled dataset | Rosters and standings daily; scoreboards every 5 min; results history once per season | Every row carries its source and fetch time; no total or guaranteed contract figures are inferred |
| Wikipedia pageviews API | Thirty-day article views behind every team and person, for the demand ranking that orders the sitemaps | Public API, identified agent, budgeted calls per run | Daily | Ranking only; never shown as a fact |
| Team and league press releases, players' associations, named news reports | Contract figures an admin enters by hand | Each row needs the URL it was read from; compiled-salary sites are refused by name and by database constraint | As entered | Shown with 'official' or 'reported' and the source link; never 'estimate' |
| schedules/manual.json | A game a human adds or corrects | In the repository | Each scrape tick | Runs last and wins |
| Clerk | Sign-in; a verified email per account | Identity provider under its own policy; we keep a salted hash, never the address | n/a | Not a data source; listed for completeness |
Provenance rules
- Every catalog row carries its source (
roster_entries.source,games.source,games.source_url,fetched_at) and every importer step writes a run record with what it could not place. - No compiled third-party datasets, and no dataset whose terms forbid redistribution. The compiled contract and salary sites are refused by host name and by a check constraint on the table.
- No claim to official or real-time rights. Schedules and results are read on a timer and may lag; nothing here is presented as official.
- Every published sentiment number is recomputed from the stances table with house persona accounts and banned accounts excluded, and carries its sample size.
- The Everyone split on a page also counts signed-out visitors, one stance per browser per $tag per day. Fans, Neutrals, the Index, the data API and the embeds count signed-in people only, because only an account declares a team.
- Teams a source names that are not in the catalog are skipped and logged, never invented.
- Photos and logos are hotlinked from Commons and the public roster source under their own licenses; the pages show what the source is allowed to show.
What we do not carry
Player statistics and box scores (no source in this stack), a real injury report beyond the roster source's status flag, sportsbook lines of any kind, and anything about a person's private life. The public pages say "not yet reported" rather than fill a gap.
Cadence
- Scoreboards: every 5 minutes, yesterday through the day after tomorrow.
- Catalog sync (Wikidata, rosters, standings, coaches, biographies, draft facts) and the demand ranking: every 24 hours.
- Sentiment snapshots: every 1 hour; the Index once per complete Monday–Sunday week.
- Odds: nightly at 10:00 UTC, after every final, and after every catalog sync.
- Page quality check and search-engine pings: nightly.
The same table, for developers, is at /developers/sources.