Ottermerce

Bulk catalog import, export
and editing for BigCommerce

Sign in Start free

Guide · Products import

Products

How to structure a spreadsheet that creates, updates or deletes products in BigCommerce — with variants, options, images, videos, custom fields, metafields, quantity breaks and modifiers all in the same file.

1. File structure

The import file is a standard CSV, or an .xlsx workbook. There is one system column: Command.

The Command column

This column decides what action to take for each product row.

Command Description Behaviour
NEWCreates a new product.Fails if the product already exists, so an accidental re-run cannot overwrite live data.
UPDATEUpdates an existing product.Fails if the product does not exist. Only updates fields present in the file.
MERGECreates or updates.The default. Updates the product if it exists, otherwise creates it.
DELETEDeletes a product.Fails if the product does not exist.
REPLACEDeletes the product and re-creates it from the file.Destructive — anything not in your file is lost: images, categories, custom fields. Creates the product if it does not exist yet. Use UPDATE or MERGE to change individual fields.
IGNORESkips the row.Does nothing, and is recorded as skipped rather than as a success — so it does not inflate the counts in History. Useful for commenting out rows.

2. Check the file before you run it

After uploading you get a Check file step. It reads the file only — nothing is sent to BigCommerce — and tells you:

  • How many rows, and how many items. These differ: one product can span a row for itself, a row per extra image, and a row per variant.
  • Which columns were understood, and which will be ignored. Worth reading — an unrecognised header is skipped silently, so a typo like Modifer Name would otherwise do nothing at all. Where the name is close to a real column, a suggestion is offered.

From there you can run a dry run. It does everything a real import does — the same matching, the same checks against your store — but writes nothing. Afterwards, History shows for every row exactly what would have changed, and anything that would have failed, with the same message the real run would give.

Worth doing before any REPLACE or DELETE, and before the first run of a file you did not produce yourself.

3. How rows are matched to existing products

For every command except NEW, the importer first has to find the product you mean. It tries the identifier columns your file provides, strongest first, and stops at the first one that matches:

  1. Product ID — the BigCommerce ID. Exact, and needs no lookup, so it is both the safest and the fastest. Export your products first to get these.
  2. Variant ID — resolved to the product that owns the variant.
  3. SKU — the product's own SKU first, then variant SKUs.
  4. UPC — same two steps as SKU.
  5. MPN
  6. Name — last resort, since names are not unique.

A column that is missing or left blank is skipped. If an identifier matches several products the row fails rather than guessing — add a Product ID to say which one you mean. Products with no SKU at all are fine: they are matched by Name, UPC, MPN or Variant ID.

To pin matching to one column, add [ID] to its header. For example SKU [ID] matches rows on SKU while letting you change the Name in the same file — without it, Name would also be treated as an identifier.

4. Base product fields

Include only the columns you want to change. A column you leave out, or leave blank, is never sent, so it cannot overwrite what is already in BigCommerce. A cell holding only whitespace counts as absent too.

  • SKU — the product's stock-keeping unit. Optional; see matching above.
  • Product ID — BigCommerce product ID. Recommended for updates.
  • Name — product title.
  • Typephysical or digital. Defaults to physical.
  • Price — base price of the product.
  • Weight — required for a physical product.
  • Description — HTML is allowed.
  • Is Visibletrue or false.

5. Brand

  • Brand Name (also accepted as Brand or Vendor) — the brand as text. If your store has no brand with that name, it is created. Matching is exact, so H&M and H & M stay two different brands — the same as in the BigCommerce admin.
  • Brand ID — use this if you already know the ID. It takes priority and needs no lookup.

6. Categories

Only one of the three is used per row, strongest first: Category IDsCategory PathsCategory Names. Give two and the weaker one is not read at all, so do not expect the sets to be combined.

  • Category Paths — full paths, e.g. Men/Shoes;Sale. Because / separates the levels, use ; between paths. This is the reliable way to say which category you mean.
  • Category IDs — BigCommerce category IDs, e.g. 11,30. Fastest, since nothing has to be looked up.
  • Category Names — just the last part of the name. Only works while that name is unique in your store. If two branches both have a "Shoes" category the row fails and tells you which paths clashed, rather than filing the product under both.
  • Category CommandMERGE (default) adds these categories and keeps the others; DELETE removes the product from these categories only; REPLACE makes these the complete list, dropping any others.

