Sample Files
Download sample spreadsheets to see the structure for importing product data:
Products Sample - General product import template
Products with Country-Specific HS Codes - Shows how to set country-specific HS codes for customs
Sales Channel Publishing - Shows product and per-variant publishing across Online Store, Shop, and Buy Button
Combined Listing - Shows a parent listing connecting two child products by color (Shopify Plus)
General
ID
Description | Example Value |
Shopify's unique product identifier |
|
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 |
|
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: 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 |
|
The main product title displayed to customers throughout your store.
Body HTML
Description | Example Value |
Product description |
|
Full product description supporting HTML formatting for rich content display.
Vendor
Description | Example Value |
Product manufacturer/brand |
|
The company or brand that manufactures or supplies the product.
Type
Description | Example Value |
Product category |
|
Free-form text field for categorizing products within your store.
Tags
Description | Example Value |
Comma-separated product tags |
|
Tags help organize products and enable customer filtering and search functionality.
Tags Command
Description | Example Value |
Tag operation: REPLACE, DELETE, 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 |
|
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 |
|
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: 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: 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 |
|
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 |
|
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 StorePublished: POSPublished: Shop(for the Shop app)Published: FacebookPublished: Buy Button
Published
Description | Example Value |
Publication status for specific channel |
|
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 |
|
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 StoreVariant Published: Shop(for the Shop app)Variant Published: Buy ButtonVariant 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 SaletoFALSEis 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 |
|
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 |
|
TRUE: Product functions as a digital gift card
FALSE: Regular physical or digital product
URL
Description | Example Value |
Full product page URL - Export only |
|
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 |
|
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 |
|
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 |
|
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:
Category ID (e.g., sg-4-17-2-17)
Category (full path, e.g., Apparel > Men > T-Shirts)
Category Name (e.g., T-Shirts)
Category: ID
Description | Example Value |
Category identifier |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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=0https://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.jpgsftp://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
PRD071warning (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
PRD043warning (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: 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 |
|
Determines the order in which media files appear on the product page.
Image Width
Description | Example Value |
Media width in pixels - Export only |
|
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 |
|
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 |
|
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 |
|
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 |
|
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: 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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
Links the second product option to a metafield. See Option1 Linked To for details.
Option3 Name
Description | Example Value |
Third option category |
|
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 |
|
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 |
|
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 |
|
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 |
|
Determines the order in which variants appear when customers view options.
Variant SKU
Description | Example Value |
Stock keeping unit |
|
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 |
|
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 |
|
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 |
|
Numeric weight value for shipping calculations.
Variant Weight Unit
Description | Example Value |
Weight unit: kg, g, lb, oz |
|
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 |
|
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 |
|
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 |
|
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: 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 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 |
|
continue: Allow purchases when out of stock
deny: Prevent purchases when inventory reaches zero
Variant Fulfillment Service
Description | Example Value |
Fulfillment service identifier |
|
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: Variant requires physical shipping
FALSE: Digital product that doesn't require shipping
Variant Shipping Profile
Description | Example Value |
Assigned shipping profile for this variant |
|
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 |
|
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 |
|
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 |
|
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 RoletoPARENT, use theOption1 Name/Option1 Valuecolumns to define the option (for exampleColor/Grey), and useCombined Listing Childto 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.REPLACEsyncs the listing to exactly the children in your file, detaching any that aren't listed. Note that aREPLACErecreates the parent product, so include all of its fields.A
Variant CommandofDELETEon an individual parent row detaches just that one child, leaving the rest of the listing untouched - noREPLACErequired.A
Variant CommandofIGNOREskips 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 |
|
|
|
|
|
|
|
|
|
|
|
|
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: 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 |
|
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 |
|
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 |
|
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 |
|
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 |
|
Province or state where the product was manufactured within the country of origin.
Variant Unit Price
Description | Example Value |
Unit pricing details |
|
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 |
|
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 |
|
The unit of measurement for the total product quantity. Must be one of the supported units listed below.
Supported Units:
Unit | Description | Category |
| Centiliters | Volume |
| Centimeters | Length |
| Fluid ounces | Volume |
| Feet | Length |
| Square feet | Area |
| Grams | Weight |
| Gallons | Volume |
| Inches | Length |
| Items (count) | Count |
| Kilograms | Weight |
| Liters | Volume |
| Pounds | Weight |
| Meters | Length |
| Square meters | Area |
| Cubic meters | Volume |
| Milligrams | Weight |
| Milliliters | Volume |
| Millimeters | Length |
| Ounces | Weight |
| Pints | Volume |
| Quarts | Volume |
| Yards | Length |
Unit Price Base Measure
Description | Example Value |
Reference quantity for price comparison |
|
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 |
|
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 |
|
|
|
|
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 |
|
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 |
|
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: 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 |
|
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 |
|
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 |
|
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 |
|
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 IslandCountry 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 TitleorMetafield: title_tagorMetafield: global.title_tagSEO Description:
SEO DescriptionorMetafield: description_tagorMetafield: 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 CategoryGoogle Shopping / GenderGoogle Shopping / Age GroupGoogle Shopping / MPNGoogle Shopping / ConditionGoogle Shopping / Custom ProductGoogle Shopping / Custom Label 0throughGoogle Shopping / Custom Label 4
Google Shopping / MPN
Description | Example Value |
Example Google Shopping field (Manufacturer Part No.) |
|
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 handletitle: Filter by product titlebarcode: Filter by product barcodecategory_id: Filter by category IDcollection_id: Filter by collection IDinventory_total: Filter by total inventory quantityprice: Filter by product priceproduct_type: Filter by product typesku: Filter by SKUvariant_id: Filter by variant IDvariant_title: Filter by variant titlevendor: Filter by vendor namecreated_at: Filter by creation dateupdated_at: Filter by last update datepublished_at: Filter by publish dategift_card: Filter by whether the product is a gift cardis_price_reduced: Filter by whether the product has a reduced pricetag: Filter by tag (include)tag_not: Filter by tag (exclude)status: Filter by product status (Active, Draft, Archived). Select multiple statuses withequals any ofpublishable_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:
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.
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.
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:
By Variant ID: Searches Shopify to find the product containing this specific variant
By SKU: Searches across all product variants to find products containing variants with matching SKUs
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:
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.
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:
By Variant ID: Direct match using the variant's unique identifier
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
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.
