SwoLifts exports your data as a ZIP of CSV files. You can import the same format back into the app, or use the templates below to bulk migrate workouts, custom exercises, and workout templates from another tool.

Empty starter

Blank CSV Template

Header-only CSV files at the ZIP root. Use this when you want to start clean and fill in your own data.

Download Blank ZIP
Worked example

Example CSV Template

Sample workouts, templates, and sets that match built-in SwoLifts exercises. Use it as a reference while editing.

Download Example ZIP
Migration workflow

Edit on Desktop, Import on Android

The import ZIP should contain the CSV files directly at the root of the archive.

  1. Download the blank or example ZIP above.
  2. Extract it on your computer and edit the CSV files in Excel, Google Sheets, Numbers, or a text editor.
  3. Keep the header row exactly as provided. Remove CSV files you do not need to import.
  4. Zip the edited CSV files again so files such as workout_sessions.csv and exercise_sets.csv are at the ZIP root.
  5. Move the ZIP to your Android device.
  6. Open SwoLifts and go to Settings, then choose Import Workout Data.

Exporting existing data

Every export contains valid CSV files with headers, plus sample files under an examples/ folder. SwoLifts ignores files under examples/ during import, so they are safe to keep, edit, or delete.

CSV rules

Format Requirements

These rules match the SwoLifts importer.

  • Files are UTF-8 CSV. Values containing commas, quotes, or line breaks must be quoted, and quotes inside values must be doubled.
  • The first row is the header. Do not remove or rename columns.
  • Blank cells mean no value. Leave optional fields blank when unused.
  • CSV weights are in pounds. SwoLifts converts them internally if you use kilograms in the app.
  • Dates and times use ISO 8601 UTC, for example 2026-04-17T14:30:00Z.
  • Exercise names must match a built-in exercise or a row in custom_exercises.csv. Import matching tolerates common casing, punctuation, spacing, and abbreviation variants.
  • bodyweight.csv is exported for external tools only. To import bodyweight, use bodyweightLbs in workout_sessions.csv.
Supported files

CSV Reference

Only include the CSVs you need. Required fields are required only when that file is present.

custom_exercises.csv

Add user-created exercises. Built-in exercises should not be listed here.

ColumnRequiredNotes
nameYesUnique exercise name.
primaryMuscleGroupNoDefaults to Other if blank.
categoryNoStrength, Cardio, Bodyweight, Stretching, or Other.
equipmentNoAny descriptive equipment value.
loggingTypeNoreps_weight, duration_only, duration_distance, or sets_duration. Defaults to reps_weight.
loadTypeNoexternal_weight, bodyweight, weighted_bodyweight, or assisted_bodyweight. Used for reps_weight exercises.
source, sourceId, sourceLicense, sourceUrlNoOptional source metadata.
isDeletedNotrue or false. Defaults to false.

workout_templates.csv

ColumnRequiredNotes
idYesAny unique string referenced by template_exercises.csv.
nameYesTemplate name. Existing names are skipped on import.
descriptionNoOptional template description.

template_exercises.csv

ColumnRequiredNotes
templateIdYesMust match an id in workout_templates.csv.
templateNameNoInformational only. Ignored by import.
exerciseNameYesBuilt-in exercise name or custom exercise name.
orderIndexYesZero-based exercise position in the template.
targetSets, targetRepsNoWhole numbers.
targetWeightLbsNoDecimal pounds for external or weighted bodyweight targets.
targetAssistanceWeightLbsNoDecimal pounds for assisted bodyweight targets.
targetDurationSecondsNoWhole seconds for duration targets.

workout_sessions.csv

ColumnRequiredNotes
idYesAny unique string referenced by exercise_sets.csv.
templateNameNoInformational only. Imported sessions are not linked back to templates.
nameYesWorkout name.
startTimeYesISO 8601 UTC timestamp.
endTimeNoISO 8601 UTC timestamp. If blank, the start time is used — imported sessions are always treated as completed.
notesNoOptional workout notes.
bodyweightLbsNoBodyweight snapshot for that workout.

exercise_sets.csv

ColumnRequiredNotes
sessionIdYesMust match an id in workout_sessions.csv.
exerciseNameYesBuilt-in exercise name or custom exercise name.
setNumberYesOne-based set number.
repsNoWhole number of reps.
weightLbsNoDecimal pounds for external or weighted bodyweight work.
assistanceWeightLbsNoDecimal pounds for assisted bodyweight work.
durationSecondsNoWhole seconds.
distanceMetersNoDecimal meters for cardio distance.
rirNoReps in reserve, as a whole number.
completedAtNoISO 8601 UTC timestamp for when the set was completed. If blank, the session's end time is used so imported sets still count toward Progress charts and PRs.
notesNoOptional set notes.
Merge behavior

Duplicate Imports Are Skipped

Import is designed as a merge, not a blind append.

  • Custom exercises are skipped when the normalized exercise name already exists.
  • Workout templates are skipped when a template with the same name already exists.
  • Workout sessions are skipped when the same workout name and start time already exist.
  • Sets and template exercises attached to skipped parent rows are skipped with the parent, so importing the same export again should not duplicate the data.

Validation warnings

SwoLifts reports warnings for missing required columns, invalid numbers, invalid dates, unknown exercises, or child rows that do not match a parent row. Valid rows can still import even when other rows have warnings.