P
Portaim
Docs menu

Validation rules

Every check Portaim runs on your rows before export: what it looks for, why Shopify cares, whether it blocks the export, and the fix Portaim offers. Generated from the app itself.

The Fix step runs these 42 checks against every row after the mapping is confirmed. An error is a value Shopify would reject; every error is fixed or skipped before export. A warning is accepted by Shopify but worth a look; warnings never block the export. How the Fix step resolves them is on Fix issues.

2 checks apply to every text field: Curly Quotes, Trailing Whitespace.

Errors (23)

Missing Fields

Price Blank

error price-blank

Applies to: Variant Price

The price is empty. Shopify rejects a variant without a price.

Fix: Edit the cell, or use find and replace in the Fix step to set one price for a whole set of rows.

Required Handle

error required-handle

Applies to: Handle

The handle is empty. Shopify uses the handle to group the variant and image rows of a product, so a row without one belongs to no product and the file is rejected.

Fix: Fill the cell the handle is built from (usually the product name), or re-map the handle to a column that is filled on every row.

Required Title

error required-title

Applies to: Title

The title is empty on the row that starts a product. Shopify rejects a product without a title; rows that continue a product (same handle as the row above) may leave it blank because they inherit the first row's title.

Fix: AI suggestions can draft a title from the other columns in the row, or edit the cell yourself.

Unit Price Complete

error unit-price-complete

Applies to: Unit price total measure, Unit price total measure unit, Unit price base measure, Unit price base measure unit

A row has some unit price values but not all four (total measure and unit, base measure and unit), or its two units measure different things, such as grams priced per 100 ml. Shopify refuses the product in both cases.

Fix: Fill the blank cells, or map the missing columns; a constant such as 1 kg or 100 ml works for the base. Pick a base unit of the same kind as the total unit.

Variant Option Dependency

error variant-option-dependency

Applies to: Option1 Value, Option1 Name

A product with several rows (several variants) has a row without an option value, or has no option name on its first row. Shopify cannot tell the variants apart without them and may drop variants during the import.

Fix: Edit the cells to add an option name such as Size or Color and a value on every variant row, or re-map the columns that hold them.

Format Errors

Boolean Format

error boolean-format

Applies to: Published, Variant Requires Shipping, Variant Taxable

A yes-or-no field (published, requires shipping, taxable) holds a value other than true or false. Shopify rejects a value it cannot read as a boolean; spellings such as yes, no, 1, 0 or Excel's WAHR and VRAI are understood and only need normalising.

Fix: Auto-fix normalises the recognised spellings to true or false; value mapping turns any other value into true or false.

Accepted values: true, false

Handle Format

error handle-format

Applies to: Handle

The handle contains spaces, capital letters or characters other than lowercase letters, numbers and hyphens. Shopify uses the handle in the product's web address and rejects one that is not URL-safe.

Fix: Auto-fix rewrites the handle as a URL-safe slug: lowercase, hyphens for spaces, accented letters transliterated.

Image Position Format

error image-position

Applies to: Image Position

The image position is not a whole number of 1 or more. Shopify uses it to order a product's images and may fail on a value it cannot read.

Fix: Auto-fix assigns the next free position within the product's images.

Inventory Format

error inventory-format

Applies to: Inventory Quantity

The inventory quantity is not a whole number, for example 12.00 or 12,00 from a spreadsheet column formatted with decimals, or it is text. Shopify rejects a quantity that is not a whole number; a negative quantity is accepted but means oversold stock.

Fix: Auto-fix drops the decimal places; text or a negative quantity you edit in the cell.

Price Format

error price-format

Applies to: Variant Price, Variant Compare At Price, Cost per item

The price, compare-at price or cost is not a plain number: it has a currency symbol, a comma as the decimal separator, thousands separators, letters or a minus sign. Shopify rejects the file when a price is not a number with a dot decimal.

Fix: Auto-fix removes the currency symbol, turns a decimal comma into a dot and strips unambiguous thousands separators; a value like 1,234 could mean either, so you say which it is in the cell or with find and replace.

