Importable product columns reference
This page is the complete lookup for every column the Products page spreadsheet importer reads, plus the exact validation each one is subject to. It's the reference companion to the task guide Import products from a spreadsheet — read that first if you want the step-by-step flow; come here to look up a specific column, its accepted values, or an edge case.
Everything below is read straight from the importer, so it's authoritative for what the Import Products modal accepts. The Product fields & validation reference covers the same fields as they behave on the product record itself.
Before you begin
- Importing requires the products.import permission. See Product permissions reference.
- Every lookup column resolves a value to an existing record in your account by name (case-insensitive). The importer never creates brands, categories, suppliers, tax rates, or nominal codes for you — an unknown name is a row error. Set them up first: Manage brands, Manage categories, Set a product's accounting.
File formats and how columns are read
| Aspect | Behavior |
|---|---|
| Accepted file types | .csv, .tsv, .txt, .xlsx, .xls, or pasted delimited text. |
| Delimiter | Auto-detected (comma, tab, or semicolon). |
| Header row | Auto-detected; you confirm the First row is a header checkbox before mapping. |
| Column mapping | Each file column is mapped to a target field via a Maps To dropdown. Common header names auto-match (for example UPC, EAN, GTIN → barcode); anything else you map by hand or set to Skip this column. |
| Case sensitivity | SKU matching, duplicate detection, and all name lookups (brand, category, supplier, tax rate, nominal codes) are case-insensitive. Fixed keyword values are not — type and the unit codes must be lowercase (standard, not Standard; kg, not KG), or the row errors. |
| Blank cells | For most fields a blank cell means "leave unchanged" on an update (see the numeric and boolean rules below). |
Column headers don't have to match exactly — mapping is what binds a file column to a target field. The account template guarantees the header names the auto-matcher recognizes. To get a spreadsheet pre-populated with your catalog, use Export products; its output re-imports cleanly.
Identity and match columns
| Column | Required | Type / format | Accepted values | Notes |
|---|---|---|---|---|
id | No | Integer | An existing product ID | When mapped and non-blank, forces an update-by-ID match. A non-numeric or unknown ID is a row error. |
sku | Yes | Text | Any | The match key. Case-insensitive; must be unique within the file (a repeat is an error on every occurrence). |
name | Yes | Text | Any | Product name. |
type | No | Text | standard, bundle, kit | Defaults to standard on create. Only standard, bundle, and kit are importable here — matrix, blemished, and manufactured aren't. Omitting the column on an update preserves the existing type. See Convert & auto-detect product types. |
barcode | No | Text | UPC / EAN / ISBN / GTIN | Scientific-notation values are rejected — see the caveat below. |
mpn | No | Text | Any | Manufacturer part number. |
Name-lookup columns
Each of these resolves a value to a record that must already exist in your account. The match is by name, case-insensitive; an unknown value is a row error naming the field.
| Column | Resolves to | Notes |
|---|---|---|
brand | A brand | See Manage brands. |
category | A category | Set as the product's primary category. See Manage categories. |
default_tax_rate | A tax rate | |
sales_nominal_code | A nominal code | Accounting line. See Set a product's accounting. |
cogs_nominal_code | A nominal code | |
inventory_nominal_code | A nominal code | |
inventory_in_transit_nominal_code | A nominal code | |
accrued_purchases_nominal_code | A nominal code | |
discount_nominal_code | A nominal code | |
default_supplier_name | A supplier | Creates or updates the product's default supplier link. See Manage a product's suppliers. |
Dimensions, weights, and case packing
All are optional numbers that must be non-negative. Blank leaves the field unchanged on an update.
| Column | Type / format | Accepted values |
|---|---|---|
weight | Number ≥ 0 | |
weight_unit | Text | kg, g, lb, oz |
length / width / height | Number ≥ 0 | |
dimension_unit | Text | cm, mm, in, ft, m |
case_quantity | Number ≥ 0 | Units per case |
case_weight | Number ≥ 0 | |
case_weight_unit | Text | kg, g, lb, oz |
case_length / case_width / case_height | Number ≥ 0 | |
case_dimension_unit | Text | cm, mm, in, ft, m |
Weight and dimension units default to your account settings only when the product is created and the unit column is blank. On an update, units change only when you explicitly provide the unit column.
Proforma / landed-cost columns
| Column | Type / format | Notes |
|---|---|---|
unit_cost | Number ≥ 0 | Fallback cost used for valuation when no PO or FIFO history exists. See FIFO layers & COGS. |
proforma_shipping_cost | Number ≥ 0 | Estimated landed shipping per unit. |
proforma_landed_cost_percentage | Number ≥ 0 | Percentage. |
proforma_marketplace_cost_percentage | Number ≥ 0 | Percentage. |
Stock, demand-planning, and boolean columns
| Column | Type / format | Accepted values | Notes |
|---|---|---|---|
min_stock_level | Integer ≥ 0 | Reorder-alert threshold. | |
daily_average_consumption | Number ≥ 0 | Demand-planning input. | |
daily_average_consumption_net_returns | Number ≥ 0 | Demand-planning input. | |
is_dropshippable | Boolean | yes, true, 1, y → true | Blank leaves it unchanged; any other non-blank value is false. |
is_taxable | Boolean | yes, true, 1, y → true | Blank leaves it unchanged; any other non-blank value is false. |
fba_prep_instructions | Text | Any | Free text. |
tags | Text | Comma-separated | Synced to the product's tags. |
The importer only sets stock-related fields on the product record; it doesn't create opening inventory. To seed starting stock, see Set up product inventory.
Default-supplier link columns
These write to the product's default supplier link (the one named by default_supplier_name). Mapping behavior is deliberate: a column that's mapped but left blank clears the field, while an unmapped column preserves the existing value — so a partial-update sheet touches only the fields you include.
| Column | Type / format | Notes |
|---|---|---|
default_supplier_sku | Text | Mapped-blank clears; unmapped preserves. |
default_supplier_leadtime | Integer ≥ 0 | Mapped-blank clears; unmapped preserves. |
default_supplier_moq | Number ≥ 0 | Mapped-blank clears; unmapped preserves. |
default_supplier_target_stock_days | Integer ≥ 0 | Mapped-blank clears; unmapped preserves. |
Image columns (image_url_1 … image_url_9)
You can supply up to nine image URLs per row: image_url_1 is the primary image and image_url_2 through image_url_9 are additional gallery images. URLs are downloaded through the standard product-image pipeline. See Add & manage product images.
| Rule | Behavior |
|---|---|
| Required scheme | Must start with http:// or https://, and be a valid URL — otherwise it's a per-image error. |
| Length | Each URL must be at most 2048 characters; over-length is a per-image error. |
| Primary | image_url_1 is primary. If it's blank or invalid but other slots have images, the first surviving image is promoted to primary. |
| Duplicates | A URL that repeats within the row (case-insensitive) is skipped with a warning. |
| No image columns mapped | Existing product images are left unchanged. |
| Columns mapped but all blank | Existing images are left unchanged, and the row gets a warning. |
| Any image cell populated | The row's images replace the product's existing image set. |
Dynamic attribute columns (attribute_<id>)
For every attribute in your account, the mapping list offers a column labelled Attr: <name> that maps to attribute_<id>. A non-blank value upserts that attribute value on the product; a blank value is ignored. See Manage attributes and the Attribute fields & types reference.
Component columns
Kit and bundle composition can be imported with these columns. Component links are wired up after every product in the batch has been created or updated, so a component referenced by SKU or ID resolves regardless of row order. The value format is IDENTIFIER->QTY, comma-separated for multiple entries (the -> or a → arrow both work; quantity defaults to 1 and is floored at 1).
| Column | Format | Effect |
|---|---|---|
component_skus | SKU->QTY, SKU2->QTY2 | Attaches the listed products as components of this kit/bundle, by SKU. |
component_ids | ID->QTY, ... | Same, matching components by product ID. |
component_of_sku | SKU->QTY, ... | Makes this product a component of the named parent products, by SKU. |
component_of_id | ID->QTY, ... | Same, matching parents by ID. |
Attaching components re-syncs the parent's component set to exactly what the column lists (components not listed are detached). To build kits and bundles visually instead, see Build bundles & kits in the Workshop; for the underlying model, see the Kit & bundle component reference.
Validation rules at a glance
| Field kind | Rule | Blank cell |
|---|---|---|
| Numeric (costs, weights, dimensions, consumption, MOQ) | Must be numeric and non-negative; otherwise a row error. | Treated as null → field left unchanged on update. |
Integer (min_stock_level, default_supplier_leadtime, default_supplier_target_stock_days) | Must be a whole number and non-negative; a decimal or non-number is a row error. | Treated as null → unchanged. |
Boolean (is_dropshippable, is_taxable) | yes / true / 1 / y (any case) → true; any other non-blank value → false. | Treated as null → unchanged. |
| Weight unit | One of kg, g, lb, oz (lowercase, exact match). | Defaults to account setting on create only. |
| Dimension unit | One of cm, mm, in, ft, m (lowercase, exact match). | Defaults to account setting on create only. |
| Type | One of standard, bundle, kit (lowercase, exact match). | Defaults to standard on create; preserved on update. |
Barcode scientific-notation guard
Excel silently rewrites long numeric barcodes into scientific notation — for example 810000000000 becomes 8.10E+11. The Products-page importer detects any barcode that looks like scientific notation and rejects the row rather than storing a corrupted value, with a message telling you to re-export the source file and avoid opening it in Excel first. If you hit that error, upload the freshly exported file without opening it in a spreadsheet app.
Pricing columns (Price: <tier>)
For every pricing tier in your account, the mapper offers a Price: <tier> target (for example Price: Retail). Map a column to one to set that tier's selling price on the product.
| Column | Type | Notes |
|---|---|---|
Price: <tier> | Number ≥ 0 | Sets the product's selling price for that absolute pricing tier — one column per tier. Only the tiers you map are changed; unmapped tiers keep their current price. If the product has no price for the tier yet, one is created. Blank cells are skipped; an unknown tier errors the row. |
The separate unit_cost column sets the product's fallback cost, not a selling price — the two are independent. Relative tiers are derived from a base tier and aren't set directly (see Relative pricing tiers). To set prices without a file, use Bulk-edit products or a product's pricing screen.
Read-only export columns (never imported)
A file exported from SKU carries computed columns that can't be imported. The mapper recognizes them and labels them (read-only) instead of offering them as mappable fields, so you can re-import an export without stripping them out. These include: average cost and its currency, total / available / on-hold / incoming / in-transit inventory, stock value, archived_at, created_at, updated_at, and the last COGS-rebuild timestamp.
Columns available only in the generic Data Imports importer
The Products page always uses the importer documented here. A separate generic Data Imports framework has its own product definition that accepts a few extra columns not reachable from the Products page Import button:
| Column | What it does (generic path only) |
|---|---|
stock_uom_code | Sets the product's stock unit of measure by code. See Units of measure reference. |
default_supplier_tier_<id> | Sets a per-supplier pricing-tier price on the default supplier link. (Product selling-price tiers are importable on the Products page — see Pricing columns above.) |
If you map these on the Products page importer they have no effect — use the generic Data Imports path (or the relevant settings pages) when you need them. Relative-tier behavior is explained in Relative pricing tiers.
Next steps
- Import products from a spreadsheet — the full task flow, including update-vs-create and background-job handling.
- Export products — produce a re-importable spreadsheet of your catalog.
- Product fields & validation reference — how these fields behave on the product record.
- Product permissions reference — who can import.