- shopify
- google-sheets
- inventory
Shopify Inventory Report in Google Sheets

Quick answer
To keep a Shopify inventory report in Google Sheets, sync your product catalog into a sheet with ShopSheets instead of re-importing CSV exports, then build low-stock views on a separate tab. For SKU-level stock counts, export Shopify's inventory CSV and compare it with your physical count in an inventory reconciler.
Shopify tells you how many units you have. It is less helpful when you want to see which products are running low this week, share stock levels with a supplier, or check the admin's numbers against what is actually on your shelves. Most merchants end up in a spreadsheet for this. The hard part is keeping that spreadsheet from going stale the day after you build it.
Two jobs often get mixed together here: a report you look at every day, and a periodic stock count you reconcile against Shopify. They need different data and different tools.
What goes in a Shopify inventory report?
A useful day-to-day report answers three questions: what do I have, what is running low, and what is out of stock. For that you need, per product:
- Title and status (active, draft, archived)
- Vendor and product type, so you can group by supplier or category
- Current inventory quantity
- Number of variants
- Last updated date
A stock count reconciliation needs something narrower: one row per SKU with a quantity, from Shopify on one side and from your warehouse count on the other. Keep the two separate. A product-level report is good for spotting trends. A SKU-level file is what you need when a count comes back wrong.
Option 1: Export inventory from Shopify as a CSV
For a one-time snapshot, Shopify's built-in export is enough:
- In your Shopify admin, go to Products → Inventory.
- Click Export and choose which items to include.
- In Google Sheets, open File → Import and upload the file.
The inventory export has one row per variant per location, with columns such as SKU, Location, Available, and On hand. That detail is useful for counts, but it makes the file a snapshot. Every sale, return, or restock after the export makes it wrong, and you repeat the whole process to catch up. If you share the sheet with a supplier or a warehouse manager, they are looking at old numbers without knowing it.
Option 2: Sync products into Sheets automatically
If you look at stock levels every day, re-exporting each morning adds up. A sync keeps the sheet connected to your store instead.
ShopSheets creates a Google Spreadsheet for your store with a Products tab. Each row is one product, with columns for Product ID, Title, Handle, Status, Type, Vendor, Created, Updated, Variants Count, Inventory, Min Price, Max Price, and Tags. The Inventory column is Shopify's total inventory for that product across its variants. New and edited products come in through Shopify's product webhooks. Stock changes from sales and restocks don't always count as a product edit, so refresh from the ShopSheets app before you rely on the Inventory column, and after changing a filter.
Headers sit in row 5 and data starts in row 6, so formulas can point at a fixed range.
How do I flag low stock in Google Sheets?
Put your own formulas on a separate tab that reads from the synced Products tab. That way the synced data stays clean and your views update whenever the data does. In the Products tab, Inventory is column J.
A low-stock list, with 5 units or fewer as the threshold:
=FILTER(Products!A6:M, Products!J6:J <= 5, Products!D6:D = "ACTIVE")
Change the 5 to whatever reorder point fits your store. Filtering on status keeps drafts and archived products out of the list. If your sheet shows status in a different case, match it exactly or wrap both sides in LOWER().
A count of out-of-stock active products:
=COUNTIFS(Products!J6:J, "<=0", Products!D6:D, "ACTIVE")
The <=0 matters. Products that allow overselling can go negative in Shopify, and a plain =0 check misses them.
Stock by vendor, which is handy before you place purchase orders:
=QUERY(Products!A6:M, "select F, sum(J) where F is not null group by F order by sum(J) asc", 0)
For a quick visual, select the Inventory column on the Products tab and add a conditional formatting rule (Format → Conditional formatting) that colors cells red when the value is less than or equal to your threshold.
How do I reconcile Shopify inventory against a physical count?
The synced report tells you what Shopify thinks you have. A stock count tells you what is actually there. When they disagree, you need a SKU-by-SKU comparison, and the product-level total in a synced sheet is too coarse for that.
Use the free Inventory Reconciler:
- Export inventory from Shopify (Products → Inventory → Export). This is your system file.
- Prepare your count as a CSV with the same column names, for example
SKUandAvailable. Using the same headers in both files gives the cleanest match. - Upload both files. The tool auto-detects the SKU and quantity columns from common header names like
SKU,Variant SKU,Available, andOn hand. Change the dropdowns if yours are named differently. - Click Reconcile and review the results.
The tool sorts every SKU into one of four groups:
- Matched: the quantities agree.
- Discrepancies: the SKU is in both files but the quantities differ. The difference is counted minus system, so a negative number is a shortage and a positive number is a surplus. The largest gaps are listed first.
- Missing: the SKU is in Shopify but not in your count. Often this means a shelf was skipped.
- Not in system: the SKU is in your count but not in Shopify. Check for typos or products that were never added.
It also shows the net variance in units, and you can download the findings as a CSV with SKU, Status, System Qty, Counted Qty, and Difference columns. Paste that into your sheet next to your inventory report and you have a record of each count.
Before you run it, check how the tool treats your files. It sums quantities per SKU within each file. Shopify's inventory export has one row per location, so a multi-location export gets totaled; if you counted only one warehouse, filter the export to that location first. Blank or non-numeric quantities count as 0, so a SKU with an empty cell shows up as zero on hand. Rows without a SKU are ignored, so give every variant a SKU if you want it included. Both files stay in your browser.
How often should I update the report?
That depends on how fast your stock moves. A store with a few dozen slow-moving products may be fine checking once a week. A store that sells out of popular variants within days needs fresh numbers several times a week. A sync you refresh from the app beats a new export each time.
Physical counts run on their own schedule, often monthly or quarterly, or whenever the numbers look off. Run the reconciler after each count and keep the downloaded reports, so you can see whether the same SKUs keep drifting.
Which approach should you pick?
- For a single snapshot for one meeting or one supplier email, export the CSV from Shopify and import it.
- If you check stock levels daily or share them with your team, sync your products into Sheets and build low-stock views on top.
- After a stock count, compare it with a Shopify export in the Inventory Reconciler.
Most stores end up doing the last two together. The synced report shows what is running low. The reconciler shows where Shopify's numbers and the shelf disagree.
If you are tired of re-importing inventory exports, try ShopSheets free and keep your Shopify products and stock totals in a Google Sheet you refresh from the app.