Articles on: Printing: start, queue & track

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.


Importing print history is available on every plan. It needs the Edit print history permission, the same one that lets you log a print by hand. Two plan limits are worth knowing before you import a large history: how many prints you may log or import in total, and how many past jobs you can open. Both are covered below.


Contents


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.


The importer is for history. If you only have one or two jobs to record, log them by hand instead, which gives you a richer form.


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.


Our own print history CSV export is a different shape. It is built for accounting and reporting, so it uses headers like start_date and print_time. Its status column is recognised as the outcome, but start_date is not recognised as the start, and Started is required. You can still import that file, you will just map a few columns by hand, or rename the headers first using the list above.


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.


Matching is done on the header as written, so "start date" is recognised while "start_date" is not. If a column you expected to be matched came through blank in the mapping step, swapping underscores for spaces in your header row usually fixes it.


A finished job with no end time and no duration will fall back to ending at the same moment it started, so its print time reads as zero. Map either Ended or Duration if your source has one.


How to run the import

  1. Open Print history in the left menu, or go to simplyprint.io/panel/jobs.
  2. Click Import, next to "Log a print".
  3. 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.
  4. 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.
  5. Check the preview. This resolves everything against your account without writing a thing, and reports errors and warnings per row.
  6. Click through to import. Rows are written in batches of 50, with a progress bar, so a few thousand jobs is fine.
  7. 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.


Want your imported jobs attached to real machines rather than text labels? Add the machines first, as connected printers or as virtual machines, then put their IDs in a Printer ID column before importing.


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.


Imported history is usually older than the prints you already have, so it tends to land outside the viewing window immediately. That is expected, and it is not a failed import.


Nothing is ever deleted by the viewing limit. The rows are stored in full, and upgrading opens every one of them again straight away.


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.


Imported prints count towards your account's own statistics by default. Turn that off under Settings, General, with Include manually-logged & imported prints in statistics if you would rather your charts reflect only what SimplyPrint tracked itself. Our public, platform-wide statistics never include them.


Coming from another platform

The same wizard imports more than history. On the relevant page you will find an Import button for:



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.


Updated on: 19/08/2026

Was this article helpful?

Share your feedback

Cancel

Thank you!