Rebuilding Cost History After Stocky: From POs, Invoices and Bank Records
By: Endless Commerce
Rebuilding Cost History After Stocky: From POs, Invoices and Bank Records
Cost history is the loss that does not announce itself. Inventory counts get corrected within a week because someone notices. A missing cost record surfaces six months later, when you try to work out whether a product line is actually making money and find you cannot.
It is also the item Shopify is least able to help with. Shopify knows what you sold and for how much. It does not know what you paid a supplier eighteen months ago, and each variant carries a single static cost per item that does not move when you receive stock. Weighted-average costing and landed cost allocation need a third-party app, which Shopify says openly.
So this is a reconstruction job. Here is how to do it without spending a month on it.
Decide how good it needs to be first
The most common mistake is rebuilding to a precision nobody needs. Three honest tiers:
Good enough for reordering. A current cost per SKU, roughly right. This is most of the value and takes a day. If all you need is to know which SKUs deserve budget, stop here.
Good enough for margin analysis. Current cost plus how it moved over the last twelve to twenty-four months, so you can see which lines got quietly worse. This is the tier most brands actually need and where the effort is worth it.
Good enough for an audit. Every receipt reconciled to an invoice with landed cost allocated. Only worth it if someone external will ask, and if so, you want an accountant rather than an article.
Pick the tier before you start, because the sources you need differ and tier three costs weeks.
Source one: the purchase order export
If you pulled purchase orders out of Stocky, this is your spine and the job is mostly assembly.
Shopify’s Stocky Purchase Orders report carries the quantity originally ordered per line and the outstanding amount across open orders, alongside delivery and payment status. The SKU/Variant report carries cost per unit and selling price per variant. Between them you have unit cost by SKU by order date, which is exactly the shape a cost history wants.
If you did not export before the shutdown, check before you assume it is gone. Shopify’s migration guide commits to read-only export access for at least 90 days after August 31, and a lot of the pre-deadline advice wrongly said otherwise. That window is the difference between assembly and archaeology — the full recovery sequence is in what you can still get back.
Sort by SKU and date, and you have a cost curve per product with no further work.
Source two: supplier invoices
Where the PO export is thin or missing, invoices are the authoritative record, and they are the only place landed cost lives.
The practical approach is to work backwards by spend rather than chronologically. Pull your top twenty suppliers by annual spend and reconstruct those completely; they will cover the large majority of inventory value. Let the tail stay approximate.
Invoices also carry what the PO export does not: freight, duty and any adjustments. If you are rebuilding to tier two or three, this is where landed cost comes from, and it is why an invoice-based rebuild is meaningfully better than a PO-based one.
A note on rounding, since it bites here. Stocky rounded at the line-item level to two decimal places and then summed, which produces small variances against accounting systems that round after summing. If your rebuilt totals disagree with your books by trivial amounts, this is usually why, and it is not worth chasing.
Source three: bank and accounting records
The fallback when invoices are missing. Payments to suppliers give you totals but not units, so they only produce a cost per unit if you can pair a payment with a known quantity.
This is worth doing for high-value SKUs and not worth doing broadly. If your accounting system carries supplier bills with line detail, that is a far better source than the bank feed — Stocksmith, QuickBooks and Xero users often find purchase orders were exported as bills, which means line-level cost may already be sitting in the accounts.
Source four: your own team
Undervalued and free. The person who does the buying usually remembers which suppliers raised prices and roughly when, even without documentation. That is enough to sanity-check a reconstructed curve and to catch the cases where a rebuild produced a flat line that should have a step in it.
Assembling it
Build one table, one row per SKU per cost change, with SKU, effective date, unit cost, source, and a confidence flag. The confidence flag is the part people skip and later wish they had not — it is what stops an approximate number being quoted as fact in a board deck a year from now.
Then reconcile against what Shopify holds. Cost prices synced between Shopify and Stocky in both directions, so the two are often but not always the same number. Where they disagree, the PO export usually wins, because it reflects what was actually invoiced rather than what someone last typed into a product record.
Load the current cost into Shopify’s cost per item field and keep the history in your own table. Admin has nowhere to put a cost curve.
What you will not recover, and what to do instead
Be straight about the limits.
Landed cost you never recorded is not reconstructable beyond an estimate. If freight and duty were never allocated per SKU, you can apportion them by weight or value across a period and label the result as an estimate. That is legitimate; presenting it as measured is not.
Supplier terms and MOQs were never in the export. Suppliers could not be exported from Stocky at all, so those come from your email and your suppliers directly. They matter for reordering more than for costing, and the rebuild is covered in reordering without Stocky.
Cost at the moment of each individual sale is gone unless you were already doing weighted-average costing. Reconstructing per-order COGS retrospectively from a cost curve is an approximation. For margin trends it is fine; for restating accounts it is not.
Keeping it from happening again
The reason this hurt is that cost history lived in one app, in a format only that app could read, with no export path for the parts that mattered most. Whatever you move to, two questions are worth asking before you key anything in.
Does it hold cost as a history or as a single current number? Shopify Admin holds one static cost per variant that does not move when you receive stock, which means the platform itself will not accumulate the history you are rebuilding right now.
And can you get it out? Not in theory — check that the export exists and includes suppliers, because that is precisely the gap that made this job necessary.
Endless Commerce holds cost, inventory, orders and supplier detail as one source of truth rather than as an app’s private store, across DTC, wholesale, retail and marketplace. If you are rebuilding a cost history from scratch anyway, that work is portable, and it is worth deciding where it should live before you enter it twice. The options, including the case for staying on Shopify native, are in the best Stocky alternatives, and the direct comparison is on Endless Commerce vs Stocky.
Claims about Stocky’s exports, Stocky’s rounding behaviour, and Shopify Admin’s cost handling are drawn from Shopify’s documentation at help.shopify.com/en/manual/products/inventory/transitioning-from-stocky and its related Stocky pages.
Commerce is chaos.
Tame your tech stack with one system that brings it all together—and actually works.
Get a DemoInsights to master the chaos of commerce
Stay ahead with expert tips, industry trends, and actionable insights delivered straight to your inbox. Subscribe to the Endless Commerce newsletter today.