Training data (gym workouts)
Build one clean strength-training history from Hevy, MacroFactor, manual entries, AI-assisted logs, and API uploads.
Choose how to add workouts
| Method | Best for | How it works | Where to edit |
|---|---|---|---|
| Manual paste | A workout you want to enter quickly | Paste one CSV row per exercise into the Training Log import box. Sets such as 12x52kg are parsed in order. |
VitalTrends |
| Hevy | Continuous automatic gym logging | Connect a personal Hevy API key once. VitalTrends backfills history, then keeps changes current through webhooks and scheduled sync. | Hevy, then sync |
| MacroFactor | Moving an existing workout history | Upload the original MacroFactor .xlsx workbook or CSV export. One file can create many sessions. |
VitalTrends after import |
| AI-assisted | Turning notes, messages, or a gym log into structured data | Ask an AI to return the Training Log CSV shape, review it, then paste it, or let an authorized agent call the write API. | VitalTrends |
| REST API | Apps, scripts, automations, and custom agents | Create structured sessions or flat exercise rows with a VitalTrends API key that has workout:write. |
VitalTrends or your integration |
| MCP | Asking an AI about existing workout data | The current MCP tools can read the unified workout feed and Hevy workouts. Training Log writes still use the REST API. | Read-only |
Manual entry from the Training Log
- Open Training Log and expand Import.
- Paste a header plus one row per exercise. All rows in one paste become one session.
- Select Import session, then open the new session to review its date, time, exercises, and sets.
date,time_lisbon,exercise,equipment,muscle_group,set_1,set_2,set_3,notes
2026-08-28,18:10 WEST,Pec fly,Hoist ROC-IT,chest,12x45kg,10x50kg,8x55kg,Controlled tempo
2026-08-28,18:25 WEST,Lat pulldown,Hoist ROC-IT,back,12x52kg,12x52kg,10x61kg,
Set columns continue as set_4, set_5, and so on. Weight can be written in kilograms or pounds. A bodyweight set can be just the rep count. The first valid row time becomes the session start when no top-level time is supplied.
Use AI to structure a workout
An AI can turn informal notes into the same rows used by manual paste. Give it the required header, your preferred weight unit, the workout date and time, and a rule not to invent missing values.
Convert my gym notes into CSV for VitalTrends.
Use exactly this header:
date,time_lisbon,exercise,equipment,muscle_group,set_1,set_2,set_3,notes
Use one row per exercise. Format each set as reps x weight and unit,
for example 12x52kg. Leave unknown fields empty and do not guess.
Workout: 28 August 2026 at 18:10 in Lisbon
Notes: Hoist pec fly, 45 kg x 12, 50 kg x 10, 55 kg x 8.
Review names, units, times, and sets before importing. For recurring automation, create a VitalTrends API key under Developer settings, enable workout:write, and give the key only to the agent or integration that needs it. A read-only key cannot change workouts.
An API-connected AI can create sessions, preview deduplication without writing, read them back, edit session timing and exercises, delete agent-created sessions, attach uploaded exercise media, and rename one exercise across matching history. See the workout API reference for payloads and error behavior.
Connect Hevy
- Create or copy your API key in Hevy developer settings.
- Open Connections -> Hevy in VitalTrends.
- Save the key. VitalTrends validates it, encrypts it at rest, and starts the historical backfill.
Hevy sync includes workout title and notes, start and end time, exercise order, template identifiers, supersets, set type, reps, weight, distance, duration, RPE, and available muscle-group metadata. Later Hevy edits and deletions sync automatically.
Hevy owns its synced sessions. They are visible throughout VitalTrends, but their session and set data is read-only here. Make those changes in Hevy. Personal exercise-name normalization inside VitalTrends changes charts and future matching without renaming the upstream exercise in Hevy.
For connection status, sync details, webhook behavior, and Hevy-specific API routes, see the Hevy guide.
Import MacroFactor history
In the Training Log import area, select Import MacroFactor file and choose an original .xlsx workbook or MacroFactor CSV export. VitalTrends preserves supported warm-up and standard sets, reps, weight, duration, distance, and RIR-derived RPE. Re-importing the same file uses stable session identities instead of creating duplicates.
MacroFactor exports do not provide an exact workout start time. Imported sessions use 12:00 in your profile timezone and remain separate from device workouts unless a reliable match exists. Familiar exercise names receive a muscle group automatically, while unknown names remain visible for you to classify.
What the Training Log shows
- Lifetime sessions, total sets, total lifted volume, weekly consistency, records, and latest session.
- A front and back muscle-load map with 12-week, 12-month, and all-time windows.
- Weekly or monthly volume trends and a recent training-frequency heatmap.
- Personal records ranked by heaviest load and reps.
- A paginated list of sessions from every Training Log source.
Lifted volume is calculated from weight multiplied by reps and stored canonically in kilograms. VitalTrends displays weight in the unit selected in your profile.
Review and edit a session
Open a session from the Training Log to inspect its full grouped history. For sessions created by an import, agent, or API, you can change the title, date, start time, end time or duration, exercise names, equipment, muscle groups, and sets. You can add or remove exercises and sets, or delete the session.
When several sources describe the same physical workout, the session page keeps source provenance while presenting one workout. Precise start and duration data improve matching. Hevy-synced session fields stay source-managed and must be edited in Hevy.
Exercise history and progression
Select an exercise name anywhere in Training Log to open its personal history. The page combines every matching occurrence across sources and shows:
- All sessions and sets in chronological history.
- Heaviest logged load and best estimated one-rep max.
- Total volume and session-by-session progression.
- Exercise notes, equipment, set type, reps, load, and RPE. Distance and duration remain available in workout-log data when present.
- Aliases that currently resolve to the same exercise.
Estimated one-rep max uses the Epley formula for sets between 1 and 30 reps. It is a training estimate, not a measured maximum.
Normalize exercise names
Small naming differences can split one movement into several charts, for example Pec Fly and Hoist ROC-IT Pec Fly. VitalTrends gives you several cleanup options:
- Edit Name on an exercise history page renames that exercise. Reusing an existing name combines both histories.
- Manage Exercises lists your complete exercise library, suggests likely duplicates, previews the combined session and set counts, and supports conservative bulk cleanup.
- Add alias teaches VitalTrends that another incoming name belongs to the canonical exercise.
- Detach separates one source name from a merge, and eligible merges can be undone for 30 days.
- Export names CSV downloads the exercise-name inventory for review in a spreadsheet or with AI.
PATCH /api/v1/training/exercises/renameperforms the same rename-and-combine workflow through the API.
Old names remain personal import aliases after a merge, so future workouts using an older name continue to join the correct chart. Historical workout rows are not deleted.
A practical AI cleanup workflow
- Open Manage Exercises and export the names CSV.
- Ask an AI to identify only high-confidence duplicates and return groups with one preferred name.
- Review machine model, movement pattern, grip, and unilateral differences yourself. Similar names are not always the same exercise.
- Apply the accepted groups in Manage Exercises, or send each accepted rename through the write API.
- Use the Merged tab to inspect, detach, or undo recent changes.
Muscle groups
VitalTrends uses a canonical muscle group on each exercise to build the body-load map and volume rollups. Hevy templates and familiar MacroFactor exercises can supply a group automatically. API and pasted rows can include muscle_group. Unknown exercises appear under Needs muscle group.
Classify an unknown exercise once from the review queue, session editor, or workout detail. Your personal mapping immediately updates historical analytics and is reused for future imports with the same normalized exercise name.
Read, write, and export
- REST API: list and read Training Log sessions; create, preview, edit, and delete writable sessions; replace exercise trees; upload media; query muscle-group usage; and bulk rename exercises.
- MCP: ask compatible AI clients about the unified workout feed or nested Hevy workouts. Training Log write tools are not currently exposed through MCP.
- Exercise names CSV: export the complete naming inventory from Manage Exercises for cleanup and normalization.
- Account export: connected Hevy export contains one row per set with workout and exercise context.
Use the REST API reference for every endpoint and field, the AI guide for analysis workflows, and the MCP guide for supported read tools.
Current boundaries
- VitalTrends analyzes completed workout history. It is not currently a live workout timer or routine planner.
- Renaming or classifying a Hevy exercise in VitalTrends does not modify Hevy.
- Hevy-synced sessions are source-managed; edit the underlying workout in Hevy.
- MacroFactor exports lack exact start times, so VitalTrends does not join them to device workouts by date alone.
- Automatic name suggestions are starting points. Different machines, grips, ranges of motion, and unilateral variants may deserve separate histories.
- AI output should always be reviewed before it is imported or authorized to write.