Severity levels

  • BlockingLikely to stop the row importing, or to break the product it belongs to.
  • Will import wrongImports, but something in your store won’t be what you meant.
  • CleanupImports fine. Worth tidying for consistency and later maintenance.

Shopify showed me this error

Shopify’s import messages are short. These checks find the usual causes in your file.

01

Structure & headers

Column headers match Shopify’s template

Shopify matches column names exactly. A misspelled, duplicated or unknown column is ignored or stops the import.

  • BlockingNot a product exportFILE-06
  • BlockingHeader not on the first lineHDR-01Explains: Invalid CSV header: missing headers
  • BlockingTitle column missingHDR-02Explains: Invalid CSV header: missing headers
  • BlockingColumn appears twiceHDR-04
  • BlockingBarcode and Barcodes togetherHDR-05
  • BlockingSpaces around a column nameHDR-06Explains: Invalid CSV header: missing headers
  • Will import wrongColumn name spelled differentlyHDR-07Explains: “Choose column headings” dialog
  • Will import wrongPossible typo in a column nameHDR-08Explains: “Choose column headings” dialog
  • Will import wrongColumn without a nameHDR-10
  • Will import wrongVariant columns without optionsHDR-12
  • Will import wrongVariant metafield columnHDR-13
  • CleanupUnknown columnHDR-09Explains: “Choose column headings” dialog
  • CleanupEmpty columns without a nameHDR-11

Every row has the same number of fields

A row with too many or too few cells usually means a comma or a quote mark split a value, so data lands in the wrong columns.

  • BlockingQuote mark inside a valueCSV-03Explains: Illegal quoting on line … · Missing or stray quote on line …
  • BlockingQuote never closedCSV-04Explains: Missing or stray quote on line …
  • BlockingText after a closing quoteCSV-05Explains: Illegal quoting on line …
  • BlockingRow has extra cellsCSV-06
  • Will import wrongRow has fewer cellsCSV-07

File encoding and line endings

Shopify reads CSV files saved as UTF-8, with commas between columns and LF line endings. Other formats garble characters or can’t be read at all.

  • BlockingSemicolons instead of commasCSV-01Explains: Invalid CSV header: missing headers
  • BlockingTabs or pipes instead of commasCSV-02Explains: Invalid CSV header: missing headers
  • BlockingNot saved as UTF-8ENC-01Explains: Illegal quoting on line …
  • BlockingSaved as UTF-16ENC-02
  • BlockingNot a CSV fileFILE-01
  • Will import wrongOld Mac line endingsCSV-09
  • CleanupByte order mark at the startENC-03

Empty rows

Empty rows add nothing and can make an import fail.

  • BlockingEmpty fileFILE-02
  • Will import wrongNo product rowsFILE-03
  • CleanupEmpty rowsCSV-08

Text damaged by a wrong encoding

When a file was saved in the wrong encoding at some point, é turns into é and customers see garbage in your store.

  • Will import wrongGarbled charactersENC-04
  • Will import wrongLost character (�)ENC-05
  • Will import wrongInvisible control characterENC-06
  • Will import wrongExcel line-break codeXL-06

Curly quotes inside HTML tags

HTML attributes need straight quotes. Curly ones, usually pasted in from Word or Google Docs, break links and formatting.

  • Will import wrongCurly quotes in an HTML tagTXT-14

Leading or trailing spaces

Invisible in a spreadsheet, but part of the value: “HP-014 ” and “HP-014” are different values to Shopify and apps.

  • Will import wrongInvisible characterTXT-02
  • CleanupSpace at the start or endTXT-01

02

Handles, titles & SKUs

Rows with no handle

The handle is how Shopify knows which product a variant or image row belongs to.

  • BlockingNo handle column, untitled rowsHDR-03
  • BlockingRow without handle and titlePROD-02
  • CleanupNo handleHDL-06
  • CleanupNo handle columnHDR-16

