Skip to main content

Product Fields

Import and export product data including details, variants, images, inventory, pricing, and additional attributes.

Sample Files

Download sample spreadsheets to see the structure for importing product data:

General

ID

Description

Example Value

Shopify's unique product identifier

8901234567890

The ID and Handle fields work together to group multiple rows into a single product object (for example, when importing multiple variants). If an ID is present, the app will first try to find an existing product using the ID. If no ID match is found, the app will attempt to locate the product using the Handle.

Using ID [ID]: Add [ID] to the column name (e.g., ID [ID]) to explicitly use the product ID column as the sole identifier. When importing with ID [ID] and a large number of products, the system automatically preloads all product and variant data into memory for faster lookups, unless the store is much larger than the file. This significantly speeds up bulk updates. During preloading, you'll see a progress message showing how many variants have been loaded.

Handle

Description

Example Value

URL-friendly product identifier

premium-cotton-tee

The handle creates the product's URL path and must be unique within your store. When no ID is provided or no product is found by ID, the Handle serves as the fallback identifier for locating existing products during import.

If you do not provide a handle Shopify will generate one for you based on the product title.

When an import changes an existing product's handle, Altera automatically creates a URL redirect from the old product URL to the new one. This keeps existing links and search engine rankings working after the change. The redirect is only created when the handle actually changes (different casing or spacing that resolves to the same handle is ignored). This is on by default and can be turned off with the Create redirects if handles change option on the import setup page.

Handles keep non-Latin characters, the same way Shopify does when it creates a handle from a title. Latin accents are transliterated (café becomes cafe), but Chinese, Japanese, Cyrillic, Arabic, and other scripts stay as they are, so a re-import matches the existing product. To convert handles to ASCII instead (男裝上衣 becomes nan-zhuang-shang-yi), turn on the Convert handles to English letters option on the import setup page (see Convert non-Latin handles to ASCII).

Command

Description

Example Value

Import action: MERGE, UPDATE, NEW, REPLACE, DELETE, IGNORE

