Convert your workout data
Pre-v1.0 · demo tool
Your workout history is stuck in whatever app you logged it in. This is a small demo of what OpenBody is for: pick a real export from a fitness app, watch it parsed into a portable, human-readable record in your own browser, and download the result. Nothing is uploaded anywhere — the parsing code runs on your machine, not a server.
It reads the formats below via the reference mappers in openbody-ts — each card says exactly what is and isn't read. The mapping guides and the draft specification have the full detail.
subj-001) is used instead.
Want to know when more apps are supported?
Email us and we'll drop you a line when new source formats land. No list, no signup — just a reply.
What you can convert
- Hevylifting
- Hevy bodymeasurements
- Stronglifting
- Apple Healthwearable
- Fitbitwearable
- Stravaendurance
- GPXgps track
- TCXgps track
- FITdevice file
- Concept2rowing
- theCragclimbing
How to export from each app →
Hevy — workout CSV
Hevy app → Profile → Settings → Export Data.
Full lifting history: workouts, exercises, sets, reps, load, RPE, supersets. Exercise names are matched to canonical OpenBody movements where known.
Hevy — body-measurement CSV
Hevy app → Profile → Settings → Export Data (the
measurement_data.csv alongside the workout export).
Body metrics logged over time: weight and body-fat become canonical OpenBody measurements, and body circumferences (neck, chest, biceps, waist, …) map to the canonical anthropometry types — with the tape-measure unit (inches or centimetres) preserved from your Hevy setting.
Strong — workout CSV
Strong app → Profile → Settings → Export Strong Data.
Workouts, exercises, sets, weight, reps, plus distance/time sets. Same canonical exercise matching as Hevy.
Apple Health — export.xml
Health app → profile picture → Export All Health Data, then unzip
the export.zip and pick export.xml.
Workouts become sessions (duration, distance, energy); heart rate, step count, body mass, and sleep-stage records become measurements. Per-workout GPS routes and other record types aren't read yet. Big exports can take a moment — it all runs locally.
Strava — activities.csv
strava.com → Settings → My Account → Download or Delete Your Account → Download
Request, then pick activities.csv from the archive.
Summary per activity only: sport, date, moving/elapsed time, distance. The GPS, heart-rate, and power streams (the GPX/FIT files in the same archive) are coming later.
GPX — track file
Export a .gpx from Runkeeper, Komoot, AllTrails, Ride with GPS, or any
other GPX 1.0/1.1 exporter.
The full GPS track becomes a multi-channel location stream (lat/lon/alt),
with heart-rate, cadence, and power streams when the file carries them — plus one
session, its discipline read from the track type.
TCX — activity file
Export a .tcx from Garmin Connect, Polar legacy, MapMyRun, or any other
TCX v2 exporter.
One session per activity, with lap structure preserved as work units (time, distance, calories, per-lap heart-rate) and trackpoint heart-rate/cadence/power/GPS streams.
FIT — activity file
The native binary format your device writes: export a .fit from Garmin
Connect, Wahoo, Zwift, COROS, or Suunto (usually the per-activity "Export to FIT" or the
.fit in your account's data download).
Decoded in your browser — nothing is uploaded. The recorded activity becomes one session (sport, duration, distance, calories) plus heart-rate, power, cadence, and GPS-route streams from the per-second records. Per-lap splits and structured-workout definition files aren't mapped yet; recorded activities are.
Concept2 — season CSV
log.concept2.com → your logbook → export the season CSV (RowErg, SkiErg, BikeErg).
One session per piece: fixed distance/time work, interval workouts recovered as blocks with rest, stroke rate and watts as intensity, and an average-heart-rate measurement per workout.
theCrag — logbook CSV
thecrag.com → Logbook → Action → Export logbook as CSV.
Ascents grouped into a session per date and crag, one reps-scored work unit each, with route/ascent grade, send-vs-attempt outcome, and climbing style (boulder, sport, trad, top-rope).
Fitbit — Google Takeout JSON
takeout.google.com → select Fitbit → export,
then unzip and, from Takeout/Fitbit/Global Export Data/,
select the JSON files (exercise-*, steps-*,
heart_rate-*, sleep-*, weight-*,
resting_heart_rate-*). Multi-select as many as you like — they merge into
one history.
Exercise logs become sessions (discipline, duration, distance, average heart rate); weight/BMI/body-fat, resting and intraday heart rate, step counts, and sleep stages become measurements. Add all the day/batch files at once — they're mapped together as a single Fitbit source. Folder- and zip-pick are a future enhancement; for now select the unzipped JSON files directly. Takeout timestamps carry no timezone, so local-day fields are read as UTC.
How it works
- Export your data from one of the apps above.
- Drop the file below — the format is detected automatically. Parsing happens entirely in your browser via JavaScript — the file is never sent anywhere.
- Review the summary and human-readable preview, then download the portable OpenBody JSON — and, for lifting exports, a Strong-format CSV that both Strong and Hevy can import.
What is "OpenBody JSON"?
The downloaded file is an array of OpenBody records — Session records for
workouts, plus Measurement records for Apple Health data like heart rate
and sleep stages. It's the same wire format documented in the
mapping guides and validated against the
JSON Schema: a plain, inspectable JSON file you
own. Move it between tools, check it into your own backup, or feed it to anything else
that speaks OpenBody.