Finalize & reconcile a stock take
Finalizing a stock take is the moment your physical count becomes the truth: SKU.io compares each counted quantity to what the system expected, writes the difference to inventory as movements and FIFO layers, and closes the take. This guide covers the two finalize paths — the Finalize & Reconcile flow for a full count, and Finalize Adjustment for an adjustment-mode take — plus what happens when a counted reduction would strand stock that open orders and transfers are already relying on.
For how a take is built and counted before this step, see Create a stock take and Count stock. For the model behind it all, see How stock takes work.
Before you begin
| Requirement | Why it's needed |
|---|---|
Count inventory permission (inventory.count) | Every finalize, reconcile, and fulfillment-cancel action requires it. |
| The take is in the right state | A full count must be Open (initiated and counted) to finalize. An adjustment take must still be a Draft — it goes straight to Closed with no open state. |
| Every item has a counted quantity | A full-count finalize rejects the batch if any item is missing its count ("Each stock take item must have quantities."). Enter counts first — see Count stock. |
| Lot quantities reconcile | For lot-tracked items, captured lots must sum to the item's positive variance, or finalize returns a 422. |
A take's mode decides which finalize button you see. A full count shows Finalize & Reconcile while it's Open. An adjustment take shows Finalize Adjustment while it's a Draft. The reference examples below use a take at Main Warehouse.
Finalize & reconcile a full count
The reconciliation flow is the primary way to close a full count. It previews every variance, surfaces any shortfalls that clash with open orders or transfers, lets you resolve each one, and then finalizes — all in a single guided dialog.
- Open the take (it must be Open) and click Finalize & Reconcile. The Finalize & Reconcile Stock Take dialog opens on the Variance Summary step.
- Review the summary tiles: Total Items, Items with Variance, Negative Variances, and Est. Value Change. If a shortfall exists, a second row breaks it down into Items with Shortfall, With Fulfillments, Reserved Only, and Integrity Errors.
- Scan the variance table. Each row shows the product, the System Qty (the original snapshot struck through, followed by the snapshot adjusted for movements during the count), During Count, Counted, Variance, Avail, Rsv (Pend), Rsv (Sub), On Hand, and Shortfall. See what these columns mean.
- Click Next to move to Impact Review. If nothing has a shortfall, there's nothing to resolve here — skip to the last step.
- For each shortfall item, choose a resolution (see Resolve shortfall conflicts): Backorder, Adjust Count, or Remove from Stock Take. You can also apply one action to every item at once with Apply action. The Next button stays disabled until every conflict is resolved.
- Click Next to reach Confirm & Finalize, which lists exactly what will happen — which items are backordered, which fulfillments are cancelled, which are removed.
- Click Finalize Stock Take. Any fulfillments you chose to cancel are cancelled one by one (with a progress bar), the backorders are released, and the take is finalized and Closed in one transaction.
What you'll see: each item's variance is applied as an inventory movement, positive variances create FIFO layers and negative variances consume them, the take's Variance Direction is recorded, and every action is written to the reconciliation log. Open the movement ledger to see the resulting movements, and browse FIFO layers to see new or consumed cost layers.
Takes with more than 100 items use an optimized bulk path automatically. The one exception: if any item carries a hand-picked lot allocation for its negative variance, the take falls back to the per-item path so your chosen lots are honored instead of automatic FEFO selection.
What the reconciliation columns mean
The variance table reports each item against live inventory, not just the count. All quantities are for the take's warehouse.
| Column | Meaning |
|---|---|
| System Qty | The snapshot taken when counting was initiated (struck through) and the adjusted snapshot — the snapshot plus net movements that happened during the count. Variance is measured against the adjusted value. |
| During Count | Net receipts, sales, and transfers for the product between the snapshot and now. Hover to see each movement. |
| Counted | The physical quantity you entered. |
| Variance | Counted − adjusted snapshot. Positive means found stock; negative means missing stock. |
| Avail | Available stock right now — free to sell. |
| Rsv (Pend) | How much of the item's open order commitment is still pending (allocated to orders with no submitted fulfillment yet). |
| Rsv (Sub) | How much is tied to submitted fulfillments. |
| On Hand | Total on-hand across every state — Available plus Allocated plus On Hold plus Non-Sellable. See Stock states. |
| Shortfall | abs(Variance) − Available, only when negative. A shortfall means the write-down is larger than the free stock, so it would eat into committed inventory. |
For the full definitions of each stock state and how On Hand reconciles, see the Stock states & fields reference.
Resolve shortfall conflicts
A negative variance that exceeds available stock is a shortfall: finalizing it as-is would leave open sales orders or transfers reserving units that your count says are gone. The Impact Review step makes you decide what to do with the affected commitments before it lets you finalize. Each shortfall item lists its affected orders, and you pick one action per item.
| Action | What it does |
|---|---|
| Backorder | Releases the item's order allocations and moves the affected sales-order lines to the backorder queue so they can be re-covered later. Any submitted fulfillments for the product are queued for cancellation. |
| Adjust Count | Raises the counted quantity just enough to erase the shortfall, keeping every reservation intact. Use this when the missing units are likely a miscount, not real loss. |
| Remove from Stock Take | Excludes the item from the take entirely — no adjustment is made for it. When an item's affected orders can't cover its shortfall, this is the only offered action. |
Cancelling fulfillments
When you choose Backorder for a product whose stock is held by submitted fulfillments, those fulfillments must be cancelled to free the inventory. SKU.io cancels them one at a time on finalize and shows progress.
Some fulfillments can't be cancelled — a shipment already handed to a shipping provider and past the cancellable window. When the preview detects one, it flags has blocking conflicts and warns that "Some fulfillments have already been sent to shipping providers and may not be cancellable." If a cancellation fails during finalize, you get a Some Fulfillments Could Not Be Cancelled prompt with two choices:
- Proceed Anyway — finalize past the failed cancellations (the underlying
proceed_despite_failuresflag). The counted reduction still applies; the un-cancelled fulfillment is left as-is for you to sort out manually. - Cancel — back out and resolve the shipments first.
If a fulfillment has already shipped, the stock has physically left — the shortfall is genuine, not a miscount. Prefer resolving the real shipment (or using Adjust Count if it was a counting error) over forcing the write-down through. Cancelling only works on fulfillments still in a cancellable state.
How the reconciliation resolves allocations
Because a 3PL or physical recount is authoritative, the reconciliation flow finalizes in downgrade mode rather than blocking. Conflicting Allocated reservations are stepped back to Planned — newest first — until the write-down no longer strands stock, skipping any row that's guarded by an open fulfillment. Every downgrade and every action is written to the stock-take reconciliation log for audit. If eligible allocations still can't cover the shortfall, the finalize stops and reports the conflict rather than creating phantom reservations. This is the R4 protection described in Protected inventory & allocation conflicts.
Preview & finalize an adjustment-mode take
An adjustment take applies signed deltas (+/− per item) instead of an absolute recount, and it goes from Draft straight to Closed. Its finalize dialog previews feasibility first, then applies only the items it can.
- Open the draft adjustment take and click Finalize Adjustment. The dialog runs a feasibility check and shows three tiles: Total Items, Ready to Apply (feasible), and Blocked.
- Review the item table: Product, Adjustment (
+/−), Current Inv., Available, and a Status icon. A green check means the item will apply; a red alert means it's blocked — hover the icon for the reason, or expand the row for the allocation breakdown. - If any item is blocked, the dialog warns that those items "cannot be adjusted due to insufficient or protected inventory … These items will be skipped during finalization."
- Click Finalize Adjustment (or Apply N Feasible Items when some are blocked).
What you'll see: every feasible delta is applied — positive deltas inject FIFO stock, negative deltas consume it — and the take closes. Blocked items are skipped, not failed, so one impossible removal can't roll back the whole batch.
An item is blocked when its negative adjustment is larger than available stock, or when the removal would collide with protected inventory — units reserved by active fulfillments, open transfers, or submitted sales orders. Positive adjustments and zero-deltas are always feasible.
Finalize refuses the whole take (rather than skipping items) when the take is empty, or when it isn't a draft adjustment take. Positive adjustments seed their cost from each item's Unit Cost; negative adjustments take their cost from the FIFO layers they consume.
Protected inventory & allocation conflicts (R4)
A counted reduction must never leave an open reservation pointing at stock that no longer exists — a "phantom allocation." SKU.io guards against this at finalize, and it distinguishes two kinds of committed stock.
Soft allocations are open Allocated reservations on sales-order lines and transfer lines. They can be stepped back to Planned if the count says the stock is gone.
Protected inventory is stock committed to work already in motion — submitted fulfillments and open warehouse transfers. It can't simply be un-reserved, and it's checked against the FIFO aggregate for the product (never per layer), so a genuinely absorbable reduction isn't wrongly blocked.
How a finalize reacts to a conflict depends on which entry point you use:
| Entry point | Mode | Behavior on conflict |
|---|---|---|
Direct/strict finalize (the POST .../finalize API path) | Block | Refuses to finalize and returns the per-product shortfalls plus the conflicting sales orders and transfers, so an operator records the real events first. |
| Finalize & Reconcile dialog and automated 3PL reconciliation | Downgrade to Planned | Steps conflicting Allocated rows back to Planned (newest first, skipping rows guarded by an open fulfillment), then finalizes. If that still can't cover the shortfall, it blocks like the strict path. |
When protected inventory itself blocks a reduction, finalize returns a protected inventory conflict with the requested, available, and protected quantities and the exact allocations involved — for example "N units requested for removal but blocked by M protected units allocated by active fulfillments, open transfers, or submitted sales orders." Resolve it by acting on the real documents: ship or receive the transfer, or cancel / backorder the order, then finalize again.
Committed stock in SKU.io is either Allocated (soft, downgradeable) or held by protected work (submitted fulfillments, open transfers). If the write-down is a real loss, resolve the commitment; if it's a miscount, use Adjust Count in the reconciliation dialog. See Allocations & backorders for how these reservations are modeled.
Next steps
- Amend, re-date, reverse & delete a stock take — fix a finalized take.
- Work the backorder queue / allocation pipeline — re-cover lines released by a reconciliation.
- View & filter the inventory movement ledger — audit the movements a finalize created.
- Browse & manage FIFO layers — see the cost layers the variance touched.
- Stock take statuses, fields & list — the full field and status reference.
- How stock takes work — the model behind counts, snapshots, and variances.