Every store I have managed has had some version of the same phone call. A customer orders something the site says is in stock, the warehouse goes to pick it, and the shelf is empty. Now someone has to email the customer, refund or backorder, and hope they come back. Inventory sync is the unglamorous work that keeps that call from happening.
At Universal Wholesale I ran two stores at once, one on WooCommerce and one on Shopify, with a catalog of more than 14,000 SKUs. At Wild Bill’s Tobacco I managed catalog, inventory and pricing on a wholesale B2B site. Neither setup had a fancy real time integration for everything. What worked was a clear process, a few rules, and checking the numbers every day.
Why does my store show items in stock that are sold out?
In my experience it comes down to a handful of causes:
- The store and the warehouse do not agree on which product is which, because the SKUs do not match exactly.
- Stock updates run on a schedule, and the gap between updates is long enough for a popular item to sell out in the warehouse while the site keeps selling it.
- Orders from another channel, like phone orders, walk-in wholesale customers or a second website, pull from the same shelf but never reach the first store.
- Someone adjusts stock by hand in one place and not the other.
- Damaged, returned or reserved items are still counted as available.
None of these are fixed by buying software alone. Software moves numbers faster. If the numbers or the matching are wrong, it moves wrong numbers faster.
Pick one source of truth
The first decision is which system owns the stock count. For most of the stores I worked on, that was the warehouse or inventory system, not the website. The site’s job is to display what the warehouse says and report back what it sold. It should not be the place where anyone adjusts physical stock.
Once that is agreed, I write it down and tell everyone who touches inventory. If the warehouse finds three damaged units, they adjust it in their system and the change flows to the site. Nobody logs into WooCommerce to fix it there. This sounds like a people problem more than a technical one, and it is.
Make the SKUs match exactly
The sync is only as good as the key it matches on. Before I trust any automated update, I export both lists to Excel and compare them. I look for:
- SKUs on the site that do not exist in the warehouse file.
- Warehouse SKUs with no product on the site.
- Near matches caused by extra spaces, leading zeros dropped by Excel, or different capitalization.
- Variants where the parent has a SKU but individual sizes or colors do not.
Leading zeros are the one that catches people most. Open a CSV in Excel without setting the column to text, and a SKU like 00451 quietly becomes 451. Then nothing matches and the sync updates zero products without throwing an error. I always import SKU columns as text.
Set a sync rhythm that fits how fast things sell
Not every store needs instant updates. A store selling slow moving items can be fine with an inventory file imported a few times a day. A store with fast sellers and promos needs updates much more often, or a direct integration between the warehouse system and the platform.
On the stores I ran, I matched the rhythm to the busiest periods. Seasonal promos and coupon campaigns were when overselling showed up, because demand spiked and the gap between updates mattered more. Before a promo launched, I made sure the import schedule was tighter and the promo products had been counted recently.
How do I prevent overselling online?
Beyond the sync itself, a few settings do most of the work:
- Safety buffer. For fast sellers, show slightly less than the warehouse has. If the count is low, the site marks it out of stock a little early instead of a little late. Some sync tools have this built in; otherwise I subtract it in the import spreadsheet.
- Hold stock at checkout, not at cart. WooCommerce and Shopify both reduce stock when an order is placed. I leave that on and make sure the reduction is reported back to the warehouse side.
- Turn off backorders unless you mean them. I have found products set to allow backorders by accident after a bulk import. A quick filter in the product export catches it.
- Count every channel. If phone or in person orders pull from the same stock, they need to be entered somewhere the sync can see them.
Check the numbers every day
The step that saved me the most trouble was a simple daily comparison. Export current stock from the site, export the warehouse count, and compare them on SKU in a spreadsheet. Any line where the difference is more than a small amount gets looked at that day.
Most days the list is short. On the days it is not, it tells you something broke: an import failed, a new product was added without a SKU, or someone made a manual change. Catching it the same day is the difference between fixing a number and apologizing to customers.
If your store is overselling right now, start here: decide which system owns the count, export both SKU lists and match them in Excel with the SKU column set as text, and add a buffer to your top sellers. Then build the daily comparison. It takes a few minutes once it is set up, and it is the check that tells you the sync is still working.