Year-end inventory count on Shopify: the record your accountant wants
How to run a 31 December stock count in Restock Ops so counted, expected and written quantities per location survive as a dated record you can hand over.
Every January the same email arrives from the accountant: what was your stock on hand at midnight on 31 December, by location, and can you show how you got that number? Shopify can tell you what the quantities are now. It cannot easily tell you what they were on a given night, or which of those quantities were counted and which were just whatever the system said. A year-end count is less about finding discrepancies than about producing a record that still makes sense in March.
This post is about running that count in Restock Ops with the record in mind: what the app stores for a stocktake, what Shopify stores when the count is applied, what disappears if you are careless, and how to lay out the work for a store with two or three locations so each one gets its own dated document. It assumes you know the basics of a stocktake in the app; the on hand versus available post covers which Shopify quantity is being counted and why.
What a stocktake keeps
A stocktake in Restock Ops is a record with a name, a location, an optional note, a status and a list of lines. Each line holds the product, variant, SKU and barcode as they were when the line was added, the expected quantity (Shopify's on hand at that location when the line was first counted), the counted quantity you entered, and, after you apply, the delta that was actually written to Shopify. The record also carries when it was created, when it was applied and, if it comes to that, when it was undone.
That is the whole document the accountant is asking for. Expected is what the system believed; counted is what a person saw on the shelf; applied delta is the correction that went into Shopify. The three columns together answer both of the January questions: the stock at the count, and how you got there.
The status matters for the record. An open stocktake is a work in progress and its expected values can be refreshed. An applied stocktake is frozen: nothing on it changes afterwards, and the app keeps it in the list with the date it was applied. A canceled stocktake was abandoned without writing anything. An undone stocktake was applied and then reversed, and keeps both timestamps.
What Shopify keeps
When you apply, the app sends one inventory adjustment per changed line to Shopify's inventoryAdjustQuantities mutation, on the available quantity, with the reason cycle_count_available. Shopify records each adjustment in the variant's inventory history at the location, with the reason, the change and the time, and attributes it to the app. That history is Shopify's own ledger and is what an auditor would look at independently of any app.
Restock Ops also writes its own log entry for every Shopify write, including the ones that fail, which is how the stocktake knows which deltas actually landed. If a write fails part way, the lines that were written show their applied delta and the rest do not, and the error is on the record rather than silently lost.
Two things Shopify does not keep: the counted figure itself, and the expected figure at count time. Shopify sees only the delta. If you adjusted twelve units of a variant, Shopify's history says plus twelve with the reason cycle count; it does not say the shelf had 40 and the system said 28. That pairing exists only in the stocktake record, which is the reason not to delete it.
Laying out a year-end count
- Create one stocktake per location. The app proposes a name in the form Location count 2026-12-31; keep that format, because when you sort the list later the location and date are what you will search by. Put the counter's name and the time the count started in the note.
- Decide what goes on the list before anyone starts counting. For a full year-end count that is every tracked variant at the location; for a sampled count it is the categories your accountant agreed to. A variant that is on the list but not counted keeps a counted value of zero, and applying it sets that variant to zero in Shopify, which is exactly right if the shelf really is empty and exactly wrong if nobody got to that aisle. The partial stocktake post covers the consequences; for year end, count everything on the list or remove the lines you did not reach.
- Freeze sales for the count window, or accept that expected may drift. The expected quantity is captured when a line is first added. If the store sells while you count, refresh expected before applying so the deltas are computed against the current on hand, and write in the note that you did so and when.
- Apply on the day, not in January. The applied timestamp is the record's date. A count performed on 31 December and applied on 4 January has a four-day gap in which Shopify's quantities moved for reasons that have nothing to do with the count, and reconciling that is far more work than finishing the apply on the night.
- Review the discrepancies screen before you press apply. It lists only the lines where counted differs from expected, with the delta and the direction. Large negatives on high-value items are where theft, breakage and mis-shelving show up; large positives usually mean a receipt was never recorded. Note anything you investigate in the stocktake note so the explanation sits with the numbers.
The numbers to hand over
Once applied, the stocktake page shows every line with expected, counted and applied delta. For the accountant, the useful summary is three totals per location: units counted, units over (sum of positive deltas) and units short (sum of negative deltas), plus the list of lines with the largest absolute deltas. Value is not in the app, because Restock Ops does not hold a cost per unit on the stocktake line; multiply counted quantity by your unit cost in a spreadsheet, or pull Shopify's inventory value report for the same date, which uses the cost per item on the variant.
The app does not export a stocktake to CSV today. For a year-end record, open the applied stocktake and print the page to PDF, or copy the table into a sheet. Do it while the stocktake is fresh: the list in the app shows the hundred most recent stocktakes, which is plenty for most stores, but a store that counts weekly across several locations will push last year's count out of the list within the year.
Corrections after the fact
Someone will find a box in the back on 2 January. Do not undo the stocktake to fix it. Undo reverses every applied delta on the stocktake with a correction adjustment that points at the original write, which is the right tool if the whole count was wrong (counted at the wrong location, say), and the wrong tool for one box, because it erases the entire year-end correction and marks the record undone.
For one box, make a separate adjustment in Shopify with its own reason, or a small new stocktake named for what it is. The year-end record stays applied and intact, Shopify's history shows a second adjustment with its own date, and the accountant can see both. An applied stocktake that is later followed by a small correction is a clean story; an undone stocktake is a question.
A short checklist
- One stocktake per location, named Location count 2026-12-31, counter and start time in the note.
- Every tracked variant at the location on the list, or the uncounted lines removed before applying.
- Expected refreshed if sales ran during the count, with the time noted.
- Discrepancies reviewed and the explanations written into the note.
- Applied on the night; the applied timestamp is the record date.
- Page saved to PDF or copied to a sheet the same week; unit costs applied in the sheet.
- Later finds handled as separate adjustments, not by undoing the count.
FAQ
Does Shopify keep the counted quantity from a stocktake?
No. Shopify's inventory history records the adjustment the app made: the change in available quantity, the reason cycle count, the time and the app that made it. The counted figure and the expected figure at count time exist only in the Restock Ops stocktake record, which is why the applied stocktake should be kept and exported rather than deleted.
Can I run the year-end count at several locations at once?
Yes. Each stocktake belongs to one location, so create one per location and have them counted in parallel. Each is applied separately and gets its own applied timestamp, which also means one location can finish on the night while another finishes the next morning without mixing the records.
What date does the stocktake carry as the record date?
The record shows when it was created, when it was applied and, if relevant, when it was undone. For accounting purposes the applied timestamp is the one that matters, because that is when Shopify's quantities were set to the counted figures. Apply on the count date rather than later to keep the two aligned.
How do I value the count for the accounts?
Restock Ops records quantities, not values. Multiply each line's counted quantity by your unit cost in a spreadsheet, or use Shopify's inventory value report for the same date, which relies on the cost per item set on each variant. Keep the stocktake export alongside the valuation so the quantities can be traced back to a count.
A box turned up after I applied. Should I undo the stocktake?
Not for one box. Undo reverses every delta on the stocktake and marks the whole record undone. Make a separate adjustment in Shopify with its own reason, or a small new stocktake for the items found, so the year-end record stays applied and the later correction is visible as its own entry.
Try it on your store. Restock Ops adds purchase orders with partial receiving, supplier notes, cost history, barcode labels, scanner stocktakes and a reorder report on top of Shopify inventory. From $19/month, 14-day free trial.