A free WordPress plugin that keeps your Batchly register and your WooCommerce store on one count. Stock and prices change in Batchly and show up on your site within a minute. Online orders take stock down by exactly what sold and land in your Orders queue; delivery orders go onto tonight's route.
One zip. Upload it in WordPress under Plugins, Add New, Upload Plugin, then activate it and open WooCommerce, Batchly.
The plugin is free. It needs a Batchly account: $99 a month per store, with a 21-day free trial and no card to start.
Check it before you upload: shasum -a 256 batchly-woo-0.3.0.zip. The plugin talks only to the Batchly API over https, to a pinned host, with a per-store key.
Rehearse with a test key first if you like: tickets land in Batchly's Test view, stock is never changed, and real-time stays off until you reconnect with a live key.
Open Developers, create a key with the scopes read, inventory:write, orders:write and sync:manage. Copy it once. Give sync:manage only to this key.
WordPress admin, Plugins, Add New, Upload Plugin. Choose the zip, install, activate. A Batchly item appears under WooCommerce.
Paste your API key under Connection, press Save settings, then Test connection. It should say Connected to Batchly.
Press Connect real-time sync. Batchly binds your key to your site's receiver and issues a signing secret. Pick the shipping methods that mean delivery and your delivery-date meta key, then save.
Press Reconcile now. Every SKU is compared by quantity and regular price. Fix differences with Apply Batchly to WooCommerce (the usual choice), then reconcile again until it is clean.
Press Turn on real-time sync. The switch opens only with a live key, a connection, and a clean reconcile less than 24 hours old. From here on, changes flow on their own.
Your register, your inventory edits, your CSV imports and your online carts all move one number. The plugin keeps WooCommerce reading that number and sends back only what the website sold. Sell the last unit at the counter and it comes off your site; sell it on the site and it comes off the shelf.
# POST https://your-site/wp-json/batchly/v1/events # X-Batchly-Signature: sha256=HMAC(body, your secret) { "event": "inventory.changed", "sentAt": "2026-09-03T14:02:11Z", "data": { "sku": "CB-04", "quantity": 14, "previousQuantity": 16, "delta": -2, "origin": "batchly" # never echoed back to Woo } }
A paid WooCommerce order shows up in Batchly Orders with the WooCommerce pill, marked paid on the website, so nobody at the counter or at the door asks for money twice. Delivery orders land on the same nightly route as your store-page, text and phone orders.
Text, phone, your hosted store page and your WooCommerce site in one list, pickup and delivery. Customer name, phone, items and the note the customer typed at checkout.
Pick the shipping methods that mean delivery. Those orders carry the address and land on the route, ready to assign. Local pickup methods are always pickup. See local delivery →
If you use a delivery-date plugin, enter its order meta key. The date and window ride onto the ticket and the route. No date means today's route, with a note.
The ticket says so, the driver sheet says so, and the tracking page says Paid. Payments stay in your WooCommerce gateway.
A shipping charge, an unmatched SKU, a missing address, or a ZIP outside your delivery zone is written on the ticket in capitals. The order always lands: the customer already paid.
Cancel or refund an order in WooCommerce and the Batchly ticket flips with a Canceled in WooCommerce pill. Stock goes back only for what was taken.
Nothing on your WordPress site can spend money, read a card, or reach another store. The plugin holds one scoped key and one signing secret, and both can be rotated from either side.
Every push is signed over the raw body with a per-store secret, checked for freshness (15 minutes) and replay (delivery id). A bad signature is answered 401 with no detail.
The key can read the catalog, adjust stock and prices, mirror orders and manage this one connection. Nothing else. Revoke it in Batchly and inbound writes stop at once.
Cards are handled by your WooCommerce gateway. Batchly only ever sees an order id and an amount. The plugin never holds a gateway key.
Revenue for a web order is booked from Batchly's own prices, never from a number the website sent. A client cannot post a forged amount into your books.
Pushes reach your site over public https only. The plugin's API base URL is pinned to an exact list of Batchly hosts and cannot be repointed, even by editing the database.
Reconnect issues a fresh signing secret and retires the old one. A new API key from Batchly, pasted in and reconnected, does the same for inbound.
Yes. Stock and price changes in Batchly reach your WooCommerce store within about a minute, and a paid WooCommerce order takes Batchly stock down at once and lands in your Orders queue. Batchly is the count of record.
Yes, when each variation carries its own SKU that matches Batchly. Variations without a SKU are skipped by Reconcile now and never move stock.
Yes. A bly_test_ key connects, reconciles and mirrors orders into Batchly's Test view. It never changes live stock and never turns real-time on. Swap in your live key and press Reconnect when you are ready.
Not by default. Batchly is the count of record, so edit stock there. If you need WordPress edits to move Batchly, turn on Push manual stock edits made in WordPress to Batchly under Real-time sync.
Batchly retries each push five times over about five hours, then parks it. Once a few pushes have parked in a day, Batchly raises an alert in your System health. Orders placed while Batchly was unreachable wait in the plugin's outbox. When the site is back, press Reconcile now to catch up.
It updates the regular price only. The WooCommerce sale price is left alone.
Its order lines are booked on the ticket at no value, move no stock, and are listed in an order note. Products are never created in Batchly from WooCommerce. Add the SKU in Batchly, then reconcile.
No. Your WooCommerce gateway keeps taking payments and the plugin never sees a card. If you would like Batchly to run your card processing at the counter as well, see pricing.
Yes, once local delivery is on in your Online tab. Orders on the shipping methods you marked as delivery arrive marked paid (a cash-on-delivery order stays unpaid so the driver collects), with the customer's chosen date, and appear on that night's route in Orders with the WooCommerce pill. Your driver sees Paid, and every ticket carries a tracking link you can copy and send to the customer. See local delivery.
Allow the path /wp-json/batchly/ from the public internet. Pushes arrive there, signed. Everything else the plugin does is outbound from your server to Batchly over https.
Download the plugin, create a key in Developers, and reconcile once. Need a hand? Our team wires it up for you during free setup.