Import products from Google Sheets
Imports or updates products, variants, metafields, and multi-location inventory from a Google Sheet with row-level error reporting.
Setup guide
Before you start
This template reads a Google Sheet and uses Shopify productSet to create or update products by Handle.
Use this template when you want a sheet-driven product import with support for:
- full variant sync per product
- category IDs and variant-level tax/origin fields
- product and variant metafields
- product and variant images
- multi-location inventory updates
- optional auto-publishing to Shopify publications
- row-level error reporting to a report sheet
Sample file:
Sheet model
- One row = one variant
- Rows are grouped by
Handle - Header names matter; column order does not
- The sheet is authoritative for the variant list of each product
If a product has three desired variants, all three variants must be present in the sheet for that Handle.
Required headers
HandleTitleVariant SKU
Common optional headers
Body HTMLVendorProduct TypeTagsStatusGift CardCategory: IDImage SrcImage Alt TextVariant PriceVariant Compare At PriceVariant BarcodeVariant ImageVariant PositionVariant TaxableVariant Tax CodeVariant Inventory PolicyVariant CostVariant WeightVariant Weight UnitVariant GramsVariant Requires ShippingVariant TrackedVariant HS CodeVariant Country of OriginVariant Province of Origin
Variant options
Use option columns when a product has multiple variants:
Option1 Name/Option1 ValueOption2 Name/Option2 ValueOption3 Name/Option3 Value
For the same Handle, option names and product-level fields must stay internally consistent across all rows.
Dynamic headers
You can add these dynamic columns:
Product Metafield: namespace.key|typeVariant Metafield: namespace.key|typeInventory: Shopify Location Name
Examples:
Product Metafield: custom.material|single_line_text_fieldVariant Metafield: specs.origin_country|single_line_text_fieldInventory: Sydney Warehouse
Additional supported fields
Category: IDmust be a valid Shopify taxonomy category IDImage Alt Textis applied to each image URL listed on that rowVariant Imageattaches an image URL to a specific variant and also includes it in the product file listVariant Weightshould be paired withVariant Weight Unit(g,kg,oz, orlb)Variant Gramsstill works and is used as a fallback whenVariant Weightis not provided
Publishing behavior
If you select one or more Shopify sales channels during setup, ACTIVE products are published to those destinations after a successful sync.
The setup UI loads the shop's live publications and stores their publication IDs, so the workflow publishes by Shopify publication ID instead of typed names.
Error reporting
If Report sheet name is set, the template appends row-level failures to that tab.
Create the report tab before running the template. Leave the field blank to disable report logging.
Google credentials
The template setup form saves these as workflow secrets:
GOOGLE_CLIENT_EMAILGOOGLE_PRIVATE_KEY
Paste the full PEM private key including the BEGIN and END lines.
Operational notes
productSetreplaces the variant list for each Handle- Inventory columns must match Shopify location names exactly, or be a unique case-insensitive match
- This template updates only fields represented in the sheet; it does not clear unrelated scalar product fields
- Increase pacing delays if you see throttling on large catalogs
Setup fields
The Google Sheet ID that contains the product import tab.
The tab name to read product rows from.
Optional tab used for row-level error reporting. Leave blank to disable report logging.
How many product jobs are grouped into each orchestration batch.
Delay between orchestration batches. Increase this if you see heavy throttling.
Delay between product syncs within a batch.
Optional Shopify sales channels to publish ACTIVE products to after a successful sync.
The Google service account client email used to access Sheets.
The full Google service account private key in PEM format, including the BEGIN/END lines. This is saved as an encrypted workflow variable after the workflow is created.