How to import your print history from a CSV or spreadsheet
How to import your print history from a CSV or spreadsheet
Moving to SimplyPrint from another platform, or keeping your print log in a spreadsheet? You can bring the whole history in at once instead of retyping it. The importer reads a CSV or JSON file, lets you match its columns to ours, shows you exactly what will happen before anything is written, and then creates the jobs in one go.
This guide covers the file the importer expects, the columns you can map, how dates and outcomes are read, and what to do about rows it flags.
Contents
- What you can import
- Preparing your file
- The columns you can map
- How to run the import
- How dates are read
- How outcomes are read
- Matching printers and spools
- Reading the preview
- How many you can import, and how many you can open
- What the import does not do
- Coming from another platform
What you can import
Any tabular export of finished print jobs: a competitor's history export, an OctoPrint or Klipper job log you have massaged into a spreadsheet, or a sheet you have kept by hand for years.
Each row becomes one print job in your history, tagged with an Imported badge in the Source column so it is always distinguishable from a print we tracked live.
Preparing your file
- Format: CSV or JSON.
- Size: up to 10 MB.
- Required columns: a start date and an outcome. Everything else is optional.
- Headers: your first row should be the column names. They do not have to match ours, because you map them in the next step, but recognisable names get matched for you automatically.
The importer matches your headers to our fields wherever it can and leaves the rest for you to set in the mapping step. If you would rather it match everything with nothing left to do, name your columns exactly like this:
filename, printer_name, printer_id, started, ended, duration_seconds, outcome, rating, note, grams, material, color, spool_id
That is the shape the SimplyPrint option in the format dropdown expects.
The columns you can map
Two of these are required. The rest fill in as much or as little detail as your source has.
Column | Required | What it holds |
|---|---|---|
Started | Yes | When the print began |
Outcome | Yes | Successful, failed, cancelled or ongoing |
File name | No | The file or job name |
Printer name | No | A free-text machine name |
Ended | No | When the print finished |
Duration (seconds) | No | How long it ran, if you have no end time |
Rating | No | Print quality |
Note | No | Any comment on the job |
Filament used (g) | No | Grams consumed |
Material | No | PLA, PETG and so on |
Color | No | The filament colour |
Printer ID | No | A SimplyPrint printer ID, for a re-import |
Spool ID | No | A SimplyPrint spool ID, for a re-import |
Common header names are matched automatically. "File", "gcode", "job" and "print" all land on File name; "status", "result" and "state" land on Outcome; "date", "start", "timestamp", "start date" and "started at" land on Started; "printer", "machine" and "device" land on Printer name; "weight", "filament used" and "material used" land on Filament used. Anything the importer cannot place is left for you to map by hand, or to skip.
How to run the import
- Open Print history in the left menu, or go to simplyprint.io/panel/jobs.
- Click Import, next to "Log a print".
- Upload your CSV or JSON file. Leave the format on Auto-detect unless you know your file came from SimplyPrint, in which case pick SimplyPrint.
- Map the columns. Each of our fields gets a dropdown of your file's headers. Anything already matched is filled in for you, so usually you are just checking the guesses and filling the gaps.
- Check the preview. This resolves everything against your account without writing a thing, and reports errors and warnings per row.
- Click through to import. Rows are written in batches of 50, with a progress bar, so a few thousand jobs is fine.
- On the last step you can download a small CSV mapping each source row to the SimplyPrint job ID it became, which is worth keeping if you need to reconcile against your old system later.
Your history reloads as soon as the import finishes.
How dates are read
The importer is deliberately forgiving about date formats, because every platform writes them differently. It accepts:
- Unix timestamps in seconds, for example 1735689600
- Unix timestamps in milliseconds, for example 1735689600000
- Ordinary date strings, for example 2026-01-01 14:30:00, 01/01/2026, or 1 Jan 2026 14:30
A value it cannot read at all is reported as an error on that row rather than guessed at.
How outcomes are read
Whatever your old system called it, we map it onto one of our four outcomes. All of the following are understood:
Our outcome | Words we accept |
|---|---|
Successful | success, succeeded, successful, complete, completed, done, finished, ok, good, printed |
Failed | failed, fail, failure, error, errored |
Cancelled | cancelled, canceled, cancel, aborted, abort, stopped |
Ongoing | ongoing, printing, in progress, in-progress, running, active |
Capitalisation and surrounding spaces do not matter. A word we do not recognise is reported as an error on that row, quoting the value, so you can fix the source file and upload again.
Matching printers and spools
The importer tries to connect each row to things that already exist in your account.
- Printer ID is matched against your own printers. If the ID does not belong to your account, the row still imports and falls back to the printer name as plain text, with a warning telling you so.
- Printer name is kept as a free-text label. Jobs imported this way show the name you gave rather than linking to a machine.
- Spool ID is matched against your filament inventory the same way, with the same fallback: the filament is still logged, just without a spool behind it.
Reading the preview
The preview step is where you catch problems, and it is worth reading properly.
- Errors stop that row importing. The two you will actually hit are a missing or unreadable start date, and a missing or unrecognised outcome. Fix them in your source file and upload again.
- Warnings do not stop anything. They tell you the row imported with something less than you asked for, such as a printer ID that was not yours, a spool ID we could not find, or a finished job with no end time.
Rows with errors are simply skipped, so a handful of bad rows never blocks the rest of the file.
How many you can import, and how many you can open
Two different numbers apply, and they are worth keeping apart.
How many you can import. Manual and imported prints share one allowance per account:
Plan | Manual + imported prints |
|---|---|
Free | 1,000 |
Basic | 2,500 |
Pro | 10,000 |
Print Farm, School, Enterprise | Unlimited |
This is a total, not a per-file figure, and prints you logged by hand count towards it too. The preview step tells you where you stand before the import runs, so a file that would overshoot is caught up front rather than stopping half way through.
How many you can open. Separately, your plan sets how many past jobs you can view in full: the 50 most recent on Free, 100 on Basic, 500 on Pro, and all of them on Print Farm, School and Enterprise. That window counts by start date across your whole history, tracked and imported alike.
So on Free you can import up to 1,000 old jobs, all 1,000 rows are created and kept, and the 50 most recent by start date are the ones you can open. The rest appear as locked placeholder rows.
What the import does not do
Imported jobs are purely historical records, and we keep them inert on purpose.
- Filament stock is never subtracted. The grams are recorded against the job, but your spools are not drawn down, because these prints already happened, possibly years ago.
- Nothing is sent to any printer, no queue item is touched, and no notifications go out.
- Costs are not recalculated from your current cost settings during a bulk import.
Coming from another platform
The same wizard imports more than history. On the relevant page you will find an Import button for:
- Filament, covered in how to import your filament inventory
- Users, covered in importing users from a CSV or directory export
- Dashboards, as a JSON document exported from SimplyPrint
Doing your filament first pays off, because then your imported jobs can reference real spools by ID instead of landing as loose text. Printers have no bulk importer, so add those the usual way, or as virtual machines, before you import the history that references them.
Related articles
- How to log a print by hand in your print history
- The print history feature: your searchable log of every print job
- How to import your filament inventory into SimplyPrint
- Virtual machines: add lasers, CNCs and log-only printers
- The statistics dashboard
Updated on: 19/08/2026
Thank you!