A path or name that does not exist fails the row on purpose — a typo that silently skipped a category would not show up until the storefront was wrong. Create the category first, then re-run. If your file has no category columns, existing assignments are left alone.

7. Images

There is no limit on how many images a product can have. Supply them whichever way suits your file — you can mix all three:

  • Image URL, or numbered Image URL 1, Image URL 2, … columns.
  • Several URLs in one cell, separated by ;.
  • Repeat the product's row, putting another image on each one. Only the identifier columns need filling in on the repeats.

Then:

  • Image Alt — alt text. Worth setting; search engines read it.
  • Image Position — display order, normalised to 1..N.
  • Image CommandMERGE (default) adds new images and keeps the ones already there, so re-running the same file changes nothing; DELETE removes just the listed images; REPLACE removes every existing image, then adds the listed ones.

Naming an image exactly

Without an Image ID an image row is matched by its filename stem, because BigCommerce renames what you upload — towel1.jpg is stored as d/382/towel1__89452.jpg. That match is deliberately fuzzy, and it has a consequence: two genuinely different pictures whose URLs end in the same basename are treated as the same image, and the second updates the first.

The export writes Image ID for every image, so a re-imported export addresses each one directly. An ID that matches nothing falls back to the stem rather than failing the row — that is what lets a file exported from one store still upload its pictures into another.

The thumbnail can be moved

Image Is Thumbnail only ever takes true: BigCommerce clears the flag on the previous thumbnail itself, so sending false would leave the product with no thumbnail at all.

Images are never removed unless you ask. If your file has no image columns at all, existing images are left completely alone. On a variant row, Image URL sets that variant's own image instead of a product image. If BigCommerce cannot fetch one of your URLs, the product still imports and the failure is reported as a warning on that row.

8. Variants and options

  • Parent SKU — leave empty on the main product row. Fill it with the main product's SKU on variant rows.
  • Variant Title 1 — option name, e.g. "Color". Up to 3 options per product.
  • Variant Value 1 — option value, e.g. "Red".
  • Variant ID — BigCommerce variant ID. Include it when you rename a SKU, so the right variant is updated.
  • Variant CommandMERGE (default) updates the variant if it exists, otherwise adds it; UPDATE updates only, and a variant that cannot be found is reported instead of added; DELETE removes just that variant; REPLACE removes all existing variants, then adds the ones in your file.

A variant is found by Variant ID first, then SKU, then by its combination of option values — so changing a SKU updates the existing variant rather than creating a duplicate. Options and option values you have not used before are created for you. If your file has no variant columns, existing variants are left untouched.

Variant display order cannot be set from the file: BigCommerce orders variants by their option values, not per variant.

How an option looks on the storefront

By default BigCommerce draws a variant option as buttons. Add Variant Option Type 1 (matching Variant Title 1) to choose:

  • rectangles — buttons. The default, and what BigCommerce picks on its own.
  • dropdown — a select list.
  • radio_buttons — radio buttons.
  • swatch — colour chips. These need a colour per value.

For a swatch, give each value its colour on that value's row with Variant Swatch Colors 1 — a hex like #FF0000, or two separated by a semicolon for a two-tone chip (#000000;#FFFFFF). The # is optional. Variant Swatch Image 1 uses an image instead.

Turning an existing option into a swatch needs a colour for every one of its values, because BigCommerce only accepts the whole set at once. If any are missing, the import says which ones and leaves the option as it was — the variants themselves still import.

9. Videos

One video per row, repeating the product's row the way price tiers do:

  • Video URL — paste the YouTube link straight from the address bar. A watch link, a youtu.be short link, an embed, a Short or a live URL all work. The bare video id works too.
  • Video Title, Video Description, Video Position.
  • Video CommandMERGE (default) adds and updates the listed videos; DELETE removes just those; REPLACE makes the listed ones the only ones.

