Overview
Spreadsheets remain how most merchants think about bulk work. A supplier sends a price list as CSV; the finance team wants last quarter’s orders in Excel; a migration from another platform arrives as one enormous product export. Spree handles both directions as background work, so a hundred-thousand-row file doesn’t tie up a browser tab or time out.What can be imported and exported
Orders are export-only on purpose. An order is a financial record of something that happened; inventing them from a spreadsheet would let the books say something that never occurred.
Exporting
An export is created, runs in the background, and produces a file to download.Exporting a filtered set
An export can carry the same filters as the listing it came from, so “export what I’m looking at” does what a merchant expects — this quarter’s orders, this brand’s products, not the entire table.Importing
Importing has an extra step, because a file from somewhere else won’t have Spree’s column names. You upload it, say which of your columns means what, and then it runs.1
Upload the file
Admin SDK
2
Match columns to fields
Admin SDK
3
Watch it run
Admin SDK
Download a template for any import type to see the expected columns — the quickest way to prepare a file that maps cleanly.
When rows fail
Some rows will fail. A price with a currency symbol in it, a required field left blank, a duplicate SKU. A failed row doesn’t stop the import. The good rows are imported; the bad ones are set aside with the reason.Interrupted work resumes
Imports remember which row they reached. If the server restarts halfway through a large file, processing picks up where it stopped rather than starting again or skipping the remainder.Products with several variants
A product with variants spans several rows — one per variant, repeating the product columns. Rows are grouped by the product identifier, so a t-shirt in three sizes is three rows and becomes one product. Custom fields can be imported too: a column matching a custom field you’ve defined maps to it like any built-in field.Knowing when it’s finished
Imports and exports emit events as they progress, which also reach webhooks. That’s how you trigger the next step of a pipeline — notify a channel, kick off a reindex — without polling.
There is no event when an export’s file is ready — poll the export until
done is true.
Permissions
Import and export are gated by the same permissions as the data they touch. Someone who can’t see customers can’t export them — otherwise export would be a way around the whole permission system.Related
- Products — the most-imported data
- Custom Fields — importing your own fields
- Events — reacting to completion
- Staff & Roles — who may import and export