Unit Price Measure

error unit-price-measure

Applies to: Unit price total measure, Unit price base measure

A unit price measure is not a number above zero, or the base measure is not a whole number. Shopify refuses a product with a total of 0, text such as 500 g in the measure, or a price per 0.5 l.

Fix: Auto-fix turns a comma decimal into a dot (0,75 → 0.75) and drops a .0 from a base measure; a unit typed into the measure goes into its unit column instead.

Weight Format

error weight-format

Applies to: Variant Weight, Variant Grams

The weight is not a plain number: it carries a unit such as kg or lbs, uses a comma as the decimal separator, or is not a number at all. Shopify rejects a weight it cannot read as a number.

Fix: Auto-fix converts a weight written with a unit into the row's weight unit, kilograms when it has none, and turns a decimal comma into a dot; a negative or unreadable weight you edit in the cell.

Invalid Values

Fulfillment Service Enum

error fulfillment-service-enum

Applies to: Variant Fulfillment Service

The fulfillment service is blank while the column is in your file, or it is not manual, one of Shopify's built-in services, or a custom service name written in lowercase with hyphens. Shopify refuses a blank cell and a value it cannot match to a service set up in your store.

Fix: Value mapping lets you pick manual or one of the built-in services for each of your values and fills blank cells with manual. Or leave the column unmapped: Shopify imports the products without it.

Accepted values: manual, shipwire, webgistix, amazon_marketplace_web

Inventory Policy

error inventory-policy

Applies to: Variant Inventory Policy

The inventory policy is not deny or continue, or it is blank while the column is in your file. Shopify refuses both: it skips the product, or rejects a file with a single product. The policy decides whether a variant keeps selling once its stock reaches zero.

Fix: Value mapping turns your values into Shopify's (stop → deny, allow → continue) and fills blank cells with deny or continue in one go. Leave the column unmapped and Shopify uses deny.

Accepted values: deny, continue

Inventory Tracker

error inventory-tracker-dependency

Applies to: Variant Inventory Tracker

The inventory tracker is not one Shopify knows (shopify, shipwire or the Amazon marketplace service), or it names Shipwire or the Amazon service while the row's fulfillment service names something else. Shopify refuses those rows. A tracker of shopify needs nothing else on the row: without a quantity the stock starts at zero.

Fix: Value mapping turns the tracker into shopify, which lets Shopify track the stock. Keep Shipwire or the Amazon service only when that app is installed in your store and the fulfillment service names it. A blank tracker is allowed and means the stock is not tracked.

Accepted values: shopify, shipwire, amazon_marketplace_web , or blank

Product Category Taxonomy

error product-category-taxonomy

Applies to: Product Category

The product category is not in Shopify's Standard Product Taxonomy, either as a category ID or as a full path such as Animals & Pet Supplies > Pet Supplies. Shopify rejects a category it does not recognise.

Fix: Pick the category from the searchable taxonomy list in the Fix step; Portaim suggests the closest match to your value.

Status Enum

error status-enum

Applies to: Status

The status is not one of the values Shopify accepts: active, draft or archived. Shopify rejects a file with any other status.

Fix: Value mapping turns your values into Shopify's (published → active, hidden → draft, deleted → archived); a blank status is allowed and means active.

Accepted values: active, draft, archived , or blank

Unit Price Unit

error unit-price-unit

Applies to: Unit price total measure unit, Unit price base measure unit

A unit price unit is not one of Shopify's units, such as g, kg, ml, l, m, m2 or item. Shopify refuses a product whose unit it cannot read, including a unit written out as a word.

Fix: Auto-fix writes unit words as Shopify's units (gram → g, litre → l, Stück → item); value mapping handles anything else.

Accepted values: mg, g, kg, oz, lb, ml, cl, l, m3, floz, pt, qt, gal, mm, cm, m, in, ft, yd, m2, ft2, item

Weight Unit

error weight-unit-enum

