Import prices in bulk
Typing prices one at a time stops working somewhere around fifty articles. Every real price book arrives as a file, and most of the work is in the file rather than the upload.
What a price row consists of
Every row is one entry: one item, at one quantity rung, in one list.
| Column | Required | Notes |
|---|---|---|
sku | one of the two | The SKU as your catalogue and ERP know it |
product_id | one of the two | The catalogue product id, if you have it |
price_type | no | standard (default) or on_request |
quantity_min | no | The tier. Defaults to 1 |
unit_price | yes | Net or gross per the list's basis, not per row |
unit | no | PCE, M, KG — match your ERP |
A scale price is several rows, not one row with several columns. An article
with rungs at 1, 10 and 50 is three rows that differ only in quantity_min. This
is the single most common surprise when converting an ERP export, where scales
usually sit in columns.
Prepare the file
Most of the guidance in Prepare your import file applies unchanged: UTF-8, leading zeros in SKUs, decimal separators. Price files add four of their own:
The decimal separator. 19,90 read as a thousands separator becomes 1990.
This is the error that puts a hundredfold price in front of a buyer, and it is
common enough that you should check it every time.
No currency symbols and no thousands separators. 19.90, not € 19,90 and
not 1.234,50.
No mixed net and gross. The basis belongs to the list. If your source file has both, split it into two files for two lists before you import anything.
Do not export prices of zero. ERP exports frequently emit 0.00 for articles
with no maintained price. Imported, those become orderable prices of nothing.
Filter them out at source, or convert them to on_request.
4711-A reads
1990.00 or 0.199, stop. That is a separator or unit problem, and it affects
every row.Import into a list
- Go to Order Management › Prices › Price lists and open the target list.
- Choose Import entries.
- Supply the rows.
- Choose how existing rows are handled:
- Update matching tiers: the default. A row naming a rung the list already
has (same SKU or product and the same
quantity_min) updates it. - Always insert: every row is added as a new entry.
- Update matching tiers: the default. A row naming a rung the list already
has (same SKU or product and the same
- Import.
Use "Update matching tiers". It is what makes a corrected file safe to re-run: the second import updates the same rungs instead of doubling them. "Always insert" is for the rare case where you know the list is empty and you want raw speed.
An import removes nothing from the list. A price that disappeared from your ERP export stays in the list until somebody deletes it. See Price list hygiene.
Test with ten rows
Always. Build a ten-row file containing:
- two ordinary articles whose price you know,
- one full scale ladder (three rows, same SKU),
- one article with a four-decimal price, if you sell per 1,000,
- one
on_requestrow, - one article that already exists in the list, so you can see the update path work.
Import those, then open the list and read them. Only then run the full file.
What to check afterwards
- Open the list and sort the entries by unit price, ascending and descending. The extremes are where separator errors and stray zeros show up.
- Filter Order Management › Prices › Price entries by a SKU that has a ladder and confirm the rungs are separate rows with descending prices.
- Spot-check five articles against the source file.
- Re-run the same file once, deliberately. With Update matching tiers, the entry count must not change. If it doubles, the mode was wrong.
- Look at one imported article in the storefront as a logged-in test buyer.
When rows do not land
| Symptom | Usual cause |
|---|---|
| Rows imported but the buyer sees the old price | The rows went into a different list than the one that resolves for that buyer |
| Prices are 100× too high or too low | Decimal separator, or a price-per-1,000 imported as price-per-piece |
| The ladder has doubled | The import ran in Always insert mode |
| An article has no price at all | The SKU does not match the catalogue — check leading zeros |
| Everything is priced but nothing shows in the shop | The list is inactive, out of its validity window, in the wrong currency, or in no market you sell in |
For anything that survives that table, see Common pricing problems.
Next
- Adjust a whole price list — moving prices you already have.
- Where your prices come from — making this a scheduled interface rather than a monthly chore.