How to use Stats Lab
Everything each feature does, and how to get the most out of it. New here? Read Your first sheet in 5 minutes and you're ready to go.
Contents
- What Stats Lab is
- Your first sheet in 5 minutes
- Sheets, players, sessions, metrics
- Entering numbers
- Live logging on a phone
- Players & roster
- Player photos
- Sessions
- Metrics
- Formulas
- Sport-specific tips
- Ratings (composite scores)
- Targets
- Totals, per session, per 90
- Filters & time windows
- Insights
- Awards
- Leaderboard
- Player page
- Compare
- Before vs after: is it real?
- Trends
- Statistics (correlation, spread)
- Session reports
- Similar players (scouting)
- Printing & PDF reports
- AI reports
- Squad: attendance, minutes, load
- Scouting: shortlists & reports
- Player profiles & seasons
- League tables
- Import a CSV or paste from Excel
- Import from a tournament
- Export
- New season: duplicate a sheet
- Working with your staff
- Sharing a read-only link
- Embed stats on a website
- Use your data in other apps
- Players enter their own numbers
- REST API
- Webhooks
- Plans & upgrades
- Undo, shortcuts & light theme
- Privacy, limits & deleting
- Troubleshooting & FAQ
What Stats Lab is
Stats Lab is a free tool for tracking how your players perform, match after match, and seeing what the numbers mean. Use it instead of a spreadsheet: you type the numbers in, and the leaderboard, charts, player reports and comparisons build themselves.
- Free for every Tournament Master account. Coaches, organizers, players and parents all get every feature. You don't need to run a tournament on the platform.
- Any sport. A ready-made template for every sport on Tournament Master: football, cricket, rugby, tennis, golf, swimming, chess, darts, esports and more. Or start from a blank sheet with your own columns.
- Private by default. Only you can see your sheets until you choose to share a read-only link.
Your first sheet in 5 minutes
- 1Sign in with your Tournament Master account (or create one for free), then click New sheet.
- 2Give it a name (for example "U17 squad — 2026 season"), pick the template for your sport, and click Create sheet. The template adds the usual columns for that sport, and you can change them later.
- 3Open Setup, and under Roster paste your player list, one per line. Click Add players.
- 4Open Enter data, click New session, give it a date and opponent, and save.
- 5Type each player's numbers into the grid. Everything saves automatically. Then look at Insights, Leaderboard and Player.
Sheets, players, sessions, metrics
Four ideas make up everything in Stats Lab:
| Term | What it is | Example |
|---|---|---|
| Sheet | One workbook. Keep one per squad, season or study. | “First team — 2026”, “Trial week” |
| Player | Someone on the sheet’s roster. | Thandi Mokoena, ST, #9 |
| Session | One match, training or trial: an occasion you record numbers for. | “vs City FC”, 5 March |
| Metric | A column. Inputs are numbers you type. Formulas are worked out from inputs. | Goals (input), Shot accuracy % (formula) |
Each player gets one row of numbers per session. A player "played" a session if they have at least one number in it, and that's the count you'll see as Sessions everywhere.
Entering numbers (Enter data tab)
The grid works like a spreadsheet. Pick how you want to fill it in:
- By session: choose a session, and each row is a player. Best after a match, when you have everyone's numbers on one sheet of paper.
- By player: choose a player, and each row is a session. Best when tracking one athlete over time, or fixing one player's history.
Moving around
| Key | What it does |
|---|---|
| Enter | Save the cell and move down to the next player |
| ↑ / ↓ | Move up or down a row |
| Tab | Move right to the next column |
| Esc | Undo what you just typed in this cell |
Pasting from Excel or Google Sheets
Copy a block of cells in your spreadsheet, click the cell where the top-left value should land, and paste (Ctrl+V or ⌘+V). The whole block fills across and down at once. The rows and columns need to be in the same order as the grid.
Good to know
- It saves itself. Watch the indicator next to the sheet name: Saving → Saved. If it shows Not saved — retry, check your connection and click it.
- Leave a cell empty when there's no number. Empty is not the same as zero: an empty cell doesn't count towards averages.
- Times can be typed as
1:23.4(minutes:seconds) or as plain seconds (83.4). - Decimals work with a point or a comma (
7.5or7,5), and a trailing%is ignored. - A cell outlined in red holds something that isn't a number, so it wasn't saved. Fix it or clear it.
- Columns marked ƒ on the right are formulas. They fill in by themselves as you type.
- Hover a row and click the eraser icon to clear that player's numbers for the session.
- Forgot someone? Use Quick-add player under the grid.
Live logging on a phone
The Live tab is for counting during a match or training, standing on the side line. One tap = one event.
- 1Open the sheet on your phone and tap Live. Pick today's session, or tap New to start one.
- 2Tap the ⚙ button to choose which stats get buttons, e.g. Shots, Tackles, Passes. Up to 6 fit nicely. Your choice is remembered on that device.
- 3Each tap on a player's stat adds one. Made a slip? Tap Undo. To take one away, switch on − mode.
- Everything saves itself. If the connection drops, a red note appears; your taps are kept and saved when it's back.
- Two people can log at once, e.g. one per half of the pitch or one per team. Invite the second person as an editor (see Working with your staff). If you both tap the same player's same stat in the same second, one tap can be lost, so split players between you.
- Only counting stats (things you add up) get buttons. Minutes, times and ratings are entered in the grid afterwards.
Players & roster (Setup → Roster)
Add players one per line in the Add players box. You can include extra details separated by commas, in this order: name, position, shirt number, group. Only the name is required.
Thandi Mokoena, ST, 9, U17 Leo Dlamini, GK, 1 Aisha Khan
You can also paste columns straight from a spreadsheet. To edit a player, click their name, number, position or group in the roster table and type.
Groups
A group is any label you want to split the squad by: team, age group, first team vs development, or forwards vs defenders. Once players have groups, a group filter appears above every analysis view.
Archive vs delete
| Archive | Delete | |
|---|---|---|
| Numbers kept? | Yes, all history stays | No, removed for good |
| Shown in rankings? | No | — |
| Can be undone? | Yes, click restore | No |
Use Archive for players who left or are injured long-term. Use Delete only for mistakes, such as a duplicate or a typo.
Player photos
Open a player on the Player tab and click the round picture next to their name to add or change a photo (JPG, PNG, WebP or HEIC, up to 8 MB). It's cropped to a square around the face automatically. Hover it and click × to remove it.
Photos are only shown to you and your staff. They never appear on share links, website widgets or data feeds, because squads often include children.
Sessions
Create a session from Enter data → New session or Setup → Sessions. Each session has:
- Type: match, training, trial or other. You can later filter the analysis to "matches only", so training numbers don't mix with match numbers.
- Date: puts the session in order on charts and in form calculations. Sessions without a date go after the dated ones.
- Opponent and result (optional) show in the player's session log.
- Label: the name shown on charts. Leave it empty and it's made from the opponent ("vs City FC") or the date.
- Notes: private. They never appear on a shared link.
To change or remove a session, use the pencil and bin icons in Setup → Sessions. Deleting a session deletes every number entered for it.
Metrics (Setup → Metrics)
Click + Input to add a column you type into, or + Formula for a worked-out column. Change the settings, then click Save metrics.
| Setting | What it controls |
|---|---|
| Label | The column name. The key below it (e.g. shots_on_target) is the name you use in formulas. |
| Format | Whole number, Decimal (0.00), 3 decimals (.300, for baseball-style averages), Percent or Time (m:ss). This only changes how the number is shown. |
| Across sessions | How a season total is built. Add up for counts (goals, minutes). Average for ratings or scores out of 10. Best (max) for things like jump distance. Best (min) for race times. |
| Better when | Higher or Lower. Set Lower for turnovers, cards, errors and times, so rankings, colours and insights treat a low number as good. |
- Use the arrows to reorder columns. The order is used everywhere.
- Deleting an input hides its numbers rather than destroying them. Add it back with the same key and they reappear.
- Keys can't be changed once saved (so formulas don't break), but the label can.
Formulas
Formulas let you add your own stats, the way spreadsheet formulas do, except you write them once and they work for every player and every session. Type them using the keys of your input metrics:
| Stat | Formula |
|---|---|
| Goal contributions | goals + assists |
| Shot accuracy % | shots_on_target / shots * 100 |
| Pass accuracy % | passes_completed / passes * 100 |
| Basketball points | 2 * fgm + tpm + ftm |
| True shooting % | (2 * fgm + tpm + ftm) / (2 * (fga + 0.44 * fta)) * 100 |
| K/D (no divide-by-zero) | kills / max(deaths, 1) |
| Volleyball hitting % | (kills - attack_errors) / attempts * 100 |
| Training load | duration_min * rpe |
- You can use
+ - * /, brackets, andmin(),max(),abs(),round(),sqrt(). - Formulas can use input metrics only, not other formulas.
- A mistake shows in red under the formula box as you type, and the sheet won't save until it's fixed.
- Dividing by zero shows "–" instead of an error.
Sport-specific tips
The templates follow each sport's usual conventions. A few need numbers entered a particular way. Hover a column header to see its description in the app.
| Sport | Enter it like this |
|---|---|
| Cricket | Enter balls, not overs: 4 overs = 24, 3.4 overs = 22. Enter Times out as 1 if the batter was dismissed and 0 if not out. A batter who is never out has no batting average ("–"), as in official records. |
| Baseball / Softball | Enter pitching as outs: 1 inning = 3, 6⅔ innings = 20. AVG, OBP, SLG and OPS show as .300 and ERA and WHIP as 3.45. |
| Golf | Enter Rounds as 1 per round, Par as the total par of the holes played, and your course handicap for that round. Net to par is then worked out for you. |
| Hockey | Rates default to per 60 minutes (ice). For field hockey, change Rate per N minutes to 70 in Setup. |
| Rugby | Rates default to per 80 minutes. Points use 5 per try, 2 per conversion and 3 per penalty or drop goal. Edit the formula for league or sevens scoring. |
| Chess | Enter Opponent rating as the average rating of the opponents you faced. Performance rating is opponent average + 400 × (wins − losses) ÷ games. |
| Darts | Enter total points scored and darts thrown per session. The 3-dart average and checkout % follow. |
| Swimming, athletics, cycling | Times are kept as your best (lowest) per session and across the season. Distance and training load add up. |
| MOBA esports | Enter Game length in minutes so CS, gold and damage per minute work. Enter Team kills for kill participation. |
Ratings (composite scores)
A rating rolls several stats into one 0–100 score, e.g. an Attacking rating built from goals, shots on target and key passes, or a Defensive one from tackles and interceptions. Coaches use them for selection; scouts use them to rank a long list quickly.
- 1Go to Setup → Ratings and click + Rating (or Overall to weight every stat equally).
- 2Name it, click Edit weights, and slide each stat from 0 (ignored) up to ×5 (very important).
- 3Click Save ratings. Ratings appear first in the Leaderboard (marked ★), on each player page, and in Compare.
- How it's worked out: each stat becomes a percentile (how the player ranks in the squad, 0–100), and the rating is the weighted average. So goals and pass % combine fairly despite different units, and lower-is-better stats (cards, errors) automatically count the right way round.
- A player missing more than half of a rating's weight gets no rating ("–") rather than one based on a single stat.
- Ratings follow the filters: switch to Per 90, a group or Last 5 sessions and they're recalculated against those players and sessions.
Targets
Give the squad, or one player, a goal for any stat, e.g. "Pass accuracy ≥ 80%" or "Thandi: ≥ 3 tackles per 90".
- 1Setup → Targets → + Target. Choose who it's for (the whole squad or one player), the stat, the number, and how it's measured: per session, season total, or per 90 (or your minutes basis).
- 2≥ or ≤ is set for you from the stat's Better when setting (fewer cards uses ≤).
- 3Click Save targets.
- Leaderboard: the column header shows the squad target, and players meeting theirs get a green ✓.
- Player page: a Targets card with progress bars, "met" or "not yet", and personal targets marked. Per-session targets are also drawn as a line on the trend chart.
- Insights: "X of Y players on target" for the stat you're looking at, with who isn't there yet.
- A player's own target replaces the squad one for them. Targets show only in their own rate: switch to Per session to see per-session targets.
Totals, per session, per 90
The switch above every analysis view changes how numbers are counted:
| Mode | Shows | Use it to |
|---|---|---|
| Totals | Everything added up | See who has done the most |
| Per session | Average per session played | Compare regulars with players who have played fewer games |
| Per 90 min | Rate per 90 minutes played (or per 36, 40…) | Compare starters fairly with substitutes who only get 20 minutes |
- Per-minute mode needs a minutes column. Choose it in Setup → Sheet → Minutes column and set Rate per N minutes to the length of a full game in your sport (90 for football, 36 or 48 for basketball). The football and basketball templates have this set up already.
- Only "Add up" stats are converted to rates. Averages, bests and percentages stay as they are, because a percentage per game is still a percentage.
- Min. sessions to rank (Setup → Sheet) keeps one-game wonders out of the rankings. Players below it are still shown, but greyed out and not ranked.
Filters & time windows
If your players have groups, pick one from the All groups menu to analyse just that group. If you have more than one session type, a second menu lets you choose Matches only, Trainings only and so on.
The calendar menu sets the time window: All sessions, the Last 3 / 5 / 10 sessions (current form), or a Date range(e.g. one half of the season). Combine it with the session-type menu for "last 5 matches".
Filters change everything on the page, including rankings: percentiles then compare players only with the others you're looking at. A forward is then measured against forwards, not against goalkeepers.
Insights
The first tab picks out what's worth your attention for one stat. Choose the stat in What stands out in, and click any card to open that player.
| Card | What it means |
|---|---|
| #1, #2, #3 | The top three for that stat, in the current mode (totals, per session or per 90). |
| In form / Dipping | Average over the player’s last 3 sessions compared with all their sessions before that. Only shown for players with 5+ sessions, and only when the change is big compared with how much that stat normally varies, so small swings are ignored. |
| Most consistent | Smallest swing from session to session (needs 3+ sessions). The player you can count on. |
| Least predictable | Biggest swing from session to session. Brilliant one week, quiet the next. |
| Active streak | Recorded this stat in each of their most recent sessions (3 or more in a row). |
| Best single session | The highest single-session number anyone has recorded. |
Below the cards, Top 3 by metric shows the leaders for every stat at a glance. The tiles at the top count how much data the sheet holds.
Leaderboard
- Click a column header to rank by it, and click again to flip the order. A column marked ƒ is a formula. Hover a header to see its formula or description.
- Shading shows each player's rank against the others on screen. The darker the blue, the better. It takes "Better when" into account, so the fewest cards gets the darkest blue. Hover a cell to see the exact percentile. Untick Percentile shading for a plain table.
- Greyed-out rows are players below the minimum sessions. They're shown but not ranked.
- Use the search box to find a player or a position (e.g. "ST").
- Click a player's name to open their player page.
- Export CSV downloads exactly what you see (current mode and filters).
Awards
At the bottom of Insights, Stats Lab works out end-of-season awards from whatever the filters show, so pick a date range for one season or one month. Only players with enough sessions to be ranked can win. Print gives you a sheet for the awards night.
- Player of the season: the highest score on your first rating, or (with no ratings) the best average percentile across every stat.
- Most improved: the biggest step up from the first half of the sessions to the second, across all stats, measured in standard deviations so every stat counts equally.
- Ever-present and Most minutes.
- Standout performance: the single session furthest above the squad's normal level.
- Top in each counting stat (goals, assists, tackles…), with runners-up.
Player page
Everything about one player. Choose them from the menu, or click their name anywhere in the app.
Scouting report
For every stat, the player's number and a bar showing their percentile: the share of the squad they're better than. 73 means better than 73% of the players being compared. 100 is the best on the sheet and 0 is the lowest. The bars follow the mode and filters at the top.
Trend chart
Pick any stat to see it session by session. The solid line is each session. The dashed line is the average of the last 3 sessions, which smooths out one-off games so you can see real improvement or decline. Hover a point for the exact numbers.
Session log
Every session the player has numbers for, newest first, with date and result. This is their full game log.
Compare
Put up to three players side by side, for selection decisions, scouting or showing a player where they stand.
- Radar chart: each spoke is a stat, and the further out, the higher the player's percentile. A big, even shape is an all-rounder, and a spiky shape is a specialist. Open Radar metrics to choose which stats appear (at least three).
- Table: the actual numbers, with a green ▲ marking the best of the group on each row.
- Change a player with their menu, remove one with ×, or click Add player.
Tip: open a player page first, then click Compare, and that player is already selected.
Before vs after: is it real?
Compare → Periods: before vs after puts two stretches of the season side by side: first half vs second half, the last 3, 5 or 10 sessions vs everything before, or any two ranges you choose (pick the same session for "from" and "to" to compare single matches).
- A avg / B avg are per player per session, so a longer period doesn't win just by having more games.
- Effect (Cohen's d) is the size of the change compared with the normal spread: about 0.2 is small, 0.5 medium, 0.8 large.
- Is it real? uses a Welch's t-test. Likely real (p < 0.05) means a difference this big would happen by luck less than 1 time in 20; very likely real is p < 0.01; could be chance means the numbers are too close or too few to tell.
- Below the squad table, pick a stat to see which players changed most, each with their own test.
Trends
Squad per session
A bar for each session showing the whole squad's total (or average, for rating-type stats). Use it to spot good and bad spells, or to check whether a training focus is working. For formulas, the squad figure is worked out from the squad's combined numbers.
Player scatter
Choose one stat across the bottom and one up the side, and each dot is a player. The dashed lines are the squad median (the middle player):
- Top right: above the middle on both. Your standouts.
- Top left / bottom right: strong on one, weaker on the other. For example, a player with many shots but few goals may need finishing work.
- Bottom left: below the middle on both.
The top five are labelled. Hover any dot for the name and numbers, and click it to open the player.
Statistics (correlation, spread)
The Statistics tab is for digging deeper than the leaderboard:
- Summary: for each stat, how many players, the mean and median, standard deviation (SD), range, and CV: the spread relative to the average. A high CV means a few players do most of it; a low CV means the squad is even.
- Standardised scores (z): how many standard deviations each player is from the squad average, per stat (0 = average, +1 clearly above, +2 exceptional; lower-is-better stats are flipped so positive is always good). Unlike percentiles, z keeps the size of the gap, so it shows when one player is far ahead rather than just first.
- Correlation matrix: how stats move together across players, from −1 to +1. Blue = when one goes up, so does the other; orange = one up, the other down; near 0 = no link. Click any square to open that pair as a scatter with a best-fit line, r and R².
- Distribution: a histogram of how many players fall in each range for any stat, with the median marked. Hover a bar to see who is in it.
Session reports
The Sessions tab is a one-page report for a single match or training: pick it from the menu.
- Highlights at the top: stats where the squad was 20%+ above or below its usual level (green = better, amber = worse).
- Squad vs the average session: totals for counting stats and averages for ratings, each compared with the average session in the current filters. The number of players recorded is shown too: if fewer than usual played, totals naturally look low.
- Top performers: the top three for every stat in that session. Click a name to open the player.
Similar players (scouting)
On every player page, Most similar players lists the five players with the closest overall statistical profile, compared stat by stat on percentiles. 100% means an identical profile. Use it to find a like-for-like replacement, to spot who plays a similar role, or to put a trialist alongside your regulars. Compare top 2 opens all three side by side.
Printing & PDF reports
On a player page or a session report, click Print / PDF. Menus and buttons are hidden and the report switches to dark text on white. Print it, or choose Save as PDF in the print window to email it to a player, parent or scout.
AI reports
On a player page, the AI report card writes a short report (about 200 words) from the numbers you're looking at: summary, strengths, areas to develop and a recommendation. Choose a style first:
- Scouting: for recruiters deciding whether the player fits a role.
- Development: for the coach planning what to work on.
- Player & parent: encouraging and in plain language, to share with the player and family.
- It uses the current view: switch to Per 90 or Last 5 sessions first and the report is about that.
- Only the figures on the page are sent: never private notes, emails or other players' data beyond names in "similar players".
- The report is written by Claude, an AI model. It's told to use only your numbers, but check it before you share it.
- Each person can write 25 reports a day. It prints with the player report.
Squad: attendance, minutes, load
The Squad tab helps you look after the group. It's only visible to people on the sheet, never on share links.
Attendance
In Enter data, the Att. column marks each player Present, Absent, Injured or Excused for that session. A player with numbers and no mark counts as present. The Squad tab shows each player's counts and attendance %, lowest first.
Minutes balance
With a minutes column set (Setup → Sheet), you see each player's minutes against a fair share: the squad's total minutes split equally between players who were available. Anyone under half a fair share is flagged. Useful in youth sport, where game time should be shared.
Training load
Pick a load stat (Setup → Metrics → Add wellness pack adds sleep, fatigue, soreness, stress, mood, session duration, RPE and a Training load = duration × RPE). The acute:chronic ratio compares the last 7 days with the weekly average over 28 days:
- 0.8–1.5: the usual safe band.
- Above 1.5 (spike): load rose sharply; linked to higher injury risk, so consider easing off.
- Below 0.8 (low): less than they're used to; fine when tapering, worth watching otherwise.
It needs dated sessions and at least 3 weeks of history. It's a guide to start a conversation, not a medical assessment.
Scouting: shortlists & reports
Shortlists
On a player page, give them a status (Watching, Contacted, On trial, Signed, Passed) and any number of tags, such as "U17 targets" or "Left-backs". On the Leaderboard, filter by status ("On a shortlist") or tag to rank just those players.
Scouting reports
- 1In Setup → Scouting criteria, list the qualities you rate, or click Use a standard set (Technique, Decision-making, Physical, Work rate, Attitude, Potential).
- 2On a player page, click Add report, rate each quality 1–5, add a comment and the date you saw them.
- 3Reports from every scout on the sheet are averaged per quality, with the latest comments listed underneath.
Player profiles & season over season
Type a name in Find a player on your sheets list, or click All sheets & seasons on a Player page. The profile gathers the same person from every sheet you can open (yours and ones shared with you), matched by name or by their linked tournament player.
- Season over season: every stat, one column per sheet from oldest to newest, with the player's percentile in that squad and the change between the last two. Use Per session when seasons have different lengths.
- Chart: click a stat to plot it across seasons.
- Same name but a different person? Untick that sheet at the top.
League tables
League table (on your sheets list, or League in the top bar) ranks players from several sheets together, for example one sheet per team in your league or one per age group. Pick 2 to 12 sheets and click Build league table.
- Only stats that every sheet tracks the same way (same key, and the same formula for calculated stats) are included. Sheets from the same template always match.
- The Group column shows each player's sheet, and the team menu narrows the table to one sheet while percentiles still compare against the whole league.
- League awards are worked out across everyone you picked.
- The link keeps your selection, so you can bookmark it. It only works for people who can open all those sheets.
Import a CSV or paste from Excel
Go to Setup → Import CSV / paste from Excel. Choose an Excel (.xlsx) or .csv file (for Excel, the first worksheet is used), or select the cells in Excel or Google Sheets (including the header row), copy, and paste them into the box.
Two layouts work:
| Layout | Looks like | Result |
|---|---|---|
| Game log | Player, Match, Date, Goals, Assists | One session per match, one row per player per match |
| Season totals | Player, Goals, Assists | Everything goes into one session you name |
- 1Paste or choose the file. A preview shows the first rows, with a menu above each column.
- 2Check what each column is: Player name (required), Session / match, Date, Position, Group / team, Stat or Ignore. Stats Lab guesses these from your headers.
- 3For each stat column, choose an existing metric to fill, or + New to create a column with that header's name.
- 4Read the summary line ("Ready: 120 rows · 18 players · 8 sessions") and click Import.
- Existing players and sessions are matched by name (capital letters and extra spaces don't matter). New names are added.
- Imported numbers are merged into what's already there, so you can safely import the same file again after fixing it.
- Cells that aren't numbers are skipped and counted in the result message.
- Dates can be 2026-03-05 or 05/03/2026 (day first).
- Old .xls files aren't supported. In Excel use File → Save as → Excel Workbook (.xlsx), or just copy and paste the cells.
Import from a tournament
If you organize a tournament on Tournament Master, or are on an organizer's management team for it, you can turn it into a stat sheet in one click: on Your stat sheets, click From a tournament and choose it.
Team sports (football, basketball, rugby, cricket…) give you:
- Every player from every team roster, grouped by team (coaching staff left out).
- One session per played match, with the score.
- A column for each kind of event the scorers logged: goals, assists, cards, saves, shots, and whatever else your sport records. Plus Appearances, Starts, and G + A when both goals and assists exist.
Individual sports (tennis, chess, darts, golf, martial arts, table tennis…) give you:
- Every confirmed entrant, plus anyone who played a match.
- One session per played match, labelled "Player A vs Player B", with the score (or "Walkover").
- Each player's Matches, Wins, Losses (and Draws if there were any), Score for and Score against, plus Win % and Score difference. Draws count as half a win. Any events the scorers logged are added as columns too.
Export
| Button | Where | What you get |
|---|---|---|
| Export CSV | Leaderboard | The leaderboard as shown: rank, player, sessions and every stat, in the current mode and filters |
| Export all data (CSV) | Setup | Every number ever entered, one row per player per session. Your full backup. |
| Export Excel (.xlsx) | Setup | One workbook with four sheets: Leaderboard (with ratings and formulas), Game log, Players (with status and tags) and Sessions. |
Both open straight in Excel, Google Sheets or Numbers.
Working with your staff
Invite assistant coaches, analysts or scouts to work on a sheet with you. Click People (top right of the sheet).
| Role | Can | Can’t |
|---|---|---|
| Owner (you) | Everything | — |
| Editor | Enter data (grid and Live), change roster, sessions, metrics, ratings and targets, import, sync from a tournament | Delete the sheet, manage people, publish links, widgets or feeds |
| View only | See every analysis tab, print reports, write AI reports | Change anything |
- 1In People, choose the role, how many days the link stays valid and how many people may use it, then click Create link.
- 2Send the link. They sign in with a free Tournament Master account and click Join.
- 3Change someone's role or remove them in the same window. Revoking a link stops new people joining; people already in stay until you remove them.
- The sheet appears under "Your stat sheets" for them, marked Editor or View only.
- Several people can type at the same time. Each person's cells are saved separately, so you never overwrite each other's numbers, and their changes appear on your screen within about 15 seconds.
- Anyone can leave a shared sheet from People → Leave sheet.
New season: duplicate a sheet
In Setup → Duplicate sheet, give the copy a name and choose what comes with it:
- Setup only: stats, formulas, ratings, squad targets, scouting criteria and settings. Start the new season with an empty roster.
- Setup + roster: the same, plus your current (non-archived) players, their tags and personal targets.
- Everything: also every session and number, e.g. for a what-if copy.
The copy belongs to you. People, attendance, scouting reports, private notes and share links, widgets and feeds aren't copied. Copying the roster or data needs editor access to the original.
Embed stats on a website
Put a live widget on your club website, blog or Notion page. It updates within a minute of you entering new numbers. In Share → Embed on a website, click New widget:
- 1Pick a widget: Leaderboard (top players for one stat plus up to 4 more columns), Player card (one player with percentile bars, good for "player of the month"), or Top performers (top 3 for up to 6 stats).
- 2Choose Light or Dark to match your site, the rate (totals, per session or per 90), the stats to show, and optionally a group.
- 3Click Create widget, check the preview, then click Copy embed code.
- 4Paste it into your site:
| Site | Where to paste |
|---|---|
| WordPress | A “Custom HTML” block |
| Wix | Add → Embed code → Embed HTML |
| Squarespace | A “Code” block |
| Google Sites | Insert → Embed → Embed code |
| Notion | Type /embed and paste the URL (use Copy URL only) |
| Any other HTML page | Wherever the widget should appear |
- Each widget shows only itself. Someone who finds its link can see that widget and nothing else, not the rest of your sheet, and the link can't be edited to show different players or text.
- Change a widget with the pencil icon. Changes appear everywhere it's already pasted, with no new code needed.
- Revoke a widget with the bin icon. It stops working on every site straight away.
- If a player-card widget's player is archived, the widget says they're no longer listed rather than showing someone else.
Use your data in other apps (Google Sheets, Excel, Power BI…)
Share → Data feeds → New feed gives you live links to your numbers. Other programs read them directly and stay up to date, with nothing to re-export. Make one feed per place you use it (e.g. "Coach's Google Sheet", "Club website") so you can revoke each on its own.
- Leaderboard: one row per player with every stat, in totals, per session or per 90.
- Game log: one row per player per session, with the raw numbers you entered.
- Each comes as a CSV link (for spreadsheets and BI tools) and a JSON link (for automations and developers).
| App | How to connect |
|---|---|
| Google Sheets | Paste =IMPORTDATA("your CSV link") into a cell. It refreshes by itself, roughly hourly. |
| Excel | Data → From Web → paste the CSV link → Load. Use Refresh All for the latest numbers. |
| Power BI | Get data → Web → paste the CSV link, then set a scheduled refresh. |
| Looker Studio / Tableau | Bring the data into Google Sheets with IMPORTDATA, then connect to that sheet. |
| Zapier, Make, n8n | An HTTP / Webhooks “GET” step with the JSON link. |
| Your own site or app | Fetch the JSON link. Any website is allowed to read it. |
Players enter their own numbers
Setup → Player self-entry gives each player a private link where they fill in their own numbers, such as sleep, soreness, mood and RPE after training, or GPS distance, without needing an account. Pick the stats they may fill in, pick the players, and click Create links.
- Send each player their own link (Copy all or Download CSV, then WhatsApp or email). For safety the links are only shown once. Lost one? Make a new one; the old one stops working.
- Players see only their own numbers for the stats you chose, for the last 14 sessions. They can't see the rest of the sheet or anyone else.
- Their numbers land in the grid like anything you type, and show on the Squad tab's wellness and load views.
- Stop a player's link (or Stop all) at any time, and choose an expiry when you create links.
REST API
Full reference, code samples and webhook verification: API documentation.
For developers and data people: connect Stats Lab to your own tools. Create a key on the API page (top bar), choose the sheets it may use, and whether it can write. Keys only work while you still have access to those sheets. Each sheet's id is in Share → API & webhooks.
GET /api/v1/sheets sheets this key covers
GET /api/v1/sheets/:id metrics, players, sessions, entries
POST /api/v1/sheets/:id/rows write by names (creates players/sessions)
{"rows":[{"player":"Thandi Mokoena","session":"Training 14 May",
"played_on":"2026-05-14","values":{"distance_km":7.4}}]}
PUT /api/v1/sheets/:id/entries write by ids
{"entries":[{"player_id":"…","session_id":"…","values":{"goals":2,"cards":null}}]}
Header: Authorization: Bearer slk_… Body: Content-Type: application/jsonValues merge cell by cell: a number sets a cell, null clears it, anything you don't send is left alone. Only input stats are written; calculated stats update themselves. Limits: 120 requests a minute per key and 5,000 rows per request. Attendance, scouting reports and sharing settings aren't part of the API.
Webhooks
Share → API & webhooks lets the sheet owner add an HTTPS address that Stats Lab calls whenever numbers on the sheet change, from the grid, live logging, imports, tournament sync, player self-entry or the API. Use Test to send a ping.
POST https://your-endpoint
X-StatsLab-Event: entries.updated
X-StatsLab-Signature: t=1763000000,v1=<hex HMAC-SHA256 of "t.body" with your secret>
{"id":"…","event":"entries.updated","sheet_id":"…","created_at":"…",
"data":{"source":"app","changes":[{"session_id":"…","player_id":"…","values":{"goals":2}}],"truncated":false}}Check the signature with the secret you were shown when you added the webhook, and reject requests whose t is more than 5 minutes old. Reply with any 2xx status within 5 seconds. Up to 500 changed rows are sent per event. After 20 failures in a row the webhook switches itself off; turn it back on once your endpoint is fixed. Addresses must be public https:// URLs. Code to check the signature (Node, Python) is in the API documentation.
Plans & upgrades
Stats Lab is free for every Tournament Master account. Tournament Master may also offer paid plans with higher limits, such as more sheets, more collaborators or more AI reports per day. Open Plan in the top bar to see your current plan, what you've used, and every plan side by side.
- Already on Organizer Pro? You don't pay again. The Stats Lab plan included with Organizer Pro is switched on for you automatically, and it stays on for as long as your Organizer Pro subscription is active.
- Upgrading: pay using the details in the plan's description, then choose the plan on the Plan page and enter your payment reference. An admin checks the payment and switches the plan on, usually within a working day. You can cancel a request while it's pending.
- When a plan ends, you go back to the free plan. Nothing is deleted. If you're over a limit, you can still view and export everything, but you can't add more until you're back under it.
- Limits on shared sheets follow the sheet owner's plan. For example, how many players or collaborators a sheet can have depends on the owner's plan, not yours.
Undo, shortcuts & light theme
- Undo / redo: the arrows next to Saved, or Ctrl/⌘ + Z and Ctrl/⌘ + Shift + Z. Undo covers numbers typed, pasted, cleared or logged live (up to 100 steps while the sheet is open), not roster, session or setup changes.
- Keys 1–9 switch tabs, Ctrl/⌘ + S saves at once, and ? lists every shortcut.
- Light theme: the sun / moon button in the top bar. Your choice is remembered on this device.
Privacy, limits & deleting
- Your sheets are visible only to you, unless you share a link.
- On the free plan each account can keep up to 100 sheets. Each sheet holds up to 300 players, 1,000 sessions and 60 metrics. Your plan may change these, so check the Plan page.
- To delete a sheet, go to Setup → Delete sheet and type its name to confirm. This can't be undone, so export first if you might need the data.
- If you delete your Tournament Master account, your sheets are deleted with it.
- Only enter information you're allowed to keep about your players. For youth players, check your club's rules on recording and sharing their data.
Troubleshooting & FAQ
“Not saved — retry” appears next to the sheet name
Your last changes didn’t reach the server, usually because the connection dropped. Click the message to try again. Your changes are kept in the page, so don’t close the tab until it says Saved.
“Per 90 min” is greyed out
The sheet has no minutes column yet. Choose one in Setup → Sheet → Minutes column and save.
A player isn’t ranked, or their row is greyed out
They’ve played fewer sessions than “Min. sessions to rank” (Setup → Sheet). Lower it, or wait until they’ve played more.
A cell shows “–”
There’s no number for it. Nothing was entered, the minutes are zero in per-90 mode, or a formula would divide by zero.
My percentage doesn’t match my spreadsheet
Stats Lab works percentages out from season totals rather than averaging game percentages. That’s the correct way, and spreadsheets often do it the other way. See Formulas.
My formula won’t save
The message in red explains why. Usually it’s a misspelt key (copy it from under the input’s label) or a missing bracket.
I see a player twice after an import
Their name was spelt differently in the file. Fix the name in the file and import again, then delete the duplicate in Setup → Roster.
Insights says “Not enough data”
Most cards need a few sessions: form needs 5+, and consistency and streaks need 3+. Keep entering numbers and they’ll appear.
I can’t find a template for my sport
Every sport on Tournament Master has one. Use the search box in New sheet. For anything else, pick Blank sheet and add your own columns and formulas.
“From a tournament” shows nothing
It only lists tournaments you organize, or that you’re on the management team for. Everyone else can still build sheets from templates or CSV.
Still stuck? Use the chat or support options in the main Tournament Master app. Mention Stats Lab and the name of your sheet.