Applies to: Variant Weight Unit

The weight unit is not one of kg, g, lb or oz. Shopify only reads those four abbreviations, so a spelled-out unit such as kilograms or an unknown one is rejected.

Fix: Auto-fix shortens spelled-out units (kilograms → kg, pounds → lb); value mapping handles anything else, and a blank unit is allowed.

Accepted values: kg, g, lb, oz , or blank

Invalid URLs

URL Format

error url-format

Applies to: Image Src, Variant Image

The image link is not a usable web address: it is missing https://, is malformed, or contains characters such as spaces that need encoding. Shopify rejects a link it cannot fetch; http:// links and links that do not look like an image file are accepted but flagged for you to check.

Fix: Auto-fix adds https:// and encodes spaces and other special characters; a malformed link you edit in the cell, and http:// you can swap for https:// with find and replace.

Duplicates

Duplicate Option Name

error duplicate-option-name

Applies to: Option2 Name, Option3 Name

The second or third option name on a row is the same as an earlier one, which usually means two columns were mapped to the same option. Shopify requires distinct option names within a product and rejects the file.

Fix: Re-map the columns so each option has its own, or rename the option if it really is a different attribute.

Unique Variant Options

error unique-variant-options

Applies to: Option1 Value, Option1 Name

Two rows of the same product have exactly the same combination of option values, for example Red and Large twice. Shopify needs every variant of a product to have a distinct combination and rejects the file otherwise.

Fix: Edit the option values on one of the rows so the combination is unique, or skip the duplicate row.

Length Limits

Tags Limit

error tags-limit

Applies to: Tags

The product has more than 250 tags. Shopify allows at most 250 per product and rejects the row; above 200 you get a warning, since a list that long is usually a column that is not really tags.

Fix: Auto-fix keeps the first tags up to the limit and drops the rest; for the warning, consolidate the tags or re-map the column.

Warnings (19)

Missing Fields

Option Name Blank

warning option-name-blank

Applies to: Option1 Value, Option2 Value, Option3 Value

A row has an option value but the matching option name is blank for that product. Shopify needs a name such as Size or Color to define the option, and a value without one is not a well-formed variant.

Fix: Edit the cell to enter the option name, or re-map the column that holds it.

Weight Unit Dependency

warning weight-unit-dependency

Applies to: Variant Weight

The row has a weight but its weight unit is blank. Shopify accepts the row and falls back to kg, so a weight entered in grams or pounds ends up wrong.

Fix: Value mapping sets one unit for all the blank cells, or edit the cell.

Duplicates

Duplicate Barcode

warning duplicate-barcode

Applies to: Variant Barcode

The same barcode appears on more than one row. Shopify accepts duplicate barcodes, but a barcode is meant to identify exactly one variant, so scanners and marketplaces will pick the wrong one.

Fix: Edit the cell on the repeated rows, or ignore the warning if the duplicates are intentional.

Duplicate Handle

warning duplicate-handle

Applies to: Handle

The same handle appears on rows that carry different product titles. Shopify treats every row with the same handle as one product and keeps only the first title, so the other titles are silently dropped.

Fix: Edit the handle so that each product has its own, or clear the extra titles if the rows really are variants of one product.

Duplicate SKU

warning duplicate-sku

Applies to: Variant SKU

The same SKU appears on more than one row of the file, ignoring case. Shopify accepts duplicate SKUs, but they make stock counts, reports and later updates ambiguous.

Fix: Edit the cell on the repeated rows, or ignore the warning if the duplicates are intentional.

Cross-Field Issues

Compare At Price Lower

warning compare-at-price-lower

Applies to: Variant Compare At Price

The compare-at price is lower than or equal to the price. Shopify accepts it, but the compare-at price is shown crossed out as the former price, so a lower one makes the product look more expensive than before.

Fix: Edit the cell, or clear the compare-at price when the product is not on sale.

Price Below Cost

warning price-below-cost

Applies to: Variant Price

The price is lower than the cost per item on the same row. Shopify accepts it, but across a whole file it usually means the price and cost columns are swapped.

Fix: Re-map the two columns if they are swapped, or ignore the warning for an intentional clearance price.

Length Limits

Image Alt Text Length

warning image-alt-length

Applies to: Image Alt Text

The image alt text is longer than 125 characters. Shopify allows up to 512, but screen readers read alt text aloud in full, so the accepted practice is to keep it short.

Fix: Auto-fix truncates the text, or AI suggestions can write a shorter description of the image.

SEO Description Length

warning seo-desc-length

Applies to: SEO Description

The SEO description is longer than 160 characters. Shopify allows up to 320, but search engines show about 160, so anything after that is cut off in results.

Fix: Auto-fix truncates the description to the limit, or AI suggestions can write a shorter one.

SEO Title Length

warning seo-title-length

Applies to: SEO Title

The SEO title is longer than 70 characters. Shopify accepts it, but search engines cut the title off at roughly that length, so the end never shows.

Fix: Auto-fix truncates the title to the limit, or AI suggestions can write a shorter one.

Data Quality

All Caps Text

warning all-caps-text

Applies to: Title, Body (HTML), SEO Title, SEO Description

The title, description or SEO text is written entirely in capital letters. Shopify accepts it, but it reads as shouting on the storefront and in search results.

Fix: Auto-fix converts the text to title case.

Curly Quotes

warning curly-quotes

Applies to: every text field

The text contains curly or smart quotes copied from a word processor. Shopify accepts them, but they look inconsistent next to straight quotes and can break searches and exact-match filters.

Fix: Auto-fix replaces them with straight quotes.

Short Description

warning empty-description

Applies to: Body (HTML)

The description has fewer than 50 characters of text once the HTML is stripped. Shopify accepts it, but a one-line description gives shoppers and search engines little to go on.

Fix: AI suggestions can draft a longer description from the row's data, or edit the cell.

Empty Option Value

warning empty-option-value

Applies to: Option1 Value, Option2 Value, Option3 Value, Option1 Name, Option2 Name, Option3 Name

The product has an option name but no value for it on this row. Shopify accepts the row and simply exports the product without that option.

Fix: Edit the cell to add the value, or ignore the warning if the product does not use that option.

Option Name Consistency

warning option-name-consistency

Applies to: Option1 Name, Option2 Name, Option3 Name

A variant row names an option differently from the first row of the same product, for example Colour on one row and Color on another. Shopify's importer uses the first row's name and ignores the rest, so the value lands under the first name.

Fix: Edit the cell to match the first row's name, or fix the first row if that one is wrong.

Spreadsheet-mangled number

warning scientific-notation

Applies to: Variant Barcode, Variant SKU

A SKU or barcode was rewritten by a spreadsheet as scientific notation, such as 8,83187E+11, because the column was not formatted as text. Shopify accepts any text here, but the original digits are gone and the value is not your product's code.

Fix: Export the column as text from your spreadsheet (or prefix each value with an apostrophe) and upload again, or skip the field for this import.

Tags Characters

warning tags-characters

Applies to: Tags

The tags contain characters other than letters, numbers, hyphens, commas and spaces, or use a semicolon or pipe as the separator. Shopify accepts the text, but such tags do not match in searches and smart collections, and a semicolon-separated list imports as one tag.

Fix: Auto-fix converts the separators to commas and removes the special characters.

Trailing Whitespace

warning trailing-whitespace

Applies to: every text field

The value starts or ends with a space or a tab. Shopify accepts it, but the spaces show up in titles and tags and break matching between rows.

Fix: Auto-fix trims the value.

Zero Weight

warning zero-weight

Applies to: Variant Weight, Variant Grams

The weight is 0 on a product that requires shipping. Shopify accepts it, but shipping rates based on weight will be wrong for this product.

Fix: Edit the cell with the real weight, or set requires shipping to false if it is a digital product.

Not finding what you need? Email [email protected], or check the FAQ and the changelog.