If you're running a setup where Google Sheets is your inventory master and you sync it to Shopify, you'll eventually hit this question: "There's an SKU registered in Shopify but missing from the sheet — how should I handle it?"
Most sync apps have a setting in their configuration that says something like "set rows not in the sheet to zero inventory on Shopify." It's a handy feature, but get it wrong and products you thought were discontinued can have their inventory suddenly resurrected — or worse, SKUs that merely went missing from the sheet end up pulled from sale. In this article we'll lay out a framework for deciding how to handle these missing rows.
What "a row missing from the sheet" actually means
Let's start by sorting out what "a row missing from the sheet" actually means. What's listed in the sheet is the set of SKUs considered subject to inventory management at a given moment. Shopify, on the other hand, retains every SKU you've ever registered. Compare the two and you'll always find some SKUs that exist in Shopify but aren't in the sheet.
This gap will keep appearing for as long as you run the store. Product turnover, rebranding, discontinued items, seasonal cleanup — the sheet's SKU list shifts for any number of reasons. Meanwhile, the product data on Shopify keeps hanging onto products you sold in the past, so the gap between the two widens over time.
The scenarios to consider
Even though it looks like the same state — "not in the sheet" — completely different scenarios can be hiding behind it. Let's look at the two main cases.
The discontinued case
The first is when you've decided not to carry the product anymore. The supplier stopped production, the stock sold out and you're not reordering, you swapped out an entire series — the reasons vary, but the bottom line is the same: you've decided not to sell it anymore.
In this case, a row missing from the sheet means an intentional deletion. The correct behavior is to set inventory to zero on Shopify so customers can no longer buy it. In many cases you actually want to keep the product page itself (for SEO or archival reasons), so the practice of going with "inventory zero" rather than full deletion actually makes a lot of sense.
The accidental-omission case
The second case is when the missing row is an accident. Someone deleted a row by mistake, someone copied to another sheet with a filter applied, an Apps Script bug dropped some rows — the cause varies, but the situation is the same: you actually want to sell the product, but it's vanished from the sheet.
If you have "set missing rows to zero" enabled in this case, tragedy strikes. The popular products you genuinely want to sell all go to zero because of a temporary sheet glitch, and sales come to a halt. By the time you notice, lost revenue has piled up.
How to choose the setting
So how should you configure it? There's no one-size-fits-all answer, but depending on the size of your store and how mature your operations are, there are three approaches.
- 011. Don't touch missing rows (conservative): safe, but discontinued products keep their inventory
- 022. Zero out missing rows (aggressive): clean, but a sheet slip-up instantly halts sales
- 033. Just emit a warning for missing rows (middle ground): a report runs before sync, and a human decides
Our recommendation: stay on option 1 (don't touch) while operations are still stabilizing, move to option 3 (warning) once things are stable, and graduate to option 2 (auto-zero) only when your sheet governance is rock solid. Jumping straight to option 2 means a small mistake in sheet ops becomes a big incident.
On the Shopify admin side, you can also change a product's status to "Draft" or "Archived." Instead of just zeroing the inventory of discontinued products, moving them to "Archived" removes them from product listings and keeps things tidy. Combining the sync app's "zero out missing rows" with Shopify's "Archive" lets you draw a much clearer line.
Operating rules that prevent accidents
Whichever approach you choose, having rules in place to prevent accidents is a good idea. Here are a few worth considering.
- Add an "active" flag column to the sheet and discontinue via the flag instead of deleting rows
- When you do delete rows, always keep a "discontinued log" on a separate sheet
- Check the row count before each sync and warn if it has dropped by more than a set percentage
- After any sheet update, run the first sync as a dry run (a preview of the changes)
- Run a monthly audit of "present in Shopify but missing from the sheet"
The first one — an active flag column — is particularly worth recommending. Instead of deleting rows from the sheet, add an "ACTIVE" column next to column A and simply set discontinued products to `FALSE`. The sync side targets only rows where `ACTIVE=TRUE`, so the row stays in the sheet while Shopify inventory goes to zero. It's also handy later when you want to look back at "when did we actually discontinue that product?"
Handling missing rows is one of those sync settings where the initial decision shapes future operations more than most. Don't rush it. Match it to your store's operational maturity and graduate to stricter settings over time — that approach leads to a sync setup you can live with for the long haul.
Connecting a sheet to Shopify is convenient, but convenience always comes with the risk of unintended results. That's why understanding the meaning of these small settings is ultimately what protects your store.