Inventory and merch

Sync inventory from Google Sheets

Updates Shopify inventory from Google Sheets using Variant SKU or Handle matching, with optional product-level auto publish and auto unpublish rules.

Setup guide

Before you start

This template reads a Google Sheet and updates Shopify inventory for existing products.

Matching modes

  • Variant SKU mode: best for catalogs with unique SKUs
  • Handle mode: only for single-variant products

Sheet model

  • Row 1 must contain headers
  • Header names matter; column order does not
  • Each row represents one identifier update row
  • Blank inventory cells are skipped
  • A quantity of 0 is treated as a real update and sets that location to zero

Required headers

When Identifier mode is sku:

  • Variant SKU
  • one or more Inventory: Location Name columns

When Identifier mode is handle:

  • Handle
  • one or more Inventory: Location Name columns

Examples:

  • Inventory: Sydney Warehouse
  • Inventory: Melbourne Warehouse

Multi-location inventory

Use one inventory column per Shopify location. Any non-empty integer value in those columns is synced to that location.

If an inventory item is not yet stocked at a target location, the workflow automatically activates it before retrying the quantity update.

Sample file

Publishing behavior

Optional auto publish and auto unpublish rules work at the product level. After a successful inventory update, the workflow checks Shopify's live tracked inventory for the affected product and then:

  • publishes the product when any tracked variant has inventory above zero
  • unpublishes the product when all tracked variants are at zero or below

Selected Shopify publications are loaded live in the setup UI and stored by publication ID.

Products with untracked variants are skipped for auto publish and auto unpublish, because tracked inventory alone would not be a reliable visibility signal for them.

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_EMAIL
  • GOOGLE_PRIVATE_KEY

Paste the full PEM private key including the BEGIN and END lines.

Internal pacing

This template automatically chooses internal row batch sizing and chunk staggering based on sheet size, inventory-column complexity, and whether auto publish or auto unpublish is enabled. Shopify throttling is handled internally with deferred retries so the workflow can slow down instead of surfacing throttle failures as row errors.

Important limits

  • Handle mode only supports single-variant products
  • Variant SKU mode is the recommended mode for multi-variant catalogs
  • This template updates inventory only. It does not change price, cost, metafields, or product content

Header mapping overrides

If your supplier or source file uses different column names, you can keep the original file and configure mappings in setup:

  • Identifier source header override lets you point the template at a custom SKU or handle column
  • Inventory header mappings lets you map supplier stock columns to Shopify locations using one line per mapping

Example:

  • Supplier SKU => set in the identifier override field
  • Sydney Qty => Sydney Warehouse
  • Melbourne Stock => Melbourne Warehouse

Setup fields

Spreadsheet ID
textRequiredconfig

The Google Sheet ID that contains the inventory sync tab.

Source sheet name
textRequiredconfig

The tab name to read inventory rows from.

Report sheet name
textOptionalconfig

Optional tab used for row-level error reporting. Leave blank to disable report logging.

Identifier mode
selectRequiredconfig

Use SKU for most catalogs. Use Handle only for single-variant products.

Identifier source header override
textOptionalconfig

Optional source header name to use instead of the default 'Variant SKU' or 'Handle' column.

Inventory header mappings
textareaOptionalconfig

Optional line-by-line mapping when supplier stock columns do not use the 'Inventory: Location Name' format. Use one line per mapping: Source Header => Shopify Location Name

Channels for auto publish/unpublish
shopify_publication_multiselectOptionalconfig

Optional Shopify sales channels used by the auto publish and auto unpublish rules.

Auto publish when in stock
checkboxOptionalconfig

Publish affected products to the selected channels when Shopify's live tracked inventory is above zero after sync.

Auto unpublish when out of stock
checkboxOptionalconfig

Unpublish affected products from the selected channels when all tracked variants are at zero or below after sync.

Google client email
textRequiredenv

The Google service account client email used to access Sheets.

Google private key
textareaRequiredenv

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.