Shopify inventory countsright before they're imported.
Collect stock counts for every variant and location in the columns Shopify's inventory import reads, and download a file ready to update your on-hand quantities.
Shopify Inventory
Try the template with up to 3 rows
What You'll Collect
Handle
StringThe product's URL handle: letters, numbers and dashes.
Option1–3 Name & Value
StringWhich variant the row is for, such as Size: Medium.
SKU & Title
StringFor reference while counting. The import doesn't change them.
Location
StringSpelled exactly as in your Shopify admin, including capitals.
On hand (current)
StringThe quantity from your export, which Shopify uses as a safety check.
On hand (new)
NumberThe quantity to set, as a whole number. Blank keeps the current quantity.
Need more than three rows?
Collect up to a thousand rows instead.
The free template is limited to three rows so you can try the workflow. Create your own form when your warehouse team or a stockist needs to send counts for every variant and location.
Create your own formUp to 1,000 rows
One row per variant per location, for a whole stocktake.
Shopify column names
The headers match Shopify's inventory CSV, so the file imports as is.
Checked as they type
Missing handles and locations, and quantities that aren't whole numbers, are flagged.
Locations as a dropdown
Turn Location into a list of your locations in your own form, so names always match.
How it works
From stocktake to Shopify in three steps.
01
Collect
Export your inventory from Shopify, paste it into the form, and send it to whoever is counting.
02
Complete
They enter On hand (new) for each row. Anything that isn't a whole number, or a missing location, is highlighted.
03
Download
Download the CSV and import it in Shopify under Products, then Inventory, then Import.
Why use a form?
A wrong inventory file changes real stock.
Shopify's inventory import sets the quantities you send. A location name spelled differently, a decimal where a whole number belongs or a row for the wrong variant means stock levels that don't match the shelf, and orders you can't fulfil.
A form keeps every row in Shopify's format while people count, so the file is right before it touches your store.
Location names that don't match
Location is required on every row, and the field explains it must match your admin exactly.
Quantities that aren't whole numbers
Decimals, text and symbols in On hand (new) are flagged before the file is downloaded.
Rows without a handle
Every row needs the product's handle, so Shopify can find the variant.
Shopify inventory CSV template
Updating Shopify inventory with a CSV
Shopify lets you update stock levels in bulk with an inventory CSV, separate from the product CSV. In the recommended All states layout, each variant has one row per location, and you set the new quantity in the On hand (new) column. Leaving On hand (new) blank keeps that location's quantity as it is.
The file is identified by the product's handle and its option values, so those must match your products exactly. Location names are case sensitive and must match the names in your Shopify admin. Quantities are whole numbers; zero and negative numbers are allowed. SKUs and option values can't be changed through this file: use the product CSV for those.
Shopify also uses On hand (current) as a safety check. It's the quantity at the time you exported, and if stock has changed since, those rows fail and Shopify emails you the list. Enter Not stocked for a location that has never held the product. Clearing On hand (current) skips the check, which Shopify warns removes that protection, so the safest workflow is to export first, then count.
Use this template to collect counts from a warehouse team, a store or a stockist, then import the file. It covers the columns stock counts need; bin names, customs codes and packed dimensions can be added to your own form if you use them.
How-To Guides
Related Templates
Importing products too? See the Shopify Products template and Shopify product CSV import errors.
Need a CSV form of your own?
Create a custom Import Builder form with your own fields, validation and row limits.
Get started