Every stat in Final Whistle's Elite Stats subscription is derived from official box scores published by university athletics departments. Final Whistle parses the HTML and ingests the data directly in our system.
Our scraper runs automatically after games are complete, typically within a few hours. We do not use any second-hand data providers, APIs, or manual data entry. Everything is machine-parsed directly from the source.
Not every box score is parseable. Some schools use non-standard formats, some box scores contain errors, and occasionally pages are unavailable. We track coverage at the team level and display it on each scouting report.
| Coverage level | What it means | How it shows |
|---|---|---|
| 100% | All matches parsed successfully | Coverage badge shows 100% |
| 80-99% | Most matches parsed, 1-3 gaps | Coverage badge with count |
| 50-79% | Significant gaps in data | Yellow warning on scouting report |
| <50% | Limited data available | Stats shown with strong caveat |
Per-game averages are always calculated using matches_parsed as the denominator, not total matches played. This means a team with 18 of 20 matches parsed shows accurate per-game averages for those 18 games, rather than artificially diluted numbers.
All per-match averages use the same denominator: the number of matches with successfully parsed box scores for that team. Period-by-period breakdowns (Q1-Q4, OT, OT2) are summed from the individual match data and include overtime periods when played.
Determining which goals came from penalty corners is one of the trickiest parts of the data pipeline. Not all box scores explicitly tag "goal from penalty corner" โ in many cases, we need to infer it from the scoring summary or play-by-play.
Our parser combs through play-by-play summaries, looking for penalty corners and goals. Because there's no objective way to define when a goal is a direct result of a penalty corner, Final Whistle attributes goals scored within 26 seconds of a penalty corner to be a result of the corner.
A team's PC conversion stats are marked as reliable when at least 75% of its parsed matches include PC goal attribution data. If fewer than 75% of the team's matches have penalty corner attribution data, the conversion rate is still calculated from the matches that do have it, but rankings may exclude teams below this threshold.
Teams must have at least 3 parsed matches to appear in national rankings. This prevents early-season outliers (a team that's played one game and scored 8 goals) from dominating the leaderboard.
When two or more teams have identical values for a metric, they receive the same rank with a "T-" prefix (e.g., "T-5"). The next rank is skipped โ so if three teams tie at #5, the next team is ranked #8, not #6. This is standard dense ranking.
Most stats are ranked highest-first (goals per game, save %, PC conversion). A few are ranked lowest-first where lower is better: goals against average, defensive PCs conceded per match. The sort direction is chosen to match what coaches would consider "best."
When you filter by conference on the rankings page, the rank numbers do not change, though the displayed teams are limited to that conference. This is done on purpose, as rankings
goals_scored or goals_against totals. This matches NCAA convention.Box scores are messy. Occasionally a stat gets parsed incorrectly, a match gets missed, or a format change breaks our parser. If you spot a number that doesn't look right on a scouting report, use the "Report a data error" link on that team's page. We investigate every report and typically resolve issues within 24 hours.
Common issues we've seen: overtime goals attributed to the wrong period, penalty corner counts that don't match the PDF box score, and exhibition games accidentally included in season totals. Your reports help us catch these faster.