Process Wholesale Help Center

Price list CSV format reference

Process Wholesale imports a price list from a .csv file that has a header row, a price column and at least one of a SKU column or a Handle column, with up to 50,000 data rows. Rows are matched to your product variants by SKU first, then by Handle. This page lists every accepted header, how prices are read, the template, the export columns and every message the import can show. For the steps, see How to import, update and export a price list with CSV. Price lists need the Professional plan.

File requirements#

Item Requirement
File type .csv, one file per import
Header row Required, in the first row
Required columns One price column, and a SKU column or a Handle column (or both)
Other columns Ignored, for example Title in an exported file
Maximum rows 50,000 data rows
Blank lines Ignored
Row numbers in reports The header is row 1, so the first data row is row 2
Prices In your store currency, without thousands separators

Accepted column headers#

Headers are matched ignoring capitals and surrounding spaces. When a file has more than one accepted header for the same column, the first one in this table's order is used.

Column Accepted headers, in order of preference
SKU sku, skus, variant sku
Handle handle, url handle, product handle, slug, url handle slug
Price fixed price, price, wholesale price, wholesale, amount
File from Columns Accepted as it is?
Process Wholesale template sku, handle, price Yes
Process Wholesale export SKU, Handle, Title, Price Yes. Title is ignored.
Shopify B2B catalog export SKU, Handle, Fixed Price Yes
Shopify product export Variant SKU, Handle, Variant Price No. Variant Price is not an accepted price header. Rename it to Price.

How prices are read#

Process Wholesale removes everything except digits, dots, commas and minus signs. When a value has both a comma and a dot, the one that comes last is the decimal separator. A comma on its own is a decimal separator. Prices are not rounded.

Value in the file Price imported
$4.79 4.79
6.59 6.59
1,299.99 1299.99
1.299,99 1299.99
12,50 12.5
1,299 1.299 (the comma is read as a decimal separator)
1299 1299
0 0 (accepted; the variant is free on the list)
-5 Not imported: "Negative price"
empty or abc Not imported: "Invalid price"

How rows are matched#

Order Rule Result
1 The price is checked An invalid or negative price is not matched
2 SKU, ignoring capitals and surrounding spaces One variant with that SKU: matched. Several variants: not matched, and the Handle is not tried.
3 Handle, ignoring capitals, when the SKU is empty or not found A product with one variant: matched. A product with several variants: not matched.
4 Nothing found Not matched
5 Several rows match the same variant The last row wins

Template#

Download template in the import window downloads price-list-template.csv:

sku,handle,price
SKU-001,example-product,9.99
SKU-002,another-product,19.50

Export columns#

Export to CSV downloads price-list-<name>.csv, one row per variant on the list.

Column Content
SKU The variant SKU
Handle The product handle
Title The variant title (ignored when the file is imported)
Price The list price as stored, for example 7 rather than 7.00

Variants deleted from your store are not in the export.

Unmatched row file#

Download unmatched rows downloads unmatched-<name>.csv with the columns row, sku, handle and reason, for up to 2,000 rows.

Reason What it means How to fix it
Invalid price The price is empty or not a number Enter a number, such as 12.50.
Negative price The price is below 0 Enter 0 or a positive price.
SKU matches multiple variants in store More than one variant in your store has this SKU Give each variant a unique SKU in Shopify, then import again.
Handle has multiple variants — provide a SKU The row's SKU is empty or not found, and the product with this handle has several variants Add the SKU of the variant you mean. Use one row per variant.
No matching SKU or handle in store No variant has this SKU and no product has this handle Check the spelling against Shopify admin. The product may have been deleted or the SKU changed.
Row is missing both SKU and handle The SKU and Handle cells are both empty Add a SKU or a handle, or delete the row.

Messages before the import starts#

Message What it means How to fix it
Couldn't detect the required columns. The file needs a price column (e.g. “Fixed Price” or “Price”) and at least one of “SKU” or “Handle”. No accepted price header, or no SKU or Handle header Rename the headers to accepted ones.
Failed to parse the CSV file. The file could not be read as CSV. The window can also show the file reader's own message instead. Save the file as CSV (comma separated) and try again.
Enter a valid price list name (letters and numbers only, no "B2B") before importing. The Name field is empty or not valid Enter a name with lowercase letters and numbers only.
Tag name is required, must be alphanumeric, and cannot contain 'B2B'. The list name is not valid Use letters and numbers only, without b2b.
The CSV has no rows to import. The file has a header but no data rows Add rows below the header.
Imports are limited to 50000 rows. The file has more than 50,000 data rows Remove rows. Do not split one list across several files: each Update from CSV replaces the list.
A price list with the tag name "" already exists. Please use a different tag name. Import from CSV was used with a name that a list already has Choose a new name, or open that list and use Update from CSV.
No price list named "" to update. The list being updated no longer exists Go back to the Price Lists tab and open the list again, or import it as a new list.
Couldn't start the import. A store export may already be running — please try again in a minute. Another import or store export is running Wait a minute and try again.
Couldn't start the import. The import could not start Try again.
Couldn't start the import. Please try again. The connection was interrupted Check your connection and try again.

Messages after the import runs#

Message What it means
Import complete for "". A new list was created. Counts: {count} prices set and {count} unmatched.
Update complete for "". The list was replaced. Counts: {count} added, {count} updated, {count} removed, {count} unmatched.
Some rows couldn't be matched (no matching SKU/Handle, ambiguous match, or invalid price). Download unmatched rows to fix and re-import. The import finished, but some rows were not imported.
The import failed: No rows matched a product by SKU or Handle. Check the file's columns and values, then try again. No price list was created. Please try again. Not one row matched a product.
The update failed: No rows matched a product by SKU or Handle — the existing price list was left unchanged. Your existing price list was left unchanged. Please try again. Not one row matched a product, and the list was not changed.
The import failed: Variant export … / The update failed: Variant export … Your product catalog could not be read. Try again.
The import failed: Price sync … / The update failed: Price sync … The prices could not be published to checkout. Open the list on the Price Lists tab, then run Update from CSV again with the same file.
The import failed. No price list was created. Please try again. / The update failed. Your existing price list was left unchanged. Please try again. The import stopped. Any other reason after "The import failed:" or "The update failed:" also means the import did not finish. Open the list on the Price Lists tab to check it, then try again.

Plans: Professional · Last verified · View this page as Markdown