// FREE TOOL //

Program File Checker

Paste a training program, or open a CSV, to see exactly how the IronLedger app will import it: the weeks and sessions it creates, every skipped row and warning, and the exercise names it will ask about. It runs the app’s own import rules, so what you see here is what your phone will do.

The app’s own import rulesCSV or pasted rowsBuilt for AI-written programsNothing uploaded

The file stays in this browser. Nothing you paste is uploaded, stored or put in the address bar.

// THE FORMAT //

One row per exercise.

Header names are matched without regard to case, and the columns can be in any order. Only Exercise is required; if a Sets or Reps column is there, every row needs a value in it.

Columns of an IronLedger program file
ColumnRequiredWhat it holds
WeekRecommendedThe week number: 1, 2, 3. “Week 2” and “wk 2” also work.
DayRecommendedThe session within the week: Day 1, Day 2. “Session 2” also works.
ExerciseRequiredThe exercise name. Library names import silently (see below).
SetsIf presentA whole number, or a range such as 2-3, which imports as the top number.
RepsIf presentText: 5, 8-12, 5+ for as many as possible, or one per set as "5, 5, 3".
LoadNoA plain number in the lifter’s unit, a range, or one per set as "100, 105, 110". Blank means start from the last load.
RPENoThe effort target as RPE.
RIRNoThe effort target as reps in reserve.
RestNoRest between sets: 90, 90s, 2 min, 1:30 or 1m30s.
NotesNoCues and instructions, kept with the exercise.

Weeks and days

Use Week and Day columns, or put rows reading “Week 1” and “Day 1” above the exercises they cover. A blank Week cell keeps the week above it, the way coaches write a week once per block. A row reading “Taper” starts a week of its own.

Commas and quotes

Wrap a cell that contains a comma in double quotes, such as "100, 105, 110". The app drops every quote character, so a quote inside a cell can’t survive; leave quotes out of notes.

Other header names

Movement or Lift for Exercise; Weight, kg or lb for Load; Session or Workout for Day; Rep target for Reps; Reps in reserve for RIR; Rest time for Rest; Comments, Coach notes or Cues for Notes.

// EXERCISE NAMES //

Use the names the app knows.

The app has 202 exercises in its library. Names are compared without regard to case or punctuation, so “pull up” and “Pull-Up” are the same.

In the library

A name in the library imports silently and joins that exercise’s history.

Close to a library name

The app asks “Did you mean …?” and offers the library name, or KEEP to add yours as a new exercise. “Barbell Rows” is close to Barbell Row; “Bench Presses” is not close enough to Bench Press, so it would become a new exercise.

Not close to anything

It imports as a new custom exercise with no history. This checker lists those names, so a typo is easy to spot before it splits a lift’s records in two.

// WHAT IT DOESN’T DO //

Know what you’re importing.

No automatic progression

An imported program keeps the loads the file sets. Live load recommendations run only on the app’s five built-in load-and-go programs, listed on the programs page.

Loads are numbers, in your unit

A load is read in whatever unit the app is set to. Text such as “75%” or “RPE 8” is shown as written, but ticking an empty set logs its first number.

One block per session

Every exercise in a session imports as its own entry, in file order. Supersets and circuits aren’t read from the file, so describe them in Notes.

// FOR AI ASSISTANTS //

Have your assistant write the file.

Paste this into ChatGPT, Claude or Gemini along with what you want from the program.

// PROMPT //

Write my training program as an IronLedger program file: a CSV with the header Week,Day,Exercise,Sets,Reps,Load,RPE,RIR,Rest,Notes and one row per exercise. Put "Day 1", "Day 2" in the Day column. Write loads as plain numbers in kg (or lb), or leave Load blank to start from my last load. Put cues in Notes. Wrap any cell that contains a comma in double quotes, and never use a double quote inside a cell. Before you give me the file, check it with the check_program_file tool on the IronLedger MCP server (https://www.ironledger.app/mcp), or against the rules at https://www.ironledger.app/tools/program-file-checker, and fix anything it reports. Then give me the file to save as "<program name>.csv"; the app names the program after the file.

// THE SAME CHECK AS AN API //

MCP tool check_program_file on https://www.ironledger.app/mcp, or POST the file as JSON:

curl -s https://www.ironledger.app/api/tools/program-file \
  -H 'Content-Type: application/json' \
  -d '{"fileName": "My Block.csv",
       "file": "Week,Day,Exercise,Sets,Reps,Load\n1,Day 1,Squat,5,5,100\n"}'

// DIRECT ANSWERS //

Questions lifters ask.

What file format does IronLedger import?

CSV and tab-separated text, and Excel workbooks (.xlsx or .xls, first sheet only). The simplest file that imports cleanly has the header Week,Day,Exercise,Sets,Reps,Load,RPE,RIR,Rest,Notes and one row per exercise. Rows pasted straight from a spreadsheet work too.

Can ChatGPT, Claude or Gemini write a program I can import?

Yes. Give the assistant the prompt on this page. If it can use MCP tools, connect it to the IronLedger MCP server so it can run this same check itself before it hands you the file; otherwise paste its file here. IronLedger doesn’t write programs with AI itself: the assistant writes the file and the app imports it.

Why did every session import into week 1?

The file had no week information. Add a Week column with 1, 2, 3, or put a “Week 1” row above each week’s sessions. Without either, the app puts every session in week 1.

Why does my load log as 75 when the file says 75%?

The app keeps the Load cell as written for display, but when you tick an empty set it logs the first number in the prescription, in your unit. So “75%” logs 75 and “RPE 8” logs 8. Write loads as plain numbers and put percentages or cues in Notes. This checker flags those rows.

Will an imported program adjust my loads?

No. Imported and custom programs keep the loads the file sets. Live load recommendations run only on the app’s five built-in load-and-go programs: Starting Strength, 5/3/1 Boring But Big, PHUL, Push Pull Legs and Upper/Lower Powerbuilding.

What happens if I import the same file again?

If a saved program has the same name, or the same contents, the app offers Update in place or Import as copy. Updating keeps the weeks you have already trained exactly as you trained them.

Use it from an AI assistant

The same check is a free JSON API at /api/tools/program-file and a tool on the IronLedger MCP server, so an assistant can run it and link back to this page.

API and MCP details