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. 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.

Command

Description

Example Value

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

MERGE

  • MERGE: Update existing product or create if not found

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

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

  • REPLACE: Delete existing product and create new one

  • IGNORE: Skip this product row during import

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 and Point of Sale sales channels.

  • When creating a product, it is published 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.

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 determines where the product appears within your store's sales channels. Options are:

  • web: Product is visible on the web

  • global: Product is visible on all sales channels

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

Collection handles and formats follow the same conventions used by Matrixify.

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.

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.

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 specified media from product

  • 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. 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.

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.

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.

Variant Command

Description

Example Value

Variant operation

MERGE

  • MERGE: Update existing variant or create if not found

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

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

  • IGNORE: Skip this variant row during import

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.

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}.

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 fasterlookups. 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.

Variant Barcode

Description

Example Value

Product barcode

123456789012

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.

When updating existing variants that are matched by another identifier (like Variant ID, SKU, or option values), leaving this cell blank will clear the existing barcode on Shopify. 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.

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.

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 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 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 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.

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 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.

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 Variant Command of IGNORE skips that row entirely, neither attaching nor detaching its child.

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.

Customs Information

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.

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

Column naming mirrors Matrixify's market pricing columns, so sheets are interchangeable.

Use column names with market names in the format Included / Belgium, Variant Included / Belgium, Price / Belgium, Compare At Price / Belgium where "Belgium" is replaced with your specific market name.

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, matching Matrixify: 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. Use market names in column headers like Included / US or Included / Canada.

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 markets whose catalog has publishing controls (a catalog publication). For pricing-only market catalogs the cell is left blank, because Shopify has no per-variant include switch for those markets - 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.

Use market names in column headers like Price / US or Price / Canada.

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. This matches how Matrixify exports catalog pricing. 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 market with no catalog at all (no price list) also exports blank, because there is nothing to price.

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.

Use market names in column headers like Compare At Price / US or Compare At Price / Canada.

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

Metafield columns are Matrixify-compatible, including rich text handling and SEO fields.

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. These are the same column names produced by Shopify's legacy product CSV export, so files exported from Shopify or migrated from Matrixify import without renaming.

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

  • 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). 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)

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.

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:

The grouping behavior aligns with Matrixify, so multi-row product sheets exported by Matrixify work out-of-the-box.

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)

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 (matching Matrixify behavior).

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

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?