CSV import & export
The complete CSV format β every column, the full cell grammar for tiers, case multiples, loose pricing and discount modes, and the rules that decide when a cell is updated, erased or skipped.
Beyond a few dozen variants, the spreadsheet is the real interface. This page is the complete format reference.
The workflow
Always export, edit in place, re-import. Do not hand-build a file from scratch β you will get the column headers or the variant identifiers wrong.
Open the price list editor.
Export β either Export priced rows or Export entire catalog (see below).
Edit in Excel, Google Sheets or a script.
Import, review the preview, then commit.
Watch it finish in Jobs & history.
The two exports
Export priced rows downloads only variants that currently have pricing. This is the everyday round-trip file β smaller, faster, and safe to edit and push straight back.
Export entire catalog includes every variant, priced or not. It honours your current search and filters, so you can export just one vendor or product type. On large catalogs this is delivered by email rather than as a direct download, because it is generated in the background.
Use the catalog export when you are pricing something for the first time, or building a file for a migration.
Columns
The header row is fixed, in this order:
op
Operation for the row. Leave as exported.
variantId
Shopify variant ID. The identifier rows are matched on.
productId
Shopify product ID. Informational.
displayName
Product and variant title. Informational β editing it changes nothing.
sku
The variant's SKU. Informational, but the natural key for joining external data.
price
The variant's current catalog price. Informational.
status
Active, Draft or Archived. Informational.
productType
Informational.
vendor
Informational.
productTags
Product tags. Informational β not customer tags.
pricing[Default]
The Default column: pricing that applies to every customer.
pricing[<TagName>]
One column per customer tag.
Columns marked informational are exported to help you filter and formula in your spreadsheet. Changing them has no effect β pricing is read only from the pricing[β¦] columns.
productTags are product tags. The pricing[β¦] headers use customer tags. They are unrelated, and mixing them up is a common mistake when writing formulas.
The cell grammar
Everything about a variant's pricing for one tag lives in one cell, as parts joined by semicolons.
V
A simple price β shorthand for a single tier at quantity 1
18
Q:V
A volume tier: minimum quantity Q, value V
12:9
c:N
Case multiple of N
c:12
d:p / d:f / d:s
Discount mode for the whole cell β percentage, fixed amount, or specific price (the default)
d:p
l:V
Global loose unit price
l:7.2
l:Q:V
Loose unit price for the tier starting at Q
l:50:7.2
p:Q:V / f:Q:V
A single tier forced to percentage or fixed-amount mode, regardless of the cell's mode
p:12:20
Order does not matter, and whitespace around parts is ignored.
Worked examples
$18 per unit. The most common cell in any price list.
$10 each from 1, $9 from 12, $7 from 24.
The same ladder, but quantities must be multiples of 12.
20% off. The d:p changes how 20 is read.
$5 off per unit.
Case multiple of 6, with no pricing at all. Valid and useful β this enforces carton-only ordering without any discount.
Case multiple of 50 with a tier ladder, and any leftover loose units at $7.20 each.
The same, but loose units get cheaper at the 100 tier. See progressive case multiples.
What happens on import
This is the part worth reading twice.
A valid value
Replaces everything previously in that cell.
Nothing (blank or whitespace)
Erases that tag's pricing for that variant.
Something unparseable
Skipped β the existing value is left alone, so a typo cannot silently wipe your pricing.
Blank means erase. If your spreadsheet contains all your tag columns but you only filled in some of them, importing it will clear the rest. When in doubt, export, edit, re-import β never assemble a partial file with empty tag columns.
The "replaces" rule matters too. If a cell currently holds 1:10;12:9;c:12 and you write 9 into it, you get a flat $9 price with no tiers and no case multiple. To change just the price, write the whole cell.
Number formatting
Values must be plain unsigned decimals β 9, 9.5, 0.75.
Rejected, and therefore skipped:
thousands separators β
1,200comma decimals β
12,50scientific notation β
1e3currency symbols β
$9.00negative numbers
Spreadsheets reformat numbers without asking. A column formatted as Currency will export $9.00 and be skipped on import. Format your pricing columns as plain text before editing, and check the raw CSV if an import silently changes nothing.
Importing
Choose Import, upload the file, and review the preview before committing. The preview shows what will change β this is your last chance to catch a column you did not mean to blank.
Once committed, the import runs as a background job. Large files take a while; the grid may lag behind briefly. Jobs & history is the authoritative record, and it is where you download the error CSV if some rows failed.
Large catalogs
Import in batches of a few thousand rows and let each finish before starting the next. Interleaved imports are processed in order, but a queue of large files is slow to drain and hard to reason about if something fails midway.
Common problems
"I imported and nothing changed." Almost always number formatting β the values were unparseable and therefore skipped. Open the raw CSV in a text editor and look at the actual characters.
"I imported and lost pricing." Blank cells in tag columns. Restore from your previous export; keep the last known-good file.
"My tiers vanished." A bare number replaced the whole cell. Write the full cell string to preserve tiers and case multiples.
"Some rows didn't apply." Download the error CSV from Jobs & history β it lists the rows and why each failed.
Last updated