MERGE

  • MERGE: Update existing product or create if not found

  • UPDATE: Update existing product only (will skip if product isn't found)

  • NEW: Create product only (will skip if product exists)

  • REPLACE: Delete existing product and create new one. The row is checked first, and if it can't create a product (for example, a blank Title), the row fails and the existing product is kept

  • DELETE: Remove the product from your store (will skip if product doesn't exist)

  • IGNORE: Skip this product row during import

Use UPDATE instead of MERGE when you only want to change existing products. If an identifier in your file doesn't match a product on the store, MERGE creates a new product, while UPDATE skips the row and reports it (IMP002). This prevents accidental duplicates when a handle or SKU in your file is wrong.

Title

Description

Example Value

Product name

Premium Cotton T-Shirt

The main product title displayed to customers throughout your store.

Body HTML

Description

Example Value

Product description

<p>Soft, breathable cotton for comfort</p>

Full product description supporting HTML formatting for rich content display.

Vendor

Description

Example Value

Product manufacturer/brand

Comfort Wear

The company or brand that manufactures or supplies the product.

Type

Description

Example Value

Product category

Apparel

Free-form text field for categorizing products within your store.

Tags

Description

Example Value

Comma-separated product tags

cotton, casual, bestseller

Tags help organize products and enable customer filtering and search functionality.

Tags Command

Description

Example Value

Tag operation: REPLACE, DELETE, MERGE

MERGE

  • MERGE: Append new tags to existing tags

  • REPLACE: Replace all existing tags with specified tags

  • DELETE: Remove specified tags from the product

Created At

Description

Example Value

Product creation timestamp - Export only

2024-03-15 09:30:00 -0500

The date and time when the product was originally created in Shopify. This field is export-only and cannot be imported.

Updated At

Description

Example Value

Last modification timestamp - Export only

2024-06-20 14:45:00 -0500

The most recent date and time the product was modified. This field changes any time a product or variant field is updated, including when inventory is adjusted. This field is export-only and cannot be imported.

Status

Description

Example Value

Product status: ACTIVE, DRAFT, ARCHIVED, UNLISTED

ACTIVE

  • ACTIVE: Product is published and available for purchase

  • DRAFT: Product is saved but not published to customers

  • ARCHIVED: Product is hidden from all sales channels

  • UNLISTED: Product is not visible in search or collections but can be accessed directly by handle, ID, or metafield reference

Published

Description

Example Value

Publication status: TRUE, FALSE

TRUE

  • TRUE: Product is published and visible to customers

  • FALSE: Product is unpublished and hidden from customers

This column controls the product's publication on the Online Store. Combine it with Published Scope to also control Point of Sale.

  • When creating a product, it is published to the Online Store by default. Set the value to FALSE to leave the new product unpublished.

  • When updating an existing product, TRUE publishes it, FALSE unpublishes it, and a blank cell leaves the publication status unchanged.

  • To also change Point of Sale, set Published Scope to web or global.

Market columns like Included / [Market] control market availability separately and don't affect this field (see Pricing by Catalogs).

Published At

Description

Example Value

Publication timestamp

2024-03-16 10:00:00 -0500

When the product was or will be published. Future dates schedule publication.

ISO-formatted timestamps (e.g., 2024-03-16T10:00:00Z) are also supported. When no timezone is specified, your store's timezone is used.

Published Scope

Description

Example Value

Publication visibility scope

web

Legacy field that extends the Published column to Point of Sale. Leave it out to control the Online Store only. Options are:

  • web: apply the Published value to the Online Store, and remove the product from Point of Sale.

  • global: apply the Published value to the Online Store, and publish the product to Point of Sale.

  • blank or column missing: apply the Published value to the Online Store only. Point of Sale is not changed either way.

The two columns work together as follows:

Published

Published Scope

Online Store

Point of Sale

TRUE

blank

Published

Not changed

FALSE

blank

Unpublished

Not changed

TRUE

web

Published

Unpublished

FALSE

web

Unpublished

Unpublished

TRUE

global

Published

Published

FALSE

global

Unpublished

Published

(no column)

web

Not changed

Unpublished

(no column)

global

Not changed

Published

A new product with no Published column is published to the Online Store, and to Point of Sale as well when Published Scope is global. This keeps the two columns compatible with files written for other import tools.

On export, this column shows global when the product is published to Point of Sale and web otherwise.

Note: When updating an existing product, Published and Published Scope are applied only when the Published value changes the product's Online Store status. For example, TRUE with global on a product that is already published to the Online Store does not publish it to Point of Sale. To change Point of Sale on its own, use the Published: Point of Sale column instead. New products always apply both columns.

To publish to other sales channels, or to control each channel separately, use the Published: [Sales Channel] columns described in Publications / Sales Channels. Those columns take priority over Published and Published Scope.

Publications / Sales Channels

Control publication status across individual sales channels by creating separate columns for each channel. This works similarly to Pricing by Catalogs, where you create one column per sales channel.

Use column names in the format Published: [Sales Channel Name] for example:

  • Published: Online Store

  • Published: POS

  • Published: Shop (for the Shop app)

  • Published: Facebook

  • Published: Buy Button

Published

Description

Example Value

Publication status for specific channel

TRUE

Control whether the product is published on a specific sales channel.

  • TRUE: Product is published and visible on the specified sales channel

  • FALSE: Product is unpublished and hidden from the specified sales channel

  • Blank: No change to current publication status (skipped during import)

When importing, each sales channel can be controlled independently. If a column value is blank, that sales channel's publication status will remain unchanged during the import process.

This field has priority over the legacy "Published", "Published At" and "Published Scope" fields. If you include both sets of fields, the value in this field will be used.

Variant Published

Description

Example Value

Publication status for a specific variant on a specific channel

TRUE

Control whether a specific variant is published on a specific sales channel, independently of the parent product.

Use column names in the format Variant Published: [Sales Channel Name], for example:

  • Variant Published: Online Store

  • Variant Published: Shop (for the Shop app)

  • Variant Published: Buy Button

  • Variant Published: Facebook

Values behave the same way as the product-level Published: columns:

  • TRUE: Variant is published and visible on the specified sales channel

  • FALSE: Variant is unpublished and hidden from the specified sales channel

  • Blank: No change to current publication status (skipped during import)

This is independent of the parent product's Published: columns. A variant inherits its parent product's publication state by default, so you only need to set Variant Published: columns for variants whose visibility differs from the product. To export these columns, select the "Variant Published on Sales Channel" field in the Sales Channels category.

Limitations:

  • Variant publishing is not supported for the Point of Sale channel. Shopify does not allow variants to be hidden from POS independently of their parent product. Setting Variant Published: Point of Sale to FALSE is skipped with a warning (PRD062).

  • A variant cannot be published to a channel where its parent product is not published. If you publish a variant to a new channel, make sure the parent product is also published there.

Template Suffix

Description

Example Value

Custom template identifier

featured-item

Allows using alternative Liquid templates for displaying this specific product. In the Shopify admin, this field is labeled Theme template.

Gift Card

Description

Example Value

Gift card designation: TRUE, FALSE

FALSE

  • TRUE: Product functions as a digital gift card

  • FALSE: Regular physical or digital product

URL

Description

Example Value

Full product page URL - Export only

https://store.myshopify.com/products/premium-cotton-tee

The complete URL to the product page. This field is export-only and cannot be imported.

Total Inventory Qty

Description

Example Value

Combined inventory across all variants - Export only

247

Sum of inventory quantities for all product variants. This field is export-only and cannot be imported.

Row

Description

Example Value

Row identifier for multi-row data

3

Used when product data spans multiple spreadsheet rows (e.g., multiple variants or media files).

Top Row

Description

Example Value

Primary product row indicator: TRUE, FALSE

TRUE

This field is used to identify the main product row in a multi-row import. If you have multiple variants, images, or other sub-data, you can quickly see unique products by filtering for TRUE in this column.

  • TRUE: Main row containing primary product information

  • FALSE: Additional row for variants, media, or other sub-data

Category

Product categories use Shopify's standardized product taxonomy to classify items consistently across your store and sales channels.

When importing categories the app will try and find a matching category in the following order:

  1. Category ID (e.g., sg-4-17-2-17)

  2. Category (full path, e.g., Apparel > Men > T-Shirts)

  3. Category Name (e.g., T-Shirts)

Category: ID

Description

Example Value

Category identifier

sg-4-17-2-17

The unique identifier for the product's assigned category from Shopify's Standard Product Taxonomy. Category IDs use the format sg-4-17-2-17 where each number represents a level in the category hierarchy.

Category: Name

Description

Example Value

Category name

T-Shirts

The display name of the product's category. Matching is case-insensitive and supports both Shopify taxonomy categories with a fallback to Google Shopping category names. When importing categories we recommend using the Category field described below instead of this one as multiple categories can match the same name.

Category

Description

Example Value

Full category path

Apparel > Men > T-Shirts

Complete hierarchical path showing the product's categorization. Matching is case-insensitive and supports both Shopify taxonomy categories with a fallback to Google Shopping category names.

Collections

Collections group products together to help customers browse and find related items. Manual collections require you to add products individually, while smart collections automatically include products based on rules you define.

Custom Collections

Description

Example Value

Manual collections containing products

summer-favorites, staff-picks

Comma-separated list of manual collections where this product appears.

You can provide either collection handles (e.g., summer-favorites) or collection titles (e.g., Summer Favorites). When a title is provided, the app will convert it to a handle format (lowercase, spaces replaced with hyphens) and search for an existing collection with that handle.

If no matching collection is found, a new manual collection will be created with the provided value as both the handle (slugified) and title.

This column only adds. A blank cell changes nothing, and a products import never removes a product from a collection. To remove hand-picked products from a collection, import a Collections file with Condition: Field set to Manual Selection, the product handle in Condition: Value, and Condition: Command set to DELETE.

Smart Collections

Description

Example Value

Automated collections - Export only

cotton-products, under-50

Comma-separated list of smart collections that automatically include this product based on rules. Collections are identified by their handle.

Images / Media

Image Type

Description

Example Value

Media file type

IMAGE

Specifies the type of media file being uploaded or referenced.

  • IMAGE: Standard image files (JPEG, PNG, GIF, etc.)

  • VIDEO: Video files uploaded to Shopify

  • MODEL_3D: 3D model files for augmented reality

  • FILE: General file attachments

  • EXTERNAL_VIDEO: Videos hosted on Vimeo or YouTube

Image Src

Description

Example Value

Media file URL or filename

https://cdn.example.com/tshirt.jpg or photo.jpg

URL to media file or filename of existing file already uploaded to your store.

You can provide multiple URLs separated by semicolons or commas to upload multiple files at once. Alternatively, use multiple Image Src columns for different media files.

URLs are downloaded and uploaded to your store as new files, except Shopify CDN URLs from your own store, which are matched to your existing files by filename. To also match URLs from other sources (for example, when re-running a store copy) instead of re-uploading them, enable the Match URLs to existing files option on the import setup page (in the CLI, use the --match-urls-to-existing-files option with import create).

Google Drive share links are also supported. Use the public shareable URL format, for example: https://drive.google.com/file/d/1NvoqrhistNz3MVivgExVxm52qycb1agT/view

Dropbox share links are also supported. Both old-style and new-style link formats work:

  • https://www.dropbox.com/s/abc123/image.jpg?dl=0

  • https://www.dropbox.com/scl/fi/abc123/image.jpg?rlkey=xyz&dl=0

FTP and SFTP links are also supported, in both Image Src and Variant Image. Shopify itself can only fetch media from public web URLs, so the app downloads the file from your FTP or SFTP server and uploads it to Shopify for you. Use the format:

  • ftp://username:password@server:port/path/file_name.jpg

  • sftp://username:password@server:port/path/file_name.jpg

The port is optional (defaults to 21 for FTP and 22 for SFTP), and the username and password can be omitted for anonymous FTP. If the username or password contains special characters such as @, percent-encode them (for example, %40 for @). If the file can't be downloaded or uploaded, the image is skipped with a PRD073 warning (with the password hidden) and the rest of the row still imports (see PRD073).

When importing, if an Image Src URL can't be used, the image is left off the product rather than clogging it up. A Shopify product can hold at most 250 media files, and a broken image still counts toward that limit, so the app keeps these out of the way:

  • If the URL is a Shopify CDN link for this store that returns 404, the image is skipped before upload with a PRD071 warning (see PRD071).

  • If Shopify accepts the URL but then fails to download it (for example, a link from another store that no longer exists), the failed media is removed from the product automatically, with a PRD043 warning (see PRD043).

Either way you get a warning naming the image that couldn't be added, so you know which URL to fix.

If an image failed to process in Shopify (for example, the original source URL no longer exists), the export shows the Shopify error message in this column instead of a URL, beginning with Error from Shopify API: and including the original image URL. These rows identify which media broke and why - they are diagnostic and are not meant to be re-imported as-is.

Image Command

Description

Example Value

Media operation

MERGE

  • MERGE: Update existing media or add if not found

  • DELETE: Remove the media whose Image Src matches the product's media. Images and hosted videos match by filename. YouTube and Vimeo videos match by video ID, so any of the usual URL forms work. If nothing matches, the import reports warning PRD095 and removes nothing.

  • REPLACE: Remove all existing media and add new media

  • NEW: Only add media if product has no existing media (skips if product already has media)

  • IGNORE: Skip all media processing for this product

When using MERGE, the app checks whether the image already exists on the product before importing it. If the image URL belongs to the same Shopify store you are importing into (i.e., a cdn.shopify.com URL from your store), the app can look up the file via the API and determine that it is already attached to the product. In that case, the image is skipped to avoid duplicates. By default, images from other sources - such as other Shopify stores or external URLs - cannot be matched this way, so they will be imported even if a visually identical image already exists on the product. To match those by filename as well, enable the Match URLs to existing files option on the import setup page (in the CLI, use the --match-urls-to-existing-files option with import create).

Image Position

Description

Example Value

Display order number

1

Determines the order in which media files appear on the product page.

Image Width

Description

Example Value

Media width in pixels - Export only

1200

The width dimension of the media file. This field is export-only and cannot be imported.

Image Height

Description

Example Value

Media height in pixels - Export only

1200

The height dimension of the media file. This field is export-only and cannot be imported.

Image Alt Text

Description

Example Value

Alternative text for accessibility and SEO

Front view of cotton t-shirt

Descriptive text for screen readers and SEO purposes when images cannot be displayed.

When updating an existing image, leaving this cell blank clears the alt text on Shopify. Remove the column from your file to leave alt text unchanged. The Image Src column must be in the same file, because that is how the app knows which image the alt text belongs to.

Inventory / Variants

Variant Inventory Item ID

Description

Example Value

Inventory item identifier - Export only

45678901234

Internal Shopify identifier for the variant's inventory item. This field is export-only and cannot be imported.

Variant ID

Description

Example Value

Unique variant identifier

12345678901

Shopify's unique identifier for the specific product variant. When no product-level identifiers (ID, Handle, Title) are provided, the system can use Variant ID to locate the parent product. When updating existing products, Variant ID takes priority over other variant matching methods.

Using Variant ID [ID]: Add [ID] to the column name (e.g., Variant ID [ID]) to explicitly use this column as a product identifier. This allows you to update product-level fields (like Title or Vendor) using only variant ID values, without needing a separate product ID, handle, or title column.

When importing with Variant ID [ID] and a large number of variants, the system automatically preloads all variant data into memory for faster lookups. This significantly speeds up bulk updates. During preloading, you'll see a progress message showing how many variants have been loaded. When the store is much larger than the file, the system looks up only the variants in the file, in groups of about 50.

Variant Command

Description

Example Value

Variant operation

MERGE

  • MERGE: Update existing variant or create if not found

  • UPDATE: Update existing variant only. If no variant matches the row, the whole product fails with PRD036 and none of its variants change

  • NEW: Create variant only (will skip if variant exists)

  • DELETE: Remove the variant from the product. If no variant matches the row, the row is skipped with the warning PRD104

  • REPLACE: Update or create the listed variants, then remove every other variant from the product

Any other value is rejected during file analysis (PRD086), so a typo can't change a variant by accident. IGNORE is not a variant command. To leave a variant unchanged, remove its row from the file. To skip a whole product, set its Command to IGNORE.

REPLACE makes the file the complete variant list for the product. Variants that match a row are updated, rows that don't match create new variants, and existing variants that no row references are deleted. File analysis shows a warning when the column contains REPLACE (PRD087). To remove a single variant, use DELETE on that row instead.

Option1 Name

Description

Example Value

First option category

Size

The name of the first product option (e.g., Size, Color, Material). This is only required on the first variant row for each product; subsequent variant rows can leave this blank.

Option1 Value

Description

Example Value

First option choice

Large

The specific value for the first option that defines this variant.

Letter casing: When updating an existing product, a value that only differs from the store by letter casing (for example large blue in the file and Large Blue on the store) matches the existing variant, and the store value is renamed to the file's casing (PRD075). The same applies to option names. Values that differ in more than casing are treated as new option values and add new variants.

Multiple values: You can provide multiple values separated by semicolons (e.g., Red;Blue;Green) or commas (e.g., Red,Blue,Green) and the app will automatically expand them into separate variants. This requires the Variant Generate From Options column to be set to TRUE. Semicolons take priority when both are present in a value. If multiple option columns contain separated values, all combinations are generated. For example, Option1 Value Red;Blue with Option2 Value S;M;L creates 6 variants.

Linked options: When the option is linked to a metafield (see Option1 Linked To), provide metaobject handles instead of display names.

Option1 Linked To

Description

Example Value

Metafield reference for the first option

product.metafields.custom.color_swatch

Links the first product option to a metafield, enabling variant option values to reference metaobjects instead of plain text. The value uses the format product.metafields.{namespace}.{key}.

In the Shopify admin this is the option's connected source: the category metafield (or product metafield) you pick with Connect to metafield when you edit a product's options. Fill this column to connect variant options to category metafields for many products in one import, instead of one product at a time. See How to connect variant options to category metafields in bulk for a step-by-step guide.

The referenced metafield definition must exist on the store as a product metafield definition of type list of metaobject references, pointing at the metaobject definition whose entries your option values should link to. Shopify standard definitions (namespace shopify, such as shopify.color-pattern) are enabled automatically. For custom definitions, create the definition first in Settings > Custom data > Products (content type Metaobject with List of values), or the import fails with PRD040.

When an option is linked to a metafield, the corresponding Option Value column should contain metaobject handles rather than display names. Altera resolves these handles to Shopify metaobject IDs during import.

This is useful for options backed by rich metaobject data such as color swatches, fabric types, or other structured product attributes managed through Shopify metaobjects.

Converting a plain option: If the option currently uses plain text values, providing this column converts it to a linked option in place, keeping all variant IDs. Every existing option value needs a metaobject entry with a matching handle in the linked type.

Changing an existing link: If the option is already linked to a different metafield (for example product.metafields.shopify.size set through the product category), providing a new value in this column re-links the option to the new metafield in place, also keeping all variant IDs. This works in any direction: from a Shopify standard metafield to a custom one, custom to Shopify standard, or between two custom or two Shopify standard metafields. Every option value must have a metaobject entry with a matching handle in the new type - custom entries must already exist (import them first if needed), while entries for Shopify standard types are created automatically from the taxonomy. If any entry is missing, the import reports the missing handles (PRD074) and the option keeps its current link. When re-linking to a Shopify standard metafield, the product's category must support that attribute - change the category in the same import if needed.

It is not possible to unlink an option (convert it back to plain text values) via import; leaving this column blank leaves the existing link unchanged.

Option2 Name

Description

Example Value

Second option category

Color

The name of the second product option. This is only required on the first variant row for each product; subsequent variant rows can leave this blank.

Option2 Value

Description

Example Value

Second option choice

Navy Blue

The specific value for the second option that defines this variant. Supports semicolon or comma expansion to create multiple variants when Variant Generate From Options is TRUE (see Option1 Value). Supports linked metaobject handles when Option2 Linked To is set (see Option1 Value).

Option2 Linked To

Description

Example Value

Metafield reference for the second option

product.metafields.custom.fabric_type

Links the second product option to a metafield. See Option1 Linked To for details.

Option3 Name

Description

Example Value

Third option category

Material

The name of the third product option. This is only required on the first variant row for each product; subsequent variant rows can leave this blank.

Option3 Value

Description

Example Value

Third option choice

Cotton

The specific value for the third option that defines this variant. Supports semicolon or comma expansion to create multiple variants when Variant Generate From Options is TRUE (see Option1 Value). Supports linked metaobject handles when Option3 Linked To is set (see Option1 Value).

Option3 Linked To

Description

Example Value

Metafield reference for the third option

product.metafields.custom.finish_style

Links the third product option to a metafield. See Option1 Linked To for details.

Variant Generate From Options

Description

Example Value

Enables variant generation from option values. Import only

TRUE

When set to TRUE, values in the Option1/2/3 Value columns separated by semicolons or commas are expanded into all possible variant combinations. Semicolons take priority when both are present in a value.

  • TRUE - Option values containing semicolons or commas are split and expanded into individual variants

  • FALSE - Option values are used as-is

For example, a single row with Variant Generate From Options set to TRUE, Option1 Name Color, Option1 Value Red;Blue, Option2 Name Size, and Option2 Value S;M;L will generate 6 variants: Red/S, Red/M, Red/L, Blue/S, Blue/M, and Blue/L.

Variant Position

Description

Example Value

Display order of variant

2

Determines the order in which variants appear when customers view options.

Variant SKU

Description

Example Value

Stock keeping unit

TCT-LG-NVY

Unique identifier for inventory tracking and management purposes. When no product-level identifiers are provided, SKU can be used to locate the parent product. When updating existing products, SKU is used as a fallback method for matching variants when Variant ID is not available. Shopify allows for blank SKU values but this may make it harder to identify the products on your store.

When updating existing variants that are matched by another identifier (like Variant ID or option values), leaving this cell blank will clear the existing SKU on Shopify. Remove the column from your file if you want to leave SKUs unchanged.

Using Variant SKU [ID]: Add [ID] to the column name (e.g., Variant SKU [ID]) to explicitly use this column as a product identifier. This allows you to update product-level fields (like Title or Vendor) using only SKU values, without needing a separate product ID, handle, or title column.

When importing with Variant SKU [ID] and a large number of SKUs, the system automatically preloads all variant data into memory for faster lookups. This significantly speeds up bulk updates like inventory quantity changes. During preloading, you'll see a progress message showing how many variants have been loaded. When the store is much larger than the file, the system looks up only the SKUs in the file, in groups of about 50.

Variant Barcode

Description

Example Value

Primary barcode of the variant (legacy)

123456789012

This is a legacy column. New exports can't select it, because Variant Barcodes holds every barcode of the variant. Saved export jobs that already have the column keep exporting it, the CLI and API can still name it in an export, and imports still read it. A file that imports it shows the warning PRD102; Variant Barcode [ID] doesn't.

UPC, EAN, or other barcode identifier for the variant. When no product-level identifiers, Variant ID, or SKU columns are provided, Barcode can be used as a final fallback to locate the parent product. Any barcode of a variant matches, not only the primary one, and the match doesn't change which barcode is the primary.

A Shopify variant can carry up to 20 barcodes. This column holds the primary one, the first barcode on the variant. Importing a value here replaces the primary barcode and leaves the other barcodes of the variant unchanged. To see or set all barcodes of a variant, use Variant Barcodes.

When updating existing variants that are matched by another identifier (like Variant ID, SKU, or option values), leaving this cell blank removes all barcodes from the variant. Remove the column from your file if you want to leave barcodes unchanged.

Using Variant Barcode [ID]: Add [ID] to the column name (e.g., Variant Barcode [ID]) to explicitly use this column as a product identifier. This allows you to update product-level fields using barcode values without needing a separate product ID, handle, or title column. Like the plain column, it finds a variant by any of its barcodes.

When importing with Variant Barcode [ID] and a large number of barcodes, the system automatically preloads all variant data into memory for faster lookups. This significantly speeds up bulk updates. During preloading, you'll see a progress message showing how many variants have been loaded. When the store is much larger than the file, the system looks up only the barcodes in the file, in groups of about 50.

Variant Barcodes

Description

Example Value

All barcodes of the variant

ean:4006381333931; upc:012345678905

Every barcode of the variant, separated by semicolons, in the same format as the Variant Barcodes column of Shopify's own product CSV. A variant can have up to 20 barcodes, each up to 255 characters. The first barcode in the list is the primary barcode, the one shown in Variant Barcode.

To give a barcode a type, write the type and a colon in front of the value: upc, ean, isbn, gtin, or asin (upper or lower case). Shopify validates a typed barcode against that standard (length, characters, and check digit), so a typed value that doesn't pass fails the row. A barcode without a type is stored exactly as written.

  • 4006381333931 - one barcode without a type

  • ean:4006381333931 - one barcode with a type

  • ean:4006381333931; upc:012345678905; SUP-4471 - three barcodes, the last one without a type

To keep a backslash, a semicolon, or a colon as part of a barcode, write a backslash in front of it: \\, \;, or \:. For example, sdf\:2342323 is the barcode sdf:2342323 without a type. Any other word in front of a colon is read as a barcode type, so ean13:4006381333931 fails the row with PRD091. Commas, square brackets, spaces, and other characters need no backslash.

Importing: what the cell does to the variant's barcodes depends on Variant Barcodes Command. Without that column, or with a blank cell in it, the barcodes in the cell are added to the variant's barcodes (MERGE). A barcode written without a type keeps the type it already has on the variant, so files from systems that don't know about barcode types don't remove them. A blank cell leaves the variant's barcodes unchanged, unless the command is REPLACE.

Files exported by Altera before 2026-09-24 list the barcodes separated by commas, with the type in square brackets after the value (4006381333931 [EAN], 012345678905 [UPC]). Those files still import: a cell without a semicolon or a backslash that has a type in square brackets, or a comma, is read in that format. This ends around the end of 2026, so use the format above in new files. In a Shopify export or a file in the format above, a barcode that ends in a type in square brackets, or a barcode with a comma in it, is read correctly as soon as the cell also has a semicolon, a backslash, or a type in front of a value.

When a row fills both columns, Variant Barcode must be the first value of Variant Barcodes, which is how an export writes them. Any other value fails the row with PRD094.

Exporting: the column is part of the Inventory / Variants group, so product exports include it by default. The cell is written the way Shopify's product CSV export writes it: the type in lowercase in front of the value, ; between barcodes, and a backslash in front of a backslash, semicolon, or colon inside a barcode. A Shopify product export imports into Altera without changes to this column, and an Altera export imports into Shopify.

Variant Barcodes Command

Description

Example Value

What to do with the barcodes in Variant Barcodes

MERGE

Tells the import what to do with the barcodes listed in Variant Barcodes on the same row.

  • MERGE: Adds the listed barcodes to the variant's barcodes. A barcode the variant already has stays where it is, so the primary barcode doesn't change. If the cell gives a type for a barcode the variant already has (ean:4006381333931), that type is set on it. This is the default when the column is missing or the cell is blank.

  • DELETE: Removes the listed barcodes from the variant. Barcodes are matched by value, so ean:4006381333931 also removes 4006381333931 stored without a type. A listed barcode that the variant doesn't have is skipped. Delete the primary barcode, and the next barcode becomes the primary one.

  • REPLACE: The cell becomes the variant's complete set of barcodes, in that order, so the first barcode in the cell becomes the primary one. A blank cell removes every barcode of the variant.

With MERGE and DELETE, a blank Variant Barcodes cell changes nothing. A variant can have up to 20 barcodes; a MERGE that would go over 20 fails the row with PRD092. Any other value than the three above fails the row with PRD101.

Exporting: product exports write REPLACE on every variant row, because the exported Variant Barcodes cell holds the complete set. An exported file imports back without changes. To add barcodes without listing the ones the variant already has, change the command to MERGE.

Variant Image

Description

Example Value

Variant-specific image URL

https://cdn.example.com/navy.jpg

URL of the image that represents this specific variant.

FTP and SFTP links (ftp://username:password@server:port/path/file_name.jpg) are supported the same way as in Image Src: the app downloads the file from your server and uploads it to Shopify for you.

Variant Price

Description

Example Value

Regular selling price

29.99

The standard price customers pay for this variant. Use decimal format only (no commas or currency symbols), with period as the decimal separator. Including the currency symbol in this field will cause the import to fail.

Variant Compare At Price

Description

Example Value

Original or reference price

39.99

The original or MSRP price shown crossed out to indicate savings. Use decimal format only (no commas or currency symbols), with period as the decimal separator.

When importing, leaving this cell blank will clear the existing compare-at price on Shopify. This is useful when ending a promotion and removing the crossed-out price from a product.

Variant Taxable

Description

Example Value

Subject to taxes: TRUE, FALSE

TRUE

  • TRUE: Variant is subject to applicable taxes

  • FALSE: Variant is exempt from taxes

Note: Gift card products are automatically set to non-taxable regardless of this field value.

Variant Inventory Tracker

Description

Example Value

Inventory tracking: shopify, blank

shopify

  • shopify: Shopify tracks inventory quantities for this variant

  • Blank field: Inventory tracking is disabled for this variant

When you update an existing variant with this column present and the cell blank, inventory tracking is turned off for that variant. To leave tracking unchanged, remove the column from your file. If the same row also contains inventory quantities, the quantities are skipped with a warning because they can't be applied to an untracked variant.

When creating new variants without inventory quantity data, tracking is automatically disabled.

If you try to set inventory quantities when inventory tracking is disabled (and you're not enabling it in the same import), the import will fail with error PRD024. You must enable inventory tracking by setting this field to shopify before setting inventory quantities.

For variants with tracking disabled, exports leave this field blank and write Stocked in the Inventory Available: [Location Name] column for each location the variant is stocked at. Importing those values keeps tracking disabled and links the variant to the same locations (see Inventory Available).

Variant Inventory Policy

Description

Example Value

Out-of-stock behavior: continue, deny

deny

  • continue: Allow purchases when out of stock

  • deny: Prevent purchases when inventory reaches zero

Variant Fulfillment Service

Description

Example Value

Fulfillment service identifier

manual

Specifies which service handles fulfillment for this variant. During export, this is automatically set to manual for regular products and gift_card for gift card products.

Variant Inventory Qty

Description

Example Value

Current stock level

150

The available quantity for this variant in your default location.

This field is only used when no multi-location inventory columns (such as Inventory Available: [Location Name] or Inventory Available Adjust: [Location Name]) are present in your spreadsheet. If multi-location inventory columns exist, they take priority and this field will be ignored.

When your store has multiple locations, this column can only be used when creating new products (inventory will be set at the default location). It cannot be used to update existing products, as it could overwrite inventory at unintended locations. Use Inventory Available: [Location Name] instead to set inventory for a specific location.

Variant Inventory Adjust

Description

Example Value

Quantity adjustment

25

Relative change to current inventory (use - for decrease).

This field is only used when no multi-location inventory columns (such as Inventory Available: [Location Name] or Inventory Available Adjust: [Location Name]) are present in your spreadsheet. If multi-location inventory columns exist, they take priority and this field will be ignored.

This column also cannot be used when your store has multiple locations, as it could cause incorrect inventory counts. Use Inventory Available Adjust: [Location Name] instead to adjust inventory for a specific location.

Variant Cost

Description

Example Value

Cost per unit

12.50

The cost you pay for each unit of this variant, used for profit calculations. Use decimal format only (no commas or currency symbols), with period as the decimal separator.

When importing, leaving this cell blank will clear the existing cost value on Shopify.

Note that this field was initially in its own category named "Variant Cost" but is now in "Inventory / Variants" category along with the other variant fields.

Combined Listings

Combined listings join several separate products into a single listing, connected by a shared option such as color or model. A combined listing has a parent product (the listing itself, which can't be purchased and holds no inventory) and one or more child products (the individual products shown as options). On the storefront, customers see one product with all the child options available.

Combined listings are only available on Shopify Plus. On a non-Plus store the import still runs, but the combined listing columns are skipped and the products are imported normally (warning PRD064).

You express a combined listing in the same Products sheet using your normal product rows plus the columns below:

  • The parent product gets one row per combined-listing option value. Set Combined Listing Role to PARENT, use the Option1 Name / Option1 Value columns to define the option (for example Color / Grey), and use Combined Listing Child to point each option value at the child product that fills it.

  • The child products are ordinary product rows with their own variants, prices, and images. They need no special columns - a product automatically becomes a child when it's attached to a parent.

How the children are reconciled depends on the parent row commands:

  • MERGE (default) adds or updates the listed children without removing any that aren't in the file.

  • REPLACE syncs the listing to exactly the children in your file, detaching any that aren't listed. Note that a REPLACE recreates the parent product, so include all of its fields.

  • A Variant Command of DELETE on an individual parent row detaches just that one child, leaving the rest of the listing untouched - no REPLACE required.

A combined listing must keep at least one child. Removing the last one is blocked with error PRD068; to dissolve a listing, delete the parent product instead.

A minimal parent block for a "Modular Sofa" listing connecting a grey and a blue sofa:

Handle

Command

Combined Listing Role

Option1 Name

Option1 Value

Combined Listing Child

modular-sofa

MERGE

PARENT

Color

Grey

grey-sofa

modular-sofa

MERGE

PARENT

Color

Blue

blue-sofa

For step-by-step examples of creating a listing and adding, removing, or dissolving children, see How to manage Shopify combined listings.

Combined Listing Role

Description

Example Value

Combined listing role: PARENT, CHILD

PARENT

  • PARENT: This row's product is the combined listing parent. The role can only be set when the product is created; it cannot be added to an existing product.

  • CHILD: The product is a child of a combined listing. This value is set automatically when a child is attached and appears on export; you do not need to set it on import.

  • Blank: The product is a normal product that is not part of a combined listing.

Combined Listing Child

Description

Example Value

Handle of the child product for this option value

grey-sofa

Set on each PARENT row to map that row's option value to a child product by its handle. Leave blank on child and non-combined product rows. Use either this column or Combined Listing Child ID to identify the child - you do not need both.

Combined Listing Child ID

Description

Example Value

ID of the child product for this option value

8901234567890

An alternative to Combined Listing Child that identifies the child product by its Shopify product ID instead of its handle. Useful when handles are not stable or not known. If both columns are provided, the ID is used.

Shipping and Customs

The shipping and customs fields of each variant: whether it needs shipping, its shipping profile, its packed dimensions, its weight, and the customs information for international shipments. These are the fields of the Shipping section of a variant in the Shopify admin. Product exports include this group by default.

Variant Requires Shipping

Description

Example Value

Shipping requirement: TRUE, FALSE

TRUE

  • TRUE: Variant requires physical shipping

  • FALSE: Digital product that doesn't require shipping

Variant Shipping Profile

Description

Example Value

Assigned shipping profile for this variant

International

The shipping profile that controls shipping rates and delivery options for this variant. Each variant must be assigned to a shipping profile that determines how it can be shipped to customers.

When importing, you can specify the shipping profile by:

  • Name: The display name of the shipping profile (e.g., International, Domestic, General Profile)

  • ID: The numeric profile identifier (e.g., 101122334455)

  • GID: The full Shopify GraphQL ID (e.g., gid://shopify/DeliveryProfile/101122334455)

During export, this field always displays the profile name. Variants not assigned to a custom shipping profile will show General Profile, which is Shopify's default shipping profile that all stores have. This field remains empty when Variant Requires Shipping is set to FALSE, since digital products don't use shipping profiles.

Profile names are matched without regard to case, so General Profile and General profile refer to the same profile. A variant that is already in the named profile is left unchanged. If Shopify rejects a profile change, the row still imports and a PRD097 warning explains why.

This column isn't available on stores that have moved to Shopify's market-driven shipping, because those stores no longer have shipping profiles. Shipping rates are set on each market and apply to products by collection. On those stores, exports leave the column blank, and imports ignore it: General Profile and blank cells are skipped silently, and any other value produces a PRD096 warning. Shopify moves all stores to market-driven shipping by July 2027.

Variant Packed Length

Description

Example Value

Length of the variant when packed

90.5

The outer length of the variant after it is packed for shipping, in the unit from Variant Packed Dimension Unit. In the Shopify admin, this is the length in the Packed product size fields of the variant.

Shopify uses packed dimensions to pick the smallest saved box that fits the items of an order. That box is used for carrier-calculated shipping rates at checkout and when you buy a shipping label. If an item has no packed dimensions, or no box fits, Shopify uses the store's default package.

Shopify saves packed dimensions only when the length, width, and height all have a value. When you import:

  • A value that is blank, or a column that is not in the file, keeps the saved value of the variant. For example, you can import only Variant Packed Length to change the length.

  • If the variant has no saved packed dimensions and a value is blank, the dimensions are not saved and the row shows a PRD107 error. The rest of the row is imported.

  • To remove the packed dimensions of a variant, leave all three cells blank or set them to 0.

  • Values must be 0 or greater.

When you export, all four packed dimension cells are blank for a variant that has no packed dimensions.

Variant Packed Width

Description

Example Value

Width of the variant when packed

59.23

The outer width of the variant after it is packed for shipping. The import rules are the same as for Variant Packed Length.

Variant Packed Height

Description

Example Value

Height of the variant when packed

10.5

The outer height of the variant after it is packed for shipping. The import rules are the same as for Variant Packed Length.

Variant Packed Dimension Unit

Description

Example Value

Unit of the packed dimensions: cm, in

cm

  • cm: Centimeters

  • in: Inches

Shopify accepts only these two units for packed dimensions. Any other unit fails the row with PRD108.

If the cell is blank or the column is not in the file, the variant keeps its saved unit. A variant without saved packed dimensions gets the unit of your store's unit system: cm for metric and in for imperial.

If you import only this column, the saved values get the new unit. The values are not converted, so 10 cm becomes 10 in.

Variant Weight

Description

Example Value

Product weight value

0.5

Numeric weight value for shipping calculations.

Variant Weight Unit

Description

Example Value

Weight unit: kg, g, lb, oz

kg

  • kg: Metric weight measurement (kilograms)

  • g: Metric weight measurement (grams)

  • lb: Imperial weight measurement (pounds)

  • oz: Imperial weight measurement (ounces)

Variant Grams

Description

Example Value

Weight in grams - Import only

500

Legacy weight field measured in grams. This field is import-only and provided for backwards compatibility with Matrixify and Shopify CSV format.

When importing, if Variant Grams is provided without Variant Weight, the grams value will be automatically converted to the appropriate weight unit (using Variant Weight Unit if specified, or your store's default weight unit).

Note: For new imports, use the Variant Weight and Variant Weight Unit fields instead, as they provide more flexibility in specifying weight measurements.

Variant HS Code

Description

Example Value

Harmonized System trade code

6109.10.00

International trade classification code for customs and tariff purposes.

Note: Shopify no longer supports storing HS codes in the global.harmonized_system_code metafield. During import, if we detect this metafield on the product or variant, we will use its value as a fallback to set the Variant HS Code (stored on the InventoryItem).

Variant Country of Origin

Description

Example Value

Manufacturing country

CN

The country where the product was manufactured. Accepts a two-letter ISO country code (CN) or a full country name (China); names are converted to the matching code on import. Unrecognized values are skipped with a DAT003 warning.

Variant Province of Origin

Description

Example Value

Manufacturing province/state

Guangdong

Province or state where the product was manufactured within the country of origin.

Variant Unit Price

Description

Example Value

Unit pricing details

{"quantityUnit": "G", "quantityValue": 12.0, "referenceUnit": "KG", "referenceValue": 1}

Legacy JSON column for unit pricing measurement information. For new imports, use the separate unit price columns described in the Unit Pricing section instead.

{
  "quantityUnit": "G",
  "quantityValue": 12.0,
  "referenceUnit": "KG",
  "referenceValue": 1
}

If both this JSON column and the separate unit price columns are present, the JSON column takes priority for that row.

Unit Pricing

Unit pricing displays the price per standard unit of measurement (e.g., price per kilogram or per liter), helping customers compare products of different sizes. This is required in some regions like the European Union for certain product categories.

Unit Price Total Measure

Description

Example Value

Total quantity of product in the package

500

The numeric quantity value representing the total amount of product. Decimal values are supported (e.g., 12.5).

This is the "what's in the package" measurement. For example, if you're selling a 500g bag of coffee, this value would be 500.

Unit Price Total Measure Unit

Description

Example Value

Unit for the total quantity

G

The unit of measurement for the total product quantity. Must be one of the supported units listed below.

Supported Units:

Unit

Description

Category

CL

Centiliters

Volume

CM

Centimeters

Length

FLOZ

Fluid ounces

Volume

FT

Feet

Length

FT2

Square feet

Area

G

Grams

Weight

GAL

Gallons

Volume

IN

Inches

Length

ITEM

Items (count)

Count

KG

Kilograms

Weight

L

Liters

Volume

LB

Pounds

Weight

M

Meters

Length

M2

Square meters

Area

M3

Cubic meters

Volume

MG

Milligrams

Weight

ML

Milliliters

Volume

MM

Millimeters

Length

OZ

Ounces

Weight

PT

Pints

Volume

QT

Quarts

Volume

YD

Yards

Length

Unit Price Base Measure

Description

Example Value

Reference quantity for price comparison

1

The numeric reference value that defines the standard unit for price comparison. This is typically 1 (e.g., price per 1 kilogram).

This is the "price per X" measurement. For example, if you want to show price per kilogram, set this to 1 with a base measure unit of KG.

Unit Price Base Measure Unit

Description

Example Value

Unit for the reference quantity

KG

The unit of measurement for the reference/base quantity. Must be one of the supported units listed above under Unit Price Total Measure Unit.

The base measure unit should typically match or be compatible with the total measure unit (e.g., G/KG for weight, ML/L for volume).

Unit Pricing Behaviors

  • Leave all columns blank - Skips updating unit pricing (preserves existing value)

  • Set either value to 0 - Clears/removes unit pricing from the product

  • Both formats present - If a row has a value in the Variant Unit Price (JSON) column, the separate columns are ignored for that row

Unit Pricing Example

To set up a 500g bag of coffee with a price-per-kilogram display:

Unit Price Total Measure

Unit Price Total Measure Unit

Unit Price Base Measure

Unit Price Base Measure Unit

500

G

1

KG

This tells Shopify: "This package contains 500 grams, show the price per 1 kilogram."

Multi-Location Inventory Levels

For each location, use column names like Inventory Available: My Custom Location and Inventory Available Adjust: My Custom Location where "My Custom Location" is replaced with your actual location name.

When setting or adjusting inventory for a location, the variant will automatically be linked to that location if it's not already linked. This applies to both Inventory Available: [Location Name] and Inventory Available Adjust: [Location Name] columns.

Inventory Available

Description

Example Value

Available quantity in the location

1023

The available inventory quantity at the location.

Setting inventory using this column will automatically link the variant to the specified location if it's not already linked.

The column also accepts the special value Stocked. It links the variant to the location without setting a tracked quantity. Exports write Stocked for variants whose inventory is not tracked, so you can re-import an exported file without editing those cells and the variant stays untracked and stocked at the same locations. Stocked is not valid in the Inventory Available Adjust column.

Leaving the cell blank when updating an existing variant unstocks the variant from that location. The location stops counting toward the variant's available inventory and can no longer fulfill it. To leave inventory at a location untouched, remove that location's column from the file instead of leaving the cells blank. Shopify requires every variant to be stocked at at least one location, so a row whose blank cells would remove all of a variant's locations is skipped with an error (see PRD077).

Shopify deactivates the location's inventory record rather than deleting it, so the Shopify admin can still show the location's last on hand figure after unstocking. If you stock the variant at that location again, Shopify restores the previous quantities.

Inventory Available Adjust

Description

Example Value

Adjustment to quantity

-5

Relative inventory change at the location (use - to decrease quantity).

Adjusting inventory using this column will automatically link the variant to the specified location if it's not already linked.

Pricing by Catalogs

Use column names in the format Included / Belgium, Variant Included / Belgium, Price / Belgium, Compare At Price / Belgium where "Belgium" is replaced with the title of a catalog or the name of a market.

On export there is one set of these columns for each catalog on the store, labeled with the catalog title: market catalogs first, then B2B company location catalogs. A catalog is what holds the price list and the product availability, so a catalog shared by several markets appears once. A market without a catalog has no columns. Archived catalogs are left out.

On import, a name is matched to a catalog title first, so an exported file imports back into the catalogs it came from. A name that matches no catalog title is matched to a market name and written to that market's catalog, so a file that uses market names works too. To price a market that has no catalog yet, add a Price / <Market> column by hand: the import creates the catalog and its price list.

In Shopify, one catalog can serve several markets. Columns that name those markets all write to the same catalog, so give them the same value or keep only one of them. If two such columns disagree on a row, the first column in the file wins and the import adds a PRD099 warning. A header that matches neither a market nor a catalog is skipped with a PRD098 warning. To manage a catalog directly, including its price list settings, use the Catalogs sheet.

Included

Description

Example Value

Product market availability: TRUE, FALSE

TRUE

  • TRUE: Product is included in the specified market's catalog

  • FALSE: Product is excluded from the specified market's catalog

This is a product-level field: in Shopify the whole product is included in (or excluded from) a market's catalog. Set the value on the product's first row; values on other variant rows are ignored. Exports label the column with the catalog title, like Included / EUR Pricing. On import a market name works too.

Market inclusion is separate from sales channel publishing - these columns don't change whether the product is visible on the Online Store. Use the Published column or Published: [Sales Channel] columns to control sales channel visibility.

Variant Included

Description

Example Value

Variant market availability: TRUE, FALSE

FALSE

  • TRUE: This variant is available in the specified market's catalog

  • FALSE: This variant is excluded from the specified market's catalog

Unlike Included, this controls availability for an individual variant within a market's catalog. Set the value on each variant's own row.

If any variant is included in a market, the product is automatically published to that catalog (a variant can only appear in a catalog its product belongs to). To remove a whole product from a market, use the product-level Included / [Market] column - the variant column never removes a product on its own, so excluding one variant won't affect the others. If you set Included / [Market] for the same market, that explicit value takes precedence.

A blank cell is a no-op - it leaves that variant's current catalog availability unchanged. Because including any variant publishes the whole product to the catalog (which makes every variant available by default), you must set FALSE on each variant you want excluded. A variant left blank, or not present in the file at all, stays included - a blank is not an exclusion. For example, to add a product to a market with only one variant available, set that variant to TRUE and set every other variant to FALSE in the same import.

Setting a variant to FALSE never publishes the product to a catalog. If the product isn't already in the market's catalog, a FALSE value is a safe no-op and won't pull the product (or its other variants) into the catalog.

Requires a market with an active catalog publication (a pricing-only market has no per-variant gate). This column has no Matrixify equivalent.

On export, Variant Included is only filled in for catalogs that have publishing controls (a catalog publication). For pricing-only catalogs the cell is left blank, because Shopify has no per-variant include switch for them - publishing controls are turned off, so every variant is implicitly available. In that case the product-level Included / [Market] column still shows TRUE, so seeing Included / [Market] as TRUE next to a blank Variant Included / [Market] is expected, not an error.

Price

Description

Example Value

Market-specific price

34.99

Price for the variant in the specified market's currency.

Values follow the same number rules as Variant Price: 21,53 is read as 21.53 (the file analysis adds a DAT019 warning so you can double-check) and 1,234.56 as 1234.56.

Exports label the column with the catalog title, like Price / EUR Pricing. On import a market name works too.

On export, this column shows only fixed catalog prices. If a catalog sets its prices with a percentage adjustment (for example "base price minus 20%"), the Price / [Market] cell is left blank, even though the product is included in the catalog. Shopify calculates those prices automatically from the catalog's adjustment instead of storing a fixed per-variant value, so there is no fixed price to export. A blank price here is not an error: the variant still has a price in that market, computed from your catalog's adjustment. To change it, update the base Variant Price (the adjustment follows automatically), or enter a fixed price in this column to override the adjustment for that variant. A catalog without a price list also exports blank, because there is nothing to price, and a market without a catalog has no columns at all.

Compare At Price

Description

Example Value

Market-specific reference price

44.99

Original or MSRP price for the variant in the specified market's currency.

Exports label the column with the catalog title, like Compare At Price / EUR Pricing. On import a market name works too.

When setting a compare-at price for a market, you must also provide the regular price for that same market. Markets without catalogs will have them created automatically during import.

Country-Specific HS Codes

Country-specific Harmonized System (HS) codes let you provide detailed customs classification codes that vary by destination country, ensuring accurate tariff calculations for international shipping. You can specify codes beyond the standard 6 digits for each country you ship to. To export country-specific HS codes, you will need to select the "Country-Specific HS Codes" field group in the export settings.

Country HS Code

Description

Example Value

Country-specific Harmonized System trade code

6109.10.00

You can provide HS codes for specific countries by adding columns with the format Country HS Code: [Country Name] or Country HS Code: [Country Code]. For example:

  • Country HS Code: Ascension Island

  • Country HS Code: CA

Importing: It is only possible to add or update Country-Specific HS codes. Due to a Shopify API limitation, it is not possible to remove them using the import.

Exporting: These columns are only included in the export file if Country-Specific HS codes are present for at least one product.

Metafields and SEO

Metafields can be imported and exported with products to store custom data, SEO information, and additional attributes. You can export:

  • Product metafields

  • Variant metafields

SEO fields are special metafields that can be referenced using either their metafield column name or a shorthand:

  • SEO Title: SEO Title or Metafield: title_tag or Metafield: global.title_tag

  • SEO Description: SEO Description or Metafield: description_tag or Metafield: global.description_tag

If no SEO title or description is provided, Shopify automatically generates them from the product's title and description.

For rich text metafields (type rich_text_field), you can provide HTML content that will automatically convert to Shopify's JSON format during import.

To start from a spreadsheet pre-filled with your store's product and variant metafield columns (plus example values for each type), open Altera and go to Tools > Metafield import template and click Create template. See the metafield import template guide for details.

For detailed information about working with metafields, see our Metafields guide.

Google Shopping

Google Shopping columns let you import the product attributes used by Shopify's Google & YouTube sales channel. They use the column-name format Google Shopping / [Field] and are stored as product metafields in the mm-google-shopping namespace.

Each Google Shopping / [Field] column maps to the metafield mm-google-shopping.[key], where the key is the field name lowercased with spaces replaced by underscores. For example, Google Shopping / Age Group is stored as mm-google-shopping.age_group. Setting Google Shopping / [Field] is equivalent to setting the matching Metafield: mm-google-shopping.[key] column directly.

Commonly used columns:

  • Google Shopping / Google Product Category

  • Google Shopping / Gender

  • Google Shopping / Age Group

  • Google Shopping / MPN

  • Google Shopping / Condition

  • Google Shopping / Custom Product

  • Google Shopping / Custom Label 0 through Google Shopping / Custom Label 4

Google Shopping / MPN

Description

Example Value

Example Google Shopping field (Manufacturer Part No.)

GO-12345-OG

Values are stored as single line text in the mm-google-shopping namespace at the product level. To remove a value, clear the cell (an empty value deletes the metafield). To set these attributes per variant instead, use Variant Metafield: mm-google-shopping.[key] columns. Consult the Google Merchant Center specification for allowed values and capitalization for each field.

Export Filters

You can use these filters to limit which products are exported:

  • handle: Filter by product handle

  • title: Filter by product title

  • barcode: Filter by product barcode

  • category_id: Filter by category ID

  • collection_id: Filter by collection ID

  • inventory_total: Filter by total inventory quantity

  • price: Filter by product price

  • product_type: Filter by product type

  • sku: Filter by SKU

  • variant_id: Filter by variant ID

  • variant_title: Filter by variant title

  • variant_inventory_quantity: Filter by the inventory quantity of each variant. See Variant inventory qty

  • vendor: Filter by vendor name

  • created_at: Filter by creation date

  • updated_at: Filter by last update date

  • published_at: Filter by publish date

  • gift_card: Filter by whether the product is a gift card

  • is_price_reduced: Filter by whether the product has a reduced price

  • tag: Filter by tag (include)

  • tag_not: Filter by tag (exclude)

  • status: Filter by product status (Active, Draft, Archived, Unlisted). Select multiple statuses with equals any of

  • publishable_status: Filter by publication status (published, unpublished)

  • combined_listing_role: Filter by combined listing role (Shopify Plus)

  • metafield:<namespace>.<key>: Filter by the value of a product metafield, for example metafield:custom.wrapper. See Metafield value filters

The combined_listing_role filter accepts the values parent, child, and no_role, and lets you select more than one at once. Choosing both parent and child exports every product that is part of a combined listing - the parent and all of its children - in a single filter. See Combined Listings for how these products fit together.

Variant inventory qty

The Variant inventory qty filter exports the products that have at least one variant whose Variant Inventory Qty (the total of all locations) matches the condition. Use it to find the variants that are low or out of stock, for example Variant inventory qty less than 10. The inventory_total filter checks the total of the whole product instead, so it misses a product with one low variant and other variants in stock.

The filter accepts whole numbers with the conditions equals, does not equal, greater than, and less than.

  • To export only the matching variants of each product, select Limit export to selected variants below the filters. Without it, the export has all the variants of a matching product.

  • The export can't show a product count before it runs with this filter.

  • A variant that doesn't track inventory is checked with the quantity that Shopify keeps for it (usually 0), although its Variant Inventory Qty column is empty.

  • With OR, you can combine this filter only with other Variant inventory qty filters.

  • The export checks every product that your other filters select. On a large store, add other filters (for example Status or Vendor) to make the export faster.

Product and Variant Grouping

When importing data with multiple rows per product (such as products with multiple variants or images), rows are grouped together to form complete product objects. The grouping and search hierarchy works as follows:

Product-Level Grouping

When your spreadsheet contains product-level fields (ID, Handle, or Title), the system groups rows using this priority order:

  1. By ID: If a product ID is present, all rows with the same ID are grouped together. The system searches Shopify to find existing products by their unique identifier.

  2. By Handle: If no ID is provided or no matching product is found, rows with matching handles are grouped together. The system searches for products using the handle.

  3. By Title: If neither ID nor handle is provided, rows with identical titles are grouped together. The system searches for products with exact title matches. Note: If multiple products have the same title, the import will fail with an error.

Variant-Level Grouping

When your spreadsheet only contains variant-level identifiers (no product ID, handle, or title columns), the system uses variant fields to locate the parent product:

  1. By Variant ID: Searches Shopify to find the product containing this specific variant

  2. By SKU: Searches across all product variants to find products containing variants with matching SKUs

  3. By Barcode: Searches by barcode across product variants (only when no SKU or Variant ID columns exist). Any barcode of a variant matches, not only the primary one

You can explicitly designate an identifier column by adding [ID] to the column name. For example, Variant SKU [ID] tells the system to use the SKU column to find and group products, allowing you to update product-level fields (like Title or Vendor) using only SKU values. This works for:

  • ID [ID] (product-level ID)

  • Variant ID [ID]

  • Variant SKU [ID]

  • Variant Barcode [ID]

When using the [ID] suffix, rows with the same value in that column will be grouped together as a single product, even if you're updating product-level fields. For large imports, the [ID] suffix also triggers an internal optimization that preloads store data for faster lookups.

Fallback Grouping

When your spreadsheet contains no identifying columns (no product ID, handle, title, variant ID, SKU, or barcode), the system uses these fallback methods:

  1. By Top Row: If a "Top Row" column is present, rows are grouped using the Top Row markers. Each group of rows between TRUE values in the Top Row column becomes a single product.

  2. All Rows Together: If no Top Row column exists, all rows in the spreadsheet are grouped together as a single product.

This fallback behavior ensures compatibility with Matrixify exports and custom data formats that don't include standard Shopify identifiers.

Variant Matching Within Products

When updating existing products, variants within the product are matched using this priority:

  1. By Variant ID: Direct match using the variant's unique identifier

  2. By Option Combination: Creates a hash from the variant's option values (Option1 Value, Option2 Value, Option3 Value) to match variants with identical option combinations

  3. By SKU: Normalizes and compares SKU values to find matching variants

  4. By Variant Barcode: Matches a variant that has this barcode among its barcodes, primary or not. The barcode is not written back, so the primary barcode stays the same

  5. By Variant Barcodes: Matches the variant that has every barcode listed in the cell. The cell is then applied with its Variant Barcodes Command

The match doesn't depend on the Variant Barcodes Command. On a product with a single variant, a row without Variant ID, option values, SKU, or Variant Barcode matches that variant, so MERGE and UPDATE change it. A DELETE row only deletes the variant when it matches by an identifier, or when the variant is the default Default Title variant; otherwise the row is skipped with PRD104. On a product with several variants, a row identified only by a barcode that no variant has (or, for Variant Barcodes, a cell with a barcode that the variant doesn't have) fails with PRD103, unless the row has option values to create a new variant.

Multiple media files, inventory levels, and other sub-data are also grouped under their parent product using this same hierarchy.

When adding a new variant to a product, include at least one identifier column (such as Variant SKU, Option1 Value, or Variant Barcode) so that Altera can distinguish the new variant from existing ones. See How to add variants to existing products for a step-by-step guide.

Did this answer your question?