Inventory and merch

Sync inventory from email CSV

Updates Shopify inventory from a CSV attachment sent to the workflow email address, with optional product-level auto publish and auto unpublish rules.

Setup guide

Before you start

This template reads a CSV attachment from an inbound email and updates Shopify inventory for existing products.

How the trigger works

  • After saving the workflow, JsWorkflows gives it a dedicated inbound email address
  • Send or forward an email with one CSV attachment to that address
  • The workflow processes the first supported CSV attachment it finds
  • Additional attachments are ignored

Matching modes

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

Source requirements

  • The inventory file must be attached directly to the email as a CSV file
  • The template processes the first attachment with a .csv filename or text/csv content type
  • 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.

Internal pacing

This template automatically chooses internal row batch sizing and chunk staggering based on CSV 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
  • Send one CSV attachment per email for predictable run summaries

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

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.