Skip to main content

Product import

Reached from: Import on the catalogue, or ?action=import Permission: Import Products


1. What the importer is​

A three-step CSV loader for creating many products at once.

products.import is a separate permission from products.create

A role that can create products one at a time does not get the Import button. Grant Import Products explicitly.

Figure 1 — Step 1 of 3. The column contract is stated on the screen.

2. The three steps​

StepWhat happens
1 · UploadDownload the template, fill it, drop the file
2 · PreviewThe file is parsed and shown back before anything is written
3 · RunRows are created; the job reports per-row results

Nothing is written until Run. Preview is a genuine dry run.


3. The column contract​

Stated verbatim on the screen:

ColumnRequiredNotes
name✅The product name
slug✅Public URL fragment. Must be unique
base_price✅Numeric
description—
is_publishable—Drives the STORE badge
uom_code—Must match an existing unit code, e.g. KG
uom_code must already exist

The importer matches on the unit code, not its name. A row citing a code you have not created fails — so run the import after Units of measure is populated, not before.

Use Discover on the units screen if you are importing data that already uses codes.

Maximum 500 rows per run. Split larger catalogues into batches.


4. What the importer does not do​

Not importedDo it
Variations, SKUs, per-variation priceBy hand in the editor, or via the external API
Bills of materialIn the editor
Category assignmentBulk Edit on the catalogue, after import
Tax categoryBulk Edit, or per product
ImagesStorefront's bulk image upload (Allow Bulk product Image Upload)
Attribute value bindingsIn the editor
An imported product is not yet sellable

The template has no variation columns, so imported products arrive with no variations — and a product with no variation cannot be bought. Import creates the catalogue skeleton; variations are a second pass.


5. The admin contract​

Must be trueOr else
A project is selectedThe import has no scope
The role holds products.importThe button is absent
Every uom_code existsThose rows fail
Every slug is uniqueThose rows fail

6. Downstream​

After importThen
Products exist with a base priceAdd variations before anything can be sold
is_publishable setThe STORE badge shows, but with no variation there is nothing to buy
Job record keptRe-openable to review per-row results

7. Troubleshooting​

SymptomCause
No Import buttonThe role lacks products.import
Rows rejected on uom_codeThe code does not exist, or the name was used instead of the code
Rows rejected on slugDuplicate slug within the project
File refusedMore than 500 rows
Products imported but not sellableNo variations — see §4
Preview looks right, Run does lessCheck the per-row results on the job; failures are reported per row, not as one error