Warehouse Operations

How do I cycle count a live ecommerce warehouse so inventory and the GL stay in sync?

Counting inventory in an active warehouse while keeping your books in agreement.

Last updated September 16, 2026

Shrinkage is a journal entry. A count that only "fixes Shopify" leaves the books lying. A count that only "fixes the WMS" leaves the storefront selling a number the GL no longer holds.

Count against a snapshot, not live

Bin A-04, SKU-12. Snapshot when the count starts: 80 expected. During the hour you sell 6, and a return of 2 hits QC, not this bin. The counter writes 72. True variance is 72 against (80 minus 6) = 74, so 2 missing, not 8. At $22 weighted average that is a $44 shrink journal after the recount, not a $176 story and not a Shopify edit. If you count against a moving on-hand, every pick looks like shrink and every return looks like found stock. Count when the floor is quiet: overnight, between waves, or freeze the bin. Two-step counts (blind count, then recount the exception) beat a single typed number. Write off only after the recount.

Post each site separately

Do not net two sites into one journal. The same SKU on the same day: own warehouse snapshot 80, counted 74; 3PL file 200, your expected 210. That is a $132 own-site shrink and a $220 3PL shrink, two locations, two posts. Blend them and you cannot tell which floor is lying.

Let ABC set the count cadence

ABC sets the cadence, not a heroic year-end. A items: tight records, frequent counts, often weekly or more. B items: a middle rhythm. C items: rare counts, deep storage. Sales-value ABC, inventory-value ABC, and pick-velocity ABC disagree. Count the component that is actually on the shelf, not the kit that is A on the storefront. New SKUs have no class until they sell; give launches a temporary A or they never get touched.

In one close, a month-end valuation that was off by about $5.8M had about $5M traced to a single day of cycle-count stock moves. Localise the variance by day and SKU before you post anything. Run valuation against the balance sheet after the journals, not before.

Cycle counting at a 3PL

At a 3PL, the sanctioned path is often a count file, not a live walk. Import their file against your snapshot of expected qty. The difference is the journal. Some 3PLs only update you when that file lands, so the count is the inventory sync. FBA's daily ledger import is the same idea: a cycle count you did not walk. Do not also adjust Shopify by hand or you double-write. Amazon Reserved and in-transit-between-Amazon-warehouses will look like shrink if you expected sellable on-hand.

Move stock with transfer orders during the year. Adjustments are for counts. Negative on-hand and negative unit cost are data-integrity alarms, not rounding. Unidentifiable found stock comes in as a count, not a fake receipt. Unidentifiable missing stock is shrink, not a silent Shopify edit. Lock the stock period after you post so a backdated recount cannot rewrite last month. Comfort is not an audit. Reconcile the count journal to the GL the same day, SKU by SKU, while the floor still remembers what happened.

Run this with AI

Connect Claude or ChatGPT to your Fulfil data with the Fulfil MCP, then run this prompt on your own numbers.

You are the inventory lead for a live ecommerce warehouse (owned and/or 3PL).
Here is: sku, abc, location, snapshot_expected_qty, counted_qty, count_start_ts, sales_during_count, returns_during_count, 3pl_or_own, unit_cost.
Also a 3PL count file if you have one.
[paste]

Produce:
1. True variance after removing sales that happened during the count (snapshot vs counted). Do not treat QC returns as found stock in the counted bin.
2. Which lines are a journal (shrink or found) vs a transfer still open. Do not net own and 3PL into one post.
3. ABC cadence: what should have been counted this week vs parked as C.
4. Dollar impact of posting today's count, and whether one day is large enough to explain a valuation-vs-GL gap.
Do not recommend typing Shopify or the GL by hand. Shrinkage is a journal.

See it run on
your data.

Fulfil runs inventory, fulfillment, purchasing, and accounting for scaling DTC brands in one system.