Step 01 · Import

The file is the source of truth

Your launch monitor already writes everything down. Importing is a matter of reading that file correctly rather than asking you to re-type it — so the app takes the export exactly as it comes and does the tedious parts itself.

Units come from the file, not from a setting

A launch-monitor CSV has a header row naming the columns and a units row underneath saying what they are measured in. Both are read, and every value is converted into the units the app stores in — yards for distance, feet for height, miles per hour for speed, degrees for angles, rpm for spin, °F for temperature and kilopascals for air pressure.

You never convert anything, and you are never asked which units you use.

What the app reads
Date,Player,Club Type,Carry Distance,Ball Speed,Spin Rate
,,,yards,mph,rpm
2026-08-18 10:19,Brandon,Driver,268.4,171.1,2419

A file with no units row is refused. That looks strict until you consider what the alternative is: air pressure near 101 is perfectly normal in kilopascals and impossible in inches of mercury. With nothing declaring which, the only options are to guess or to stop. The app stops, and tells you why, rather than silently storing a number that is wrong by a factor of three.

Importing the same file twice is safe

Every shot is given an identity derived from its own measurements, so the app recognises a shot it already holds.

  • Re-uploading a file you have already imported adds nothing.
  • Uploading a file that overlaps another — a week's export, then a month's export covering that week — imports only the shots that are new.
  • That identity is per player and per account. Two accounts with genuinely identical shots keep both copies; they are separate datasets that never meet.

Rows that cannot be used are reported, not dropped

If a row carries a value outside what its declared units make physically possible, the import tells you which row and which column rather than quietly handing back fewer shots than you sent. A file where nothing at all is usable fails outright, instead of reporting a successful import of zero shots.

A normal result

184 shots imported, 2 skipped — the two were already in your history.

Players and clubs create themselves

Whatever names appear in the file become your players and their clubs. Differences of capitalisation and spacing are treated as the same name, so 7 Iron and 7 iron are one club, not two.

The importer will not decide that "Brandon" and "Brandon He" are the same person — getting that wrong would silently merge two people's data — so it creates both and leaves the judgement to you. When they are the same, one merge moves every shot and club onto the player you keep.

An unhandled error has occurred. Reload 🗙