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.
// FREE TOOL //
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.
Imports into IronLedger as “My Program”: 2 weeks, 4 sessions, 12 exercises, with nothing to fix.
// WHAT THE APP WILL CREATE //
Session 1
Session 2
Session 3
Session 4
// THE FORMAT //
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.
| Column | Required | What it holds |
|---|---|---|
| Week | Recommended | The week number: 1, 2, 3. “Week 2” and “wk 2” also work. |
| Day | Recommended | The session within the week: Day 1, Day 2. “Session 2” also works. |
| Exercise | Required | The exercise name. Library names import silently (see below). |
| Sets | If present | A whole number, or a range such as 2-3, which imports as the top number. |
| Reps | If present | Text: 5, 8-12, 5+ for as many as possible, or one per set as "5, 5, 3". |
| Load | No | A plain number in the lifter’s unit, a range, or one per set as "100, 105, 110". Blank means start from the last load. |
| RPE | No | The effort target as RPE. |
| RIR | No | The effort target as reps in reserve. |
| Rest | No | Rest between sets: 90, 90s, 2 min, 1:30 or 1m30s. |
| Notes | No | Cues and instructions, kept with the exercise. |
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.
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.
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 //
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.
A name in the library imports silently and joins that exercise’s history.
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.
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 //
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.
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.
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 //
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 //
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.
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.
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.
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.
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.
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.
// SOURCES //
In IronLedger, open the Routine tab and tap Import under Load a program. With a program already loaded, open the Library, tap +, then Import instead. Pick the file, review the same diagnostics you see here, then tap Import. Free, with no subscription. iPhone now; Android is in closed testing.
Get IronLedger free on iOSThe 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.
// MORE TOOLS //
Your estimated 1RM from any set, with a percentage table and the load each rep count should allow.
Estimate your max bench from a set of reps, with bench-specific notes on what counts as a rep.
Turn RPE and reps into a percentage of your max, estimate a max from an RPE set, or find the load for a target.