Multi-location stock, purchase orders at landed cost, and a profit report built on what the goods really cost you.
A one-time purchase — no subscription. Every feature, yours to keep, with free updates for the whole major version. 15-day money-back guarantee.
WooCommerce Analytics will tell you that you sold forty thousand dollars of goods last month. It has no idea what those goods cost, so it cannot tell you whether you made eleven thousand or lost two. WooCommerce does not store a cost price at all.
Most stores fill the gap with a spreadsheet, updated when someone remembers, using an average cost that was true in March. That spreadsheet is where stock-heavy businesses quietly lose money: on the product whose supplier price rose eight percent, on the line discounted below cost since the last sale.
StockPilot adds the missing half. It records what you paid, what arrived, what left, and what it was worth when it left. Everything else here is a consequence of that.
Every time stock comes in, StockPilot writes a cost layer: a quantity, a unit cost, a location and a date. Buy 200 units at $4.10 and you have one layer. Buy 300 more at $4.55 next month and you have two.
When you sell, the layers are consumed. Under FIFO the oldest goes first, so the first 200 units sold cost $4.10 each and the next ones $4.55. Under weighted average every remaining layer is drawn down proportionally and the sale is costed at the blended rate. You choose in settings; FIFO is the default, being what most accountants expect and what most stock actually does.
A single average cost lies in both directions, most severely on the fast-moving lines where the price moved. A layered pool gets it right per unit, which is the only level at which it is worth getting right.
Where stock sits on the shelf with no layer behind it, which is normal on day one, StockPilot falls back to the product’s cost price, then to the primary supplier’s price, rather than costing the sale at zero and reporting a hundred percent margin.
A pallet does not cost what the invoice says. It costs the invoice, plus freight, duty and customs handling, divided across what was on it.
When you receive a purchase order, StockPilot apportions the shipping, tax and other costs on that order across the lines by their value and writes the resulting landed unit cost into the cost layer. Where the order was raised in a supplier’s currency, the exchange rate is applied at the same moment. A product bought at $4.00 with $0.62 of freight behind it enters stock at $4.62, and every margin figure downstream uses that number.
If half the delivery arrives on Tuesday and half in three weeks, each receipt takes its share of the freight rather than the first one carrying all of it.
A purchase order has a reference, a supplier, a destination, an expected date, a currency and an exchange rate, and a status that moves from draft to sent to partial to received. Print it or email it to the supplier as a document. Its quantities are added to the destination’s incoming figure, so the reorder engine knows the stock is on its way and does not suggest buying it twice.
Receiving is per line and per quantity. Receive nine of the twelve you ordered and the order goes partial, three stay outstanding, nine enter stock at landed cost, and incoming drops by nine. Try to receive more than was ordered and it refuses, naming what is genuinely outstanding. The supplier’s price is remembered against the product as you go, so the cost catalogue stays current without anyone maintaining it.
Sales velocity comes from the movement ledger rather than WooCommerce order reports, over a window you set, sixty days by default. Using the ledger means refunds, write-offs and manual corrections are all in the number, because they all happened to the stock.
The horizon is the supplier’s lead time plus your safety buffer, fourteen days by default. Seven days is assumed where no lead time is recorded.
A product appears on the list when it is below a reorder point you have set, or when its days of cover, stock on hand divided by daily velocity, is shorter than that horizon. A product that never sells and has no reorder point is not a suggestion, even at zero on hand, because buying more of it is not the answer.
The suggested quantity is the target for the horizon, velocity multiplied by horizon and rounded up, less what is on hand and less what is incoming. A reorder quantity you have set acts as a floor; a supplier minimum order quantity raises the suggestion to meet it.
Each line is graded: out of stock, critical (cover shorter than the lead time, so you will run out before a new order can arrive), low, or watch. The list sorts worst first, then thinnest cover, then largest spend, and filters by supplier so you can raise one purchase order per supplier in a single pass.
Locations are places you keep stock: a warehouse, a shop floor, a fulfilment unit, a spare room. Each holds its own on hand, reserved and incoming figures per product, plus its own reorder point, reorder quantity and bin reference.
Underneath them sits one ledger. A sale, a refund, a purchase receipt, a transfer, a stock take adjustment, an assembly, a write-off: each writes a row with the change, the balance after it, the reference, the unit cost where one applies, the note and the user. Nothing changes a stock figure without leaving a row, so “why does this say eleven when I count nine” has an answer that is a query away rather than an argument.
Orders allocate stock across locations in priority order, or always from a default location if that suits you better. Totals are pushed back to WooCommerce so the storefront shows the right number.
A stock take snapshots what the system believes and what each product cost at that moment, gives you a count sheet by location, and holds the counts until you apply them. Applying writes every variance to the ledger with its value impact attached, so shrinkage appears as a number in the profit report rather than as unexplained drift. Counts export to CSV for someone with a clipboard.
ATUM’s core plugin is free and genuinely good at stock. Almost everything on this page, multi-inventory, purchase orders, product levels, barcodes, is a separate premium add-on on its own annually renewed licence, and the bill is the sum of however many you need. StockPilot is the whole set at once, once.
Katana and Cin7 are cloud platforms, and more capable than this plugin, as they should be: they are ERPs. They are also subscriptions that scale, by plan tier, by user seat, by order volume, so the better your year, the larger the invoice. Both need a connector to talk to WooCommerce: one more thing to sync, one more thing to break, one more conversation about why the numbers disagree.
If you run multi-stage manufacturing across contract factories, buy the ERP. If you are a WooCommerce store that buys goods, holds them somewhere and sells them, an ERP is a great deal of rented machinery for a job that belongs in your own database, next to the orders it is reporting on.
No accounting integration. StockPilot does not talk to Xero, QuickBooks or Sage, and does not post journals. It reports profit; it does not keep your books.
No manufacturing routing. Kits and assemblies with component draw-down and buildable quantities cover bundles and simple builds. There are no work orders, no routings, no operations, no shop-floor scheduling.
No shipping label buying, no carrier accounts, no rate shopping. A different plugin’s job.
No demand seasonality modelling. The reorder engine uses a straight average over your velocity window. It does not know that November is different, and will not pretend to. If your December is four times your July, shorten the window going into the season and read the list rather than trusting it.
No external requests of any kind. Nothing calls out to a server, ours or anyone’s, which is also why there is no automatic currency conversion: you set the exchange rate on the purchase order.
StockPilot and TradeDesk are built to sit on the same site. With both active, TradeDesk’s quote editor reads StockPilot’s cost data and shows a live margin against every line as the price is typed, so a rep can see exactly what a discount costs before agreeing to it, and a line that has gone below cost is flagged rather than discovered at the end of the quarter. Trade orders are costed through the same ledger as retail ones, so the profit report covers the whole business, and pricing rules can be applied to every product from a given StockPilot supplier in one action.
We use cookies to enhance your browsing experience, analyse site traffic and assist our marketing. You can accept all, reject non-essential, or choose what to allow. See our privacy policy for details.
Essential for the site to function. Cannot be switched off.
Anonymous and identifiable analytics about how visitors use the site.
Used to build profiles and show relevant advertising across sites.
Remembers choices you make to personalise your experience.