Features Integrations AI & API Pricing Blog Docs
Overview WHOOP Oura Withings Apple Health Glucose Hevy Lab Tests Training Data REST API AI & Claude MCP Server

Training data (gym workouts)

Build one clean strength-training history from Hevy, MacroFactor, manual entries, AI-assisted logs, and API uploads.

One Training Log, multiple ways in. VitalTrends normalizes sessions, exercises, sets, equipment, muscle groups, and timing into the same personal history, then uses that history for charts, records, and exercise progression.

Choose how to add workouts

MethodBest forHow it worksWhere 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

  1. Open Training Log and expand Import.
  2. Paste a header plus one row per exercise. All rows in one paste become one session.
  3. 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 the real start time when you know it. Precise timing helps VitalTrends group the strength log with an overlapping WHOOP, Apple Health, Oura, Withings, or other device workout. A date-only import is not joined by a loose same-day guess.

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

  1. Create or copy your API key in Hevy developer settings.
  2. Open Connections -> Hevy in VitalTrends.
  3. 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

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:

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:

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

  1. Open Manage Exercises and export the names CSV.
  2. Ask an AI to identify only high-confidence duplicates and return groups with one preferred name.
  3. Review machine model, movement pattern, grip, and unilateral differences yourself. Similar names are not always the same exercise.
  4. Apply the accepted groups in Manage Exercises, or send each accepted rename through the write API.
  5. 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

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