Only YouTube — BigCommerce does not accept any other provider. Videos are matched by their video id, so re-running the same file changes nothing.

10. Quantity-break pricing

A product can have several price tiers, so each tier goes on its own row — repeat the product's row and fill in a different quantity band:

  • Bulk Pricing Min Quantity / Bulk Pricing Max Quantity — the band. Use 0 as the max for an open-ended top tier ("50 or more").
  • Bulk Pricing Typepercent (percent off), price (a fixed price per unit), or fixed (a fixed amount off). Defaults to percent.
  • Bulk Pricing Amount — the number that goes with the type.
  • Bulk Pricing CommandMERGE (default) adds and updates the listed tiers; DELETE removes just those bands; REPLACE makes the listed tiers the only ones.

Tiers are matched by their quantity band, so re-running the same file updates the same tiers rather than adding duplicates.

11. Modifiers

Modifiers are extra choices on the product page that can change the price — engraving, gift wrap, a text box for a message. Each choice goes on its own row; rows sharing a Modifier Name build one modifier.

  • Modifier Name — what the shopper sees. Must be unique within the product.
  • Modifier Typedropdown (default), radio_buttons, rectangles, swatch, product_list, or the free-input types text, multi_line_text, numbers_only_text, date, file, checkbox.
  • Modifier Requiredtrue or false.
  • Modifier Value — one choice. Leave blank for the free-input types, which have no choices.
  • Modifier Price Adjuster and Modifier Price Adjustmentrelative adds an amount, percentage adds a percentage. Leave both blank for no price change.
  • Modifier CommandMERGE (default) adds and updates; DELETE removes the named modifier; REPLACE keeps only the modifiers, and the values, your file lists.

Re-running the same file does not pile up choices. A choice with no price columns filled in is left exactly as it is, so you can add a new option without disturbing the pricing of the existing ones.

12. Custom fields and metafields

Both use a column per field, named after the field itself — so the columns are whatever your file needs:

  • Custom Field: Material — a custom field named "Material". These show on the product page in your theme.
  • Metafield: forix.colour — a metafield with namespace forix and key colour. Leave the namespace off (Metafield: colour) and it goes in the custom namespace. Metafields are for apps and integrations rather than display.
  • Variant Metafield: forix.fit — the same thing on a variant row, for a metafield belonging to that one variant. Its own Variant Metafield Command works the same way.

Custom Field Command and Metafield CommandMERGE (default) adds and updates the listed fields; DELETE removes just those; REPLACE makes the listed ones the only ones.

Re-running the same file changes nothing — a field that already exists is updated in place. That matters because BigCommerce itself allows two custom fields with the same name, so a naive import would add another copy every time. Fields your file does not mention are left alone.

The export writes these columns too, named after whichever fields your products actually use — so an export can be edited in a spreadsheet and imported straight back without losing them.

13. Other supported fields

  • ShippingIs Free Shipping, Fixed Shipping Cost
  • TaxTax Class ID, Product Tax Code
  • Order limitsMin Order Quantity, Max Order Quantity
  • Pre-orderIs Preorder Only, Preorder Release Date, Preorder Message
  • Price displayIs Price Hidden, Price Hidden Label
  • StorefrontLayout File, Warranty, Availability Description, Is Condition Shown, Bin Picking Number, Gift Wrapping Options Type
  • Social sharingOpen Graph Type, Open Graph Title, Open Graph Description, Open Graph Use Product Name, Open Graph Use Meta Description, Open Graph Use Image
  • Related Products — comma-separated product IDs

Boolean columns accept true/false, and also 1/0 and yes/no. Dates are best written as 2027-01-31T00:00:00+00:00 — BigCommerce stores the instant and reports it back in your store's timezone, so the text may differ slightly on the next export while meaning the same moment.

14. Example file

