Skip to content
MousaBatarseh
Back to all notes

· By Mousa Batarseh

Inventory Sync Between Your Online Store and Warehouse: How I Stop Overselling

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:

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:

  1. SKUs on the site that do not exist in the warehouse file.
  2. Warehouse SKUs with no product on the site.
  3. Near matches caused by extra spaces, leading zeros dropped by Excel, or different capitalization.
  4. 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:

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.

Have a related task to discuss?

Email Mousa