Handle format

Handles become product URLs: lowercase letters, numbers and dashes, no spaces.

  • BlockingSpaces in the handleHDL-01
  • BlockingInvalid characters in the handleHDL-02
  • Will import wrongHandle too longHDL-05
  • CleanupCapital letters in the handleHDL-03

Handle differs within one product

If one row of a product spells the handle slightly differently, Shopify treats it as a separate product.

  • Will import wrongHandle spelled differentlyHDL-07

One handle used for two products

Shopify groups rows by handle, so a second product with the same handle is merged into the first.

  • Will import wrongHandle shared by two productsPROD-12

Same product entered twice

Two separate blocks of rows for one product usually come from copying or sorting. Shopify can lose images or variants.

  • Will import wrongProduct rows split upPROD-03Explains: Validation failed: options are not unique

Missing product title

Shopify needs a title to create a product.

  • BlockingProduct without a titlePROD-01

Vendor spelled inconsistently

A second spelling shows up as a second vendor in filters and reports.

  • CleanupVendor spelled differentlyTXT-15

Duplicate SKUs

Shopify allows them, but stock syncing, fulfilment and many apps treat both variants as one item.

  • Will import wrongSKU used more than onceOPT-09

Variants without a SKU

A fulfillment service needs a SKU to know what to ship.

  • BlockingSKU missing for a fulfillment serviceOPT-10

Barcodes damaged by Excel

Excel shortens long numbers to scientific notation and drops leading zeros. The lost digits can’t be recovered from the file.

  • Will import wrongNumber damaged by ExcelXL-01
  • Will import wrongBarcode looks wrongXL-02
  • Will import wrongBarcodes separated wronglyXL-07

03

Variants

Exact duplicate rows

A row that copies another row adds the same variant twice, which Shopify rejects.

  • BlockingExact copy of another rowOPT-12Explains: Validation failed: options are not unique

Option names that change between rows

An option needs one name on every row of a product. Shopify uses the name from the first row.

  • Will import wrongOption name changesOPT-05
  • Will import wrongOption name spelled differentlyOPT-06

Option values spelled two ways

Shopify treats “Sage” and “sage ” as two different values, so the product gets an extra variant.

  • Will import wrongOption values differ only in spellingOPT-02Explains: Validation failed: options are not unique

Curly quotes in option values

Curly and straight inch marks look alike but are different text, so filters and apps treat 10” and 10" as two values.

  • CleanupCurly inch marks in an option valueOPT-13

Variant rows missing an option value

Every variant needs a value for each option the product has.

  • BlockingOption value missingOPT-03

Repeated option combinations

Each combination of option values can appear only once per product. Shopify rejects repeats with “options are not unique”.

  • BlockingDuplicate variantOPT-01Explains: Validation failed: options are not unique
  • BlockingVariants without real optionsOPT-08Explains: Validation failed: options are not unique

04

Prices, weights & booleans

Price format

Shopify needs a plain amount: digits with a dot for decimals, no currency symbol or code.

  • BlockingPrice isn’t a plain numberPRICE-01Explains: Price is not a number
  • BlockingDecimal comma or thousands separatorPRICE-02Explains: Price is not a number
  • BlockingSwiss “.–” price notationPRICE-03Explains: Price is not a number
  • BlockingNegative amountPRICE-04Explains: Price is not a number

Missing prices

Shopify fills a blank price with 0.00, so the variant would be listed for free.

  • Will import wrongPrice missingPRICE-05
  • Will import wrongPrice is 0PRICE-06

Compare-at price format

The compare-at price follows the same format as the price: digits with a dot, nothing else.

The price-format checks (PRICE-01 to PRICE-04), applied to compare-at price columns. PRICE-01, PRICE-02, PRICE-03, PRICE-04

Compare-at price at or below the price

The compare-at price should be the old, higher price. When it’s lower or equal, most themes show no sale.

  • Will import wrongCompare-at price below the pricePRICE-07
  • CleanupCompare-at price equals the pricePRICE-08

Weights in the grams column

The weight column takes whole grams, and shipping rates use it. Kilograms or units typed into it lead to wrong shipping costs.

  • BlockingWeight isn’t a numberINV-05
  • Will import wrongWeight with decimalsINV-06

TRUE/FALSE columns

Columns like Published or Requires shipping only accept true or false.

  • Will import wrongNot true or falseVAL-01

Status values

Shopify accepts active, draft or archived, in English.

  • BlockingStatus emptyPROD-04
  • BlockingStatus not validPROD-05

Inventory and fulfillment values

Inventory quantity, tracker, out-of-stock policy, fulfillment service and packed dimensions only accept specific values.

  • BlockingInventory isn’t a whole numberINV-01
  • BlockingInventory tracker not validVAL-02
  • BlockingOut-of-stock policy not validVAL-03
  • BlockingOut-of-stock policy missingVAL-04
  • BlockingFulfillment service not validVAL-06
  • BlockingPacked dimensions incompleteVAL-07
  • Will import wrongInventory with decimalsINV-02
  • Will import wrongNegative inventoryINV-03
  • Will import wrongStock without a trackerINV-04

Weight unit values

The weight unit for display must be g, kg, lb or oz.

  • BlockingWeight unit not validVAL-05

Gift cards marked as shippable

Gift cards aren’t shipped. Whether a gift card row should require shipping is a judgement call, so this check is part of the paid audit only.

Not automated: this one needs judgement, so it is part of the paid audit only.

05

Images & missing data

Image links on http

Shopify asks for https links, and some servers refuse the download over http.

  • Will import wrongImage link on httpIMG-02

Image links that aren’t image files

Shopify downloads each image from one public web address. Local file paths, several links in one cell or broken links don’t work.

  • BlockingImage link isn’t a web addressIMG-01Explains: Validation failed: getaddrinfo: nodename nor servname provided…
  • BlockingSeveral image links in one cellIMG-03Explains: Validation failed: getaddrinfo: nodename nor servname provided…
  • Will import wrongSpaces or quotes in an image linkIMG-05Explains: Validation failed: getaddrinfo: nodename nor servname provided…
  • Will import wrongSmall version of an imageIMG-06

Repeated image positions

Each image needs its own position number from 1 up, otherwise the gallery order is unpredictable.

  • BlockingImage position not validIMG-08
  • Will import wrongImage position used twiceIMG-09

Images without alt text

Optional, but screen readers and image search use it.

  • CleanupImages without alt textIMG-13

Products without a description

It imports, but the product page is empty below the price. When you update products, an empty cell also erases the existing description.

  • CleanupProducts without a descriptionPROD-13

+

Other checks

Checks for Shopify limits and formats that don’t belong to one of the 39 audit checks.

  • BlockingFile over 15 MBFILE-04
  • BlockingOption value without option nameOPT-04Explains: Option value provided for unknown options
  • BlockingOptions out of order or repeatedOPT-07Explains: Option value provided for unknown options
  • BlockingToo many variantsPROD-07
  • BlockingToo many imagesPROD-09
  • BlockingTitle too longPROD-10
  • BlockingTags over Shopify’s limitsTXT-09
  • BlockingSpreadsheet error valueXL-03Explains: Price is not a number
  • Will import wrongAlt text too longIMG-11
  • Will import wrongImage details without an imageIMG-14
  • Will import wrongGift card in the importPROD-11
  • Will import wrongBroken HTML in the descriptionTXT-04
  • Will import wrongScript or form in the descriptionTXT-05
  • Will import wrongEscaped HTML in the descriptionTXT-06
  • Will import wrongTags separated by semicolonsTXT-10
  • Will import wrongSeveral collections in one cellTXT-13
  • Will import wrongFormula instead of a valueXL-04