A shop that sells at the counter with Square and online with WooCommerce has one shelf and two systems counting it. Unless the two counts are linked, they drift apart within days, and the website starts selling items that are no longer there. This guide covers the ways to keep Square inventory and WooCommerce stock in step, from a one-off import to real-time two-way sync.
Why stock drifts
Take a candle shop with 44 Cedar Candles on the shelf. Both Square and WooCommerce say 44.
- Three candles sell at the counter. Square says 41. WooCommerce still says 44.
- Two sell online. WooCommerce says 42. Square still says 41.
- A delivery of 12 arrives and is booked in Square. Square says 53. WooCommerce says 42.
Every channel only sees its own changes. Without sync, someone has to copy the numbers across by hand, or the website sells the last candle twice. The usual workaround, keeping online stock lower "just in case", loses sales instead.
What good inventory sync looks like
Whatever tool is used, these are the properties that matter:
- Changes, not totals. Sending "minus 3" is safe; sending "set to 41" can overwrite a sale that happened a second earlier on the other side.
- Both directions. Sales, refunds, deliveries and recounts can happen on either side.
- Speed. A sync that runs every hour leaves an hour in which the same item can sell twice.
- No echo. A change applied by the sync must not be sent back as a new change.
- A safety net. A periodic comparison of both sides that catches anything missed, for example while a site was down.
- A clear record. A log that shows where each change came from, so a wrong number can be explained.
Importing Square products into WooCommerce
If the catalog lives in Square and the WooCommerce store is new, the products need to exist in WooCommerce before stock can be synced. Two ways to get them there:
- WooCommerce Square extension. Its Import all Products from Square action creates a WooCommerce product for each Square product. Square products need unique SKUs to be imported.
- CSV. Export the item library from the Square Dashboard as a spreadsheet, map the columns to the WooCommerce product CSV format, and import it under Products → Import in WordPress. This gives full control over which fields are brought across.
Either way, check SKUs after the import. The SKU is what links a WooCommerce product to its Square item from then on.
Manual and CSV stock updates
For a handful of products that rarely sell in both channels, updating stock by hand at the end of the day works. A spreadsheet export from Square and a bulk edit in WooCommerce can speed it up. The limits are obvious: it depends on someone remembering, and between updates the counts are wrong.
One-way sync: a system of record
The official WooCommerce Square extension uses a "system of record". Either WooCommerce pushes product updates to Square, or Square's updates are pulled into WooCommerce, with stock checked on a sync interval when Sync inventory between WooCommerce and Square is on.
This works well when nearly all stock changes happen in one place. It gets harder when both sides change stock all day: according to WooCommerce's own documentation, automatic inventory checks can replace a quantity entered manually in WooCommerce. To protect a WooCommerce quantity, inventory sync has to be turned off or the product excluded from sync.
Two-way sync with StockEven
StockEven treats both sides as equal and moves stock changes, not totals:
- Square to WooCommerce: Square notifies StockEven within seconds of a change; StockEven reads the change with its reason (sale, refund, delivery, recount) and applies it to the store.
- WooCommerce to Square: the plugin records each stock change after it happens and sends it in the background, never during checkout.
- Each change is applied once. Changes made by StockEven are not sent back, and each carries a unique key, so a retry can't apply it twice.
- Hourly comparison. Both sides are compared every hour and any difference is corrected from the side chosen for that product.
- Outages. If Square or the store is unreachable, changes wait in a queue and are delivered when it's back.
Product names, prices and images are never changed, so the catalog can be managed separately in each system.
Setup checklist
- SKUs: every product and variation has a SKU, identical in Square and WooCommerce, and no SKU is used twice.
- Stock tracking on: Manage stock ticked in WooCommerce, on each variation for variable products; stock tracking on in Square for each item variation.
- One online location: pick the Square location whose stock is sold online.
- One sync tool for stock: if the official extension is installed for payments, turn off its inventory sync so stock is not changed twice.
- Correct counts: for products where Square and WooCommerce disagree at the start, choose the side with the true count. When the shop counts regularly in Square, Square is usually right.
Test before going live
A five-minute test with one product catches most setup mistakes:
- Pick a product with a few units in stock.
- Sell one unit at the Square POS. The WooCommerce stock should drop by one.
- Place a test order on the website. The Square count should drop by one.
- Refund one of the sales. The stock should go back up on both sides.
- Check the activity log to see each change and where it came from.
If a number doesn't move, the troubleshooting guide lists the usual causes.
Sales, refunds, deliveries and recounts in seconds. Free up to 50 products.