Command,SKU,Parent SKU,Name,Type,Price,Weight,Description,Is Visible,Image URL,Variant Title 1,Variant Value 1,Variant Title 2,Variant Value 2
NEW,TSHIRT-001,,My Awesome T-Shirt,physical,20.00,0.5,"<p>Best t-shirt ever</p>",true,https://example.com/tshirt.jpg,,,,
NEW,TSHIRT-RED-M,TSHIRT-001,,physical,20.00,0.5,,true,https://example.com/red.jpg,Color,Red,Size,M
NEW,TSHIRT-RED-L,TSHIRT-001,,physical,20.00,0.5,,true,https://example.com/red.jpg,Color,Red,Size,L
NEW,TSHIRT-BLUE-M,TSHIRT-001,,physical,20.00,0.5,,true,https://example.com/blue.jpg,Color,Blue,Size,M
UPDATE,TSHIRT-001,,My Updated T-Shirt,,,,,,,,,,
DELETE,OLD-PRODUCT,,,,,,,,,,,,

15. Complete column reference

Every column the importer reads, written exactly as the header must appear in your file. These are the same names the Export page writes, so an exported file can be edited and imported straight back. A header that is not on this list is ignored — the Check file step lists those before you run, with a suggestion when the name is close.

Identity and command

Column Meaning
CommandNEW | MERGE | UPDATE | DELETE | REPLACE | IGNORE (default MERGE)
Product IDBigCommerce product ID — the safest identifier, needs no lookup
SKUthe product's own SKU. Optional; see matching above
Parent SKUfill this on a variant row; leave empty on a parent row
Variant IDBigCommerce variant ID, on a variant row

Core fields

Column Meaning
Nameproduct title
Typephysical | digital (default physical)
DescriptionHTML allowed
Pricebase price
Sale Pricethe discounted price shown struck through
Cost Priceyour cost — never shown in the storefront
Retail PriceMSRP
MAP Priceminimum advertised price
Weightrequired for a physical product
Widthnumber
Heightnumber
Depthnumber
Is Visibletrue | false
Is Featuredtrue | false
Sort Orderinteger — where it sits in a category listing
ConditionNew | Used | Refurbished
Is Condition Showntrue | false
Availabilityavailable | disabled | preorder
Availability Descriptionthe text shown beside availability

Inventory

Column Meaning
Inventory Levelinteger
Inventory Warning Levelinteger — when BigCommerce warns you
Inventory Trackingnone | product | variant
Bin Picking Numberwarehouse location

Identifiers

Column Meaning
UPCstring
MPNstring
GTINstring

Categories and brand

Strongest first: Category IDs are used as given, Category Paths are resolved through the tree, Category Names must be unique or the row fails.

Column Meaning
Category IDscomma-separated BC IDs, e.g. 101,102
Category Paths;-separated full paths, e.g. Men/Shoes;Sale
Category Namescomma-separated leaf names — fails if a name is not unique
Category CommandMERGE (adds) | DELETE (removes only these) | REPLACE (makes these the whole set)
Brand IDwins over Brand Name and needs no lookup
Brand Namealso accepted as Brand or Vendor; created if the store has none

SEO and URL

Column Meaning
Page Titlestring
Meta Descriptionstring
Meta Keywordscomma-separated
Search Keywordsextra words that should find this product; also accepted as Tags
Custom URLstorefront path — slashes are added for you

Shipping and tax

Column Meaning
Is Free Shippingtrue | false
Fixed Shipping Costnumber
Tax Class IDinteger
Product Tax Codestring (Avalara code)

Order limits, pre-order and price display

Column Meaning
Min Order Quantityinteger
Max Order Quantityinteger
Is Preorder Onlytrue | false
Preorder Release Datea date — comes back in the store's timezone, so never compare it as a string
Preorder Messagestring
Is Price Hiddentrue | false
Price Hidden Labelwhat to show instead of the price

Storefront and Open Graph

Column Meaning
Layout Filethe template this product uses
Warrantystring
Related Productscomma-separated product IDs
Gift Wrapping Options Typeany | none | list
Gift Wrapping Options Listcomma-separated wrapping option IDs — BigCommerce rejects one the store does not have
Open Graph Typeproduct | album | book | drink | food | game | movie | song | tv_show
Open Graph Titlestring
Open Graph Descriptionstring
Open Graph Use Product Nametrue | false
Open Graph Use Meta Descriptiontrue | false
Open Graph Use Imagetrue | false

Images

One image per repeated parent row, or several URLs in one cell separated by ;. Image URL 1, Image URL 2 … are accepted too, and each list column takes the same numbering.

Column Meaning
Image IDBigCommerce's own ID — written by the export, and the only way to address exactly one image instead of relying on the filename stem
Image URLa publicly reachable URL. On a variant row it means that variant's image
Image Altalt text
Image Positioninteger — normalised to 1..N
Image Is Thumbnailtrue only. BigCommerce clears the flag on the previous thumbnail itself
Image CommandMERGE (default) | DELETE | REPLACE

Videos

YouTube only — BigCommerce refuses any other type. Paste a watch URL and the ID is pulled out of it.

Column Meaning
Video URLa YouTube URL in any of its shapes
Video IDthe bare YouTube ID, if you have it
Video Titlestring
Video Descriptionstring
Video Positioninteger
Video CommandMERGE (default) | DELETE | REPLACE

Quantity-break pricing

One tier per repeated parent row. Tiers are matched by quantity band, not by ID, so re-running a file updates the same tiers instead of stacking new ones.

Column Meaning
Bulk Pricing Min Quantityinteger
Bulk Pricing Max Quantityinteger — 0 means no upper bound
Bulk Pricing Typepercent | price | fixed
Bulk Pricing Amountnumber
Bulk Pricing CommandMERGE (default) | DELETE | REPLACE

Modifiers

One value per repeated parent row; rows sharing a Modifier Name build one modifier.

Column Meaning
Modifier Nameunique within the product
Modifier Typedropdown (default) | radio_buttons | rectangles | swatch | text | multi_line_text | numbers_only_text | date | file | checkbox
Modifier Requiredtrue | false
Modifier Valueone option value
Modifier Price Adjusterrelative | percentage
Modifier Price Adjustmentnumber
Modifier CommandMERGE (default) | DELETE | REPLACE

Custom fields and metafields

The column name carries the field name, so you choose it. A DELETE row may leave the cell empty — the column name is what names the field to remove.

Column Meaning
Custom Field: <name>any number of them
Custom Field CommandMERGE (default) | DELETE | REPLACE
Metafield: <namespace>.<key>a name with no dot lands in the custom namespace
Metafield CommandMERGE (default) | DELETE | REPLACE
Variant Metafield: <namespace>.<key>the same, on a variant row, for that one variant
Variant Metafield CommandMERGE (default) | DELETE | REPLACE

Variant rows

A variant row is a row with Parent SKU filled. Every core, price, inventory and shipping column above works on it as well; these are the columns that only mean something there.

Column Meaning
Variant CommandMERGE (default) | UPDATE | DELETE | REPLACE
Variant Title 1..3 / Variant Value 1..3the option name and value pairs
Variant Option Type 1..3dropdown | radio_buttons | rectangles (default) | swatch
Variant Swatch Colors 1..3hex colours, ; separated for a multi-tone chip
Variant Swatch Image 1..3the alternative to colours
Variant Imagethis variant's own image
Purchasing Disabledtrue | false
Purchasing Disabled Messageonly stored while purchasing is disabled

16. BigCommerce's own limits

These are the platform's limits, not the app's. Nothing here can be raised by a setting, and a row that crosses one fails with BigCommerce's own message — which is usually terse. Knowing the numbers in advance is cheaper than reading the error.

Limit Value
Variants per product600
Custom fields per product200
Custom field name and value250 characters each
Variant SKUunique across the store, case-insensitive, max 255 characters
Image URL length1,024 characters
Product image file size8 MB
Image file typesJPEG / JPG, GIF, WebP, PNG — not TIFF, BMP or PDF
Optimal product image1280 × 1280
Images per variant1
Videos on a variantnot possible — videos belong to the product
Video providerYouTube only
Swatch colours per option valueup to 3

Source for the table above: BigCommerce's Importing Your Catalog from Scratch support article. Unlike the API behaviours described elsewhere in this guide, these figures are quoted from BigCommerce's documentation rather than measured against a live store.