Data import brings athlete measurements into FYTT from a spreadsheet, so you can load a testing day, a season of results from another system, or anything that isn't already arriving through an integration. This guide covers the file format, how rows are matched to athletes and metrics, what happens to duplicates, and how to fix rows that fail.
Opening the import
On the team's Metrics page, click Import (1) to open Import measurements. You need edit access to the team: coaches, trainers, and managers can import; observers can't.
Pick the Scope (1): the team, or, if you're an organization manager, the whole organization. Measurements are always saved to the organization, so every team sees them. The scope only decides whose roster athletes are matched against.
Click Choose a CSV (2), or drag the file onto it. The file has to be a UTF-8 CSV of 5 MB or less. If you work in Excel or Google Sheets, save or download the sheet as CSV first: an .xlsx file is turned away with That file isn't a CSV. A bigger file is turned away with That file is over 5 MB; split it by test date or by team and import each part.
Click Import (4). It stays greyed out until you've chosen a file. There's no preview, so check the file against the rules below first.
Formatting your file
The panel lists the rules under How to format your file, with an example sheet underneath. Sample spreadsheet (3) opens a template you can copy.
Columns. The top row is
date,email,first_name,last_name, in that order, then one column per metric. Order matters: an identity column out of place is read as a metric.Metric names must match an existing metric exactly, capitals included. A name FYTT doesn't have yet creates a new metric (see below).
Dates are most reliable written as YYYY-MM-DD, such as 2024-01-04.
Values are plain numbers. A blank cell means no measurement for that athlete and date; a 0 is recorded as zero.
Email is how athletes are matched, so keep the email column even when some cells in it are empty.
Text in a value cell is saved as 0
A note such as DNF or "injured" in a value cell doesn't fail the row: it's recorded as a measurement of 0. Clear those cells before you import.
Units
Values are saved in the unit the metric already uses; nothing is converted. Check each metric's Unit on the Metrics tab and convert the column in your spreadsheet if it differs. Write feet as decimals: 5'7 is read as 5, so write 5.58.
New metrics
A metric created by an import has the Custom measurement type and no unit, and it isn't on any team's Data grid yet. Open the Metrics tab, set its type and unit, and turn on its Team metric switch for the teams that should see it. See Metrics for both.
The built-in Height and Weight metrics can't be imported this way. A column named Height creates a separate custom metric rather than filling the built-in one.
How athletes are matched
Each row is matched to an athlete in this order:
Email, against every athlete in your organization.
First and last name, exactly as spelled, against the team's roster (or the whole organization, when the scope is the organization).
No match: FYTT creates the athlete. With a team scope and an email, the athlete joins that team's roster as uninvited; see Athlete access to invite them. Anyone else is kept as a data-only athlete: the measurements are saved, but the athlete isn't on a roster.
Because a missed match creates an athlete rather than failing, a misspelled name without an email becomes a second, data-only athlete. Fill in emails wherever you have them.
If an email belongs to a FYTT account outside your organization, that athlete's rows fail with an error asking you to add them to a team first. Add them to your roster, then import those rows again.
Duplicates and re-imports
FYTT keeps one measurement per athlete, per metric, per date.
Within the file: several rows for the same athlete and date are combined. An untagged column is averaged. Tag the column name to keep the lowest or highest instead:
Bench[min],Bench[max], orBench[avg]. In the panel's example, two rows for Steve on the same day keep 285 underBench[max]and average to 322.5 under plainSquat.Against what's already saved: a value for an athlete, metric, and date that already has a measurement replaces it. A blank cell leaves the saved measurement alone.
So a re-import is safe: the same rows rewrite the same values rather than doubling them. Imported measurements count like any others: they update assessments and percentiles, and can trigger automations.
While it runs and when rows fail
Once you click Import, the panel closes and an Import measurements dialog shows the file name, the scope, and a progress bar. Keep the window open. When the import finishes, the page reloads with the new measurements and a message confirms which team or organization they went into.
If anything fails, the dialog stays open and lists what went wrong under There was an error processing your request: (or There were 3 problems processing your request:, with the count, when there are several). Click Close when you've read it. Rows that didn't fail are already saved, so fix the problem rows and import them again, on their own or with the whole file.
A missing date stops the whole import
A row with an empty or unreadable date, including a blank row between or under your data, fails the import before anything is saved, with an error that doesn't name the row. If you see an error you don't recognize, delete blank rows and check the date column, then import again.
Other imports
This import is for measurements only. Other data comes in elsewhere:
Athletes: add them to a roster with Import or Import & Invite; see Athlete access.
Exercises: the exercise library has its own CSV import; see Exercises.
Devices and platforms: an integration syncs measurements automatically instead of a one-time file.
Exporting: to get measurements out of FYTT, Export on the metrics page builds an Excel (.xlsx) file; see Metrics.

