Everything you have logged, or just a window of it, as one JSON document. It is built on the phone and handed to the iOS share sheet; it goes only where you send it. Field names read as English and dates are ISO 8601, so the file works as direct input to a spreadsheet, a script or a language model without a decoder ring.
Settings › Your data. Pick a timeframe, tap Build a JSON export, then Save or share the export. The summary under the button leads with the span the file covers and counts the diary entries, workouts, Apple Health workouts and habit ticks inside it, so "I thought I exported just yesterday" is caught before sharing. Changing the timeframe discards a built file; the share button never hands out a file from a different span.
| Timeframe | Covers |
|---|---|
| Today | Today only. |
| Yesterday | Yesterday only. |
| Last 7 days | Today and the six before it. |
| Last 30 days | Today and the 29 before it. |
| Last 90 days | Today and the 89 before it. |
| Custom range | Two dates you pick, inclusive, neither in the future. |
| Everything | Full history. |
Windows are whole calendar days in your own time zone, the same grouping
the diary uses. The file is named for what it holds:
setpoint-export-2026-10-11-to-2026-10-17.json for a window,
setpoint-export-2026-10-17.json for full history, dated the
day it was built.
America/New_York, so a tool groups days the way you
do instead of guessing.2026-10-17T22:14:00-04:00, rather than UTC. A ten p.m. dinner
belongs to that calendar day and any tool grouping by date must see it
there. Still RFC 3339; every standard parser reads it. Day fields such as
day, firstDay and healthWriteSince are
plain dates, 2026-10-17.| Key | What it holds |
|---|---|
| schema, exportedAt, timezone, appVersion | The file's own facts. |
| covers | firstDay and lastDay of the window. Absent for full history. |
| profile | Date of birth, sex, height, weight, activity level, weight goal, pace in kg per week, target weight and date if set, protein mode and figures, unit preference, and the goal metric (weight, bodyFatPercent or fatMass) with its target and the date it last changed. The goal metric is never an input to the targets. |
| currentTargets | Today's typical budget: kcal, protein, carbs, fat and fiber in grams, computed from the profile and the baseline movement figure. |
| dailyTargets | One row per logged day: the day, Apple Health's measured movement for it when there was any, the basis the budget used (measured, projected, estimated, coldStart) and the targets the app displayed that day. Without these a tool comparing entries against currentTargets concludes the diary is missing food that was never missing. Judged by the current profile, like everything else. |
| foodDiary | Each entry, oldest first: loggedAt, meal, name, brand, quantity, portion, grams, kcal, proteinG, carbG, fatG, fiberG when known, source (the database it came from), weightIsNominal when the grams are a stand-in for a counted serving rather than a weight, and uuid, the same id the entry's Apple Health samples carry when the food log is shared. |
| weighIns | date, weightKg, fromHealthKit, and source: manual for a typed weigh-in, otherwise the Health source's name, so a reader can tell your number from the scale's. |
| bodyComposition | One row per day a scale reported: date, bodyFatPercent (a percent, 28.4, not a fraction), weightKg (the weight the masses were derived from: the scan's own, else the day's weigh-in), fatMassKg and leanBodyMassKg (weight × percent, and the rest, so fat + lean = weight), reportedLeanBodyMassKg (what the scale said, kept for the record), coherenceFlag (present, and true, only when the reported lean mass disagrees with the derived one by more than 50 g), source. Masses are absent when no weight existed to derive them. Whatever covers says, every reading in the median's 14-day window is included, so the headline can be checked against the rows it came from. |
| currentBodyComposition | Where composition stands as of the export, from the whole history, whatever the window: the latest reading; median, the median reading of the last 14 days as one full row (date, bodyFatPercent, fatMassKg, leanBodyMassKg, weightKg, source), the readings sorted by body fat percent and the lower middle one taken, so it is a real measurement whose figures balance; readingsInWindow and medianWindowDays (14); the change in body fat, fat mass and lean mass against the reading nearest 30 days back; and stale, true when the newest reading is over 14 days old. median is absent, not zero, under three readings in the window or when stale, and the trend then stops at latest. |
| healthWriteEnabled, healthWriteSince | Whether the food log is being pushed to Apple Health and from which day, so a reader knows another store may hold a copy of the diary. healthWriteSince is always a real day: when the whole log is shared it is the first diary entry's day. Present only while sharing is on. |
| measurements | Measured days: date, note, sites (each with site, centimeters, inches, fromHealthKit) and photos (each with filename, pose, date). Photo bytes are not in the file. |
| workouts | Everything trained, in one list, oldest first, the way Session history shows it. source is logged for a session with sets entered here or apple-health for one only the Watch knows about. A logged session carries its plan (the prescribed sets with their progression decision record), its sets, its notes, an optional watchRecording (the Health record of the same workout: activity, duration, kcal, average heart rate, and which app recorded it), and lightSession when it was planned light. One workout, two records of it, never two workouts. |
| unattachedSets | Sets whose session is not in the file. |
| workoutTemplates | Each template's name and exercises in order. |
| exerciseSettings | The progression rules per exercise, as suggestions applied them: increment, equipment, floor and bar weight, band levels, rep range, set structure, working and warm-up set counts, gate, maximum jump, technique and retired flags, calibrating state. |
| exercisesMarkedDone | Exercise and day for each "done" mark. |
| customExercises | Name, primary muscle, equipment, notes. |
| habitChecks | Each tick: habit, day, and origin, which is auto for a tick the app credited and otherwise a manual one. |
| activeHabits | The habits currently chosen, by slug. |
| customHabits | Name and cue. |
| recipes | Name, servings, source link, instructions, the original ingredient text, and each ingredient with its matched name, quantity, portion, grams, weightIsNominal when the grams are a stand-in, kcal, protein and fiber. |
| customFoods | Name, brand, values per 100 g, or perServing naming the serving the values are for. |
Every set and planned set carries weightKg and
weightLb. A lifter reading plan against actual thinks in plates,
and 34.02 kg hides that it was 75 lb. Sets also carry setNumber,
reps, completedAt, and when present rating,
failReason, deviation, pain,
side and warmup. Planned sets carry the decision
record: rule, baseLb, deltaIncrements,
previousLb, previousReps, previousRating,
gateRemaining, ladderRepaired, governingSet
and explanation. The rules are described on the
Train page.
Caches, day locks, and the per-food correction plumbing (custom portions and nutrition overrides). Diary entries snapshot their nutrition at logging time, so the record is complete without the machinery behind it. Photo bytes, which live in the app's folder. Anything from Apple Health that you did not connect.
A one-day file, cut down to show the shape. Values are illustrative.
{
"appVersion" : "1.0",
"covers" : {
"firstDay" : "2026-10-17",
"lastDay" : "2026-10-17"
},
"currentBodyComposition" : {
"bodyFatPercentChange30Days" : -0.8,
"latest" : {
"bodyFatPercent" : 24.1,
"coherenceFlag" : true,
"date" : "2026-10-17T06:42:00-04:00",
"fatMassKg" : 19.52,
"leanBodyMassKg" : 61.48,
"reportedLeanBodyMassKg" : 61.4,
"source" : "Withings",
"weightKg" : 81
},
"median" : {
"bodyFatPercent" : 24.4,
"date" : "2026-10-12T06:40:00-04:00",
"fatMassKg" : 19.86,
"leanBodyMassKg" : 61.54,
"source" : "Withings",
"weightKg" : 81.4
},
"medianWindowDays" : 14,
"readingsInWindow" : 6,
"stale" : false
},
"dailyTargets" : [
{
"basis" : "projected",
"day" : "2026-10-17",
"movementKcal" : 412,
"targets" : { "carbG" : 225, "fatG" : 47, "fiberG" : 20, "kcal" : 1703, "proteinG" : 96 }
}
],
"exportedAt" : "2026-10-17T21:05:12-04:00",
"foodDiary" : [
{
"carbG" : 1.1,
"fatG" : 9.5,
"grams" : 100,
"kcal" : 143,
"loggedAt" : "2026-10-17T08:05:00-04:00",
"meal" : "breakfast",
"name" : "Egg, whole, raw, fresh",
"portion" : "2 large",
"proteinG" : 12.6,
"quantity" : 1,
"source" : "usda_foundation",
"uuid" : "6B1C2F0E-3D7A-4C7B-9E1F-2A0B5C8D9E10"
}
],
"healthWriteEnabled" : false,
"schema" : 8,
"timezone" : "America/New_York",
"weighIns" : [
{
"date" : "2026-10-17T06:41:00-04:00",
"fromHealthKit" : true,
"source" : "Withings",
"weightKg" : 81
}
]
}
See also: Apple Health, Privacy.