Automate inventory count adjustments, with a person approving every real variance
Updated · By Ecomsellertool editorial team
When a physical count disagrees with your system, hold the missing units out of every channel immediately, then let a variance table decide: tiny gaps post automatically, mid-size gaps wait for an approver, large gaps get a second count first. After approval, post one adjustment with an audit reference, then push the corrected quantity to Shopify, Amazon seller-fulfilled offers and Walmart.
- Shopify's inventorySetQuantities sets absolute values for the source-of-truth system only; from API version 2026-04 it needs changeFromQuantity and an idempotency key (checked November 4, 2026).
- Shopify's inventoryAdjustQuantities applies a delta, takes a reason and an optional referenceDocumentUri, and its documentation example uses the reason correction.
- In Shopify, on hand equals committed plus unavailable plus available, and customers can only buy from available stock.
- Amazon's documentation says quantity is supported for seller-fulfilled offers but not for FBA, so an FBA count gap is read from the FBA Inventory API and the Inventory Ledger, never pushed.
- Walmart updates stock through single-SKU calls or bulk feeds; the bulk endpoints are throttled and each feed returns a feed ID whose line-item statuses you check.
- Here rules do the arithmetic, the holds and the pushes; a person approves every adjustment above your tolerance.
The step map: who runs each step
Trigger: A completed cycle count or stock take for a SKU and location, or a pick or receiving exception that flags a mismatch between the shelf and the system.
| Step | What happens | Who runs it |
|---|---|---|
| 1 | The count result arrives from the warehouse system or 3PL. The workflow computes expected on hand (snapshot quantity adjusted for movements posted during the count) and the variance in units, percent and value. | Rule |
| 2 | Any shortfall is moved out of sellable stock at once, into an unavailable state at that location, so Shopify, Amazon seller-fulfilled offers and Walmart stop selling units that may not exist. A surplus is not released yet. | Rule |
| 3 | The variance decision table picks the path: post automatically inside your tolerance, queue for approval, require a second count by a different person, or reject the adjustment because a missing transaction explains the gap. | Rule |
| 4 | For approvals, the approver sees the SKU, location, both counts, variance value, recent receipts, shipments and returns for that SKU, and any open purchase order or transfer, then approves, sends back for recount or changes the cause code. | Person |
| 5 | On approval the workflow posts one adjustment to the system of record with an idempotency key, the cause code and a reference to the count sheet, then releases the hold so the held units become the write-off. | Rule |
| 6 | The corrected sellable quantity is pushed to each channel through its own call: Shopify's inventory mutation, Amazon's listing update for seller-fulfilled offers and Walmart's inventory call or feed. Amazon FBA is read, not pushed. | Rule |
| 7 | The workflow reads each channel back, checks feed line items and listing issues, retries once and raises anything that does not match. It writes the full record: who counted, who approved, before and after quantities and the cause. | Rule |
6 rule steps · 0 AI model steps · 1 person step. A rule follows fixed logic you approve; an AI model handles messy input and its output is checked by rules; a person makes the calls listed below.
What stays with a person
- Approving any adjustment above your tolerance, with a second approver for large dollar values
- Choosing the cause code when a recount confirms the gap: mispick, damage, theft, unreceived stock or a mapping error
- Deciding whether an FBA discrepancy is worth a support case, which stays with a person
- Releasing a surplus to channels only after it is recounted and a missing receipt or return is ruled out
- Changing tolerance bands, count frequency and which SKUs are counted most often
Which tools can run it
- Your warehouse system's cycle-count module or your 3PL's count reports, plus a shared approval sheet for a few SKUs and one location
- A multichannel inventory app, if it posts count adjustments with reasons and lets one tool be the only writer to each channel
- Zapier, Make or n8n connecting the count export, an approval step and the channel calls, with a log of every push
- Custom code on your accounts, for several locations, FBA plus seller-fulfilled offers, dollar-based approvals and a full audit record
Systems it connects
- Warehouse system, 3PL or counting app (source of truth)
- Shopify inventory
- Amazon Listings Items, FBA Inventory API, Ledger reports
- Walmart Marketplace inventory API and feeds
- Approval queue in Slack or email
- Accounting system for inventory write-offs
Build size: Medium
The arithmetic is short; the work is a trustworthy expected quantity during live movement, clean cause codes and one writer per channel.
A cycle count finds that the shelf holds 188 units and the system says 195. For the next hour or two, Shopify, Amazon and Walmart keep selling the 195, and the seven phantom units become cancelled orders. Then someone fixes the number in a spreadsheet, nobody records why, and the same SKU is off again next quarter. This recipe handles the count result from the moment it arrives: it holds the missing units out of sale, decides who must approve the adjustment, posts it once, and pushes the corrected quantity to each channel. It is one page of our automation library.
How should each count variance be handled?
This table is the core of the build, and you can run it today from a count sheet. Each row is a variance size or a cause, what the workflow does, who decides, what happens to channel quantities and what record is kept. The percent and dollar thresholds are illustrative; set your own per SKU class and write them down. Measure variance against expected on hand at the end of the count, and where percent and value point to different rows, use the stricter one.
| Variance (size band or cause) | What the workflow does | Who decides | Channel quantity action | Record kept |
|---|---|---|---|---|
| Shortfall or surplus within 1% of expected and under $100 (illustrative) | Posts the adjustment automatically | Nobody at the time; a weekly review of auto-posts | Corrected quantity pushed after posting | Count, adjustment, cause "within tolerance" |
| Shortfall of 1% to 5%, or $100 to $1,000 (illustrative) | Holds the shortfall as unavailable and queues an approval | Warehouse or operations lead | Channels lowered at once by the held units; no further change on approval | Both counts, approver, cause code, hold and release times |
| Shortfall above 5%, or above $1,000 (illustrative) | Holds the shortfall and orders a second count by a different person before any adjustment | Operations lead, plus finance for the dollar value | Channels lowered at once; stay lowered until resolved | Both counts, who counted, approvers, cause |
| Count differs because a receipt, shipment, transfer or return was posted late | Posts no adjustment; asks for the missing transaction | Person who owns that transaction | Follows the transaction through the normal sync | Link between the count and the late transaction |
| Surplus beyond tolerance | Recounts first; checks open purchase orders, returns and transfers | Operations lead | No increase published until approved | Recount, evidence checked, approver |
| Damaged or quarantined units found | Moves units to an unavailable state with a damaged reason; no sellable adjustment | Warehouse lead | Channels drop by the units moved | The move, reason and photos if you take them |
| FBA units disagree with your expectation | Reads the FBA inventory states and Inventory Ledger adjustments; posts nothing | Person decides whether to open a support case | None; Amazon controls FBA quantity | Ledger rows and the case outcome |
| Second count still disagrees | Keeps the hold and flags the bin, SKU mapping and lot | Operations lead | Channels stay lowered | Investigation notes |
Two rows carry most of the value. Hold the shortfall at once closes the gap between the count and the approval, which is where oversells happen. Surplus is not released until proven stops a miscount, or stock that belongs to another SKU, from selling twice.
What does a worked count look like?
Here is an illustrative SKU at one 3PL location with a unit cost of $12. The numbers are an example, not a client result. Shopify defines inventory states so that on hand equals committed plus unavailable plus available, and says customers can only buy from available stock (checked November 4, 2026). The table below keeps that identity true on every row.
| Moment | On hand | Committed | Unavailable | Available |
|---|---|---|---|---|
| Count starts (system snapshot) | 200 | 14 | 6 | 180 |
| Five units ship during the count | 195 | 9 | 6 | 180 |
| Counter reports 188 on hand, shortfall of 7 held at once | 195 | 9 | 13 | 173 |
| Approver confirms, adjustment posted, hold released | 188 | 9 | 6 | 173 |
Expected on hand at the end of the count is 200 − 5 = 195, because five units shipped from open orders while counting. The counted 188 includes the 6 units in a quality hold. The variance is 188 − 195 = −7 units, 7 ÷ 195 = 3.6% and 7 units at $12 each is $84. The percent lands in the 1% to 5% band, so a person approves it. The channels moved when the shortfall was found, not when it was approved: Shopify available fell from 180 to 173, and the seller-fulfilled quantities published from the shared pool fell by the same 7. Using the buffers from the worked example in our multichannel inventory sync recipe, 13 for Amazon and 6 for Walmart, Amazon moves from 167 to 160 and Walmart from 174 to 167.
How do you post the adjustment in Shopify without double-posting?
Pick the call by who owns the number. Shopify's inventorySetQuantities documentation says to use the mutation only on behalf of a system that is the source of truth, and that from API version 2026-04 each quantity must include changeFromQuantity, so the update applies only if the stored quantity still matches (checked November 4, 2026). If your warehouse system holds the count, post there, then set Shopify to the new number with the quantity Shopify held at the snapshot as changeFromQuantity. A rejected write means someone edited stock in the admin during the count, and that goes to a person.
If Shopify is your record, the inventoryAdjustQuantities mutation applies a delta, accepts a reason and an optional referenceDocumentUri, and requires an idempotency key from version 2026-04 (checked November 4, 2026). Its example reason is correction, and the page does not list other values, so keep your detailed cause code in the count sheet that the reference URI points to. Build the idempotency key from the count line, so a retry cannot post the same adjustment twice. Shopify's help page on adjusting inventory says every adjustment is recorded with who changed it, when and why.
For the hold itself, the inventoryMoveQuantities mutation moves units between quantity states at one location and returns an audit trail with the reason and reference document. Its examples list quality_control and damaged among the quantity names, but the page does not confirm every name is a valid move target, so test the state you choose in your own store first (checked November 4, 2026).
How does the corrected quantity reach Amazon and Walmart without overselling?
Each channel has its own path, and the order of operations matters more than the speed. Lower first, raise last: shortfalls reach every channel before approval, and increases wait until the adjustment is posted. Our multichannel inventory sync recipe covers buffers, zero-out rules and the full call-by-call table, so this page only adds what a count changes.
| Channel | Count-specific rule | What the vendor documents (checked November 4, 2026) |
|---|---|---|
| Shopify | Hold with a move, post once, read back available | Described in the section above |
| Amazon seller-fulfilled | Push the lowered pool quantity through the listing update; check the listing afterward | Quantity is supported for seller-fulfilled offers but not for FBA, per Amazon's multiple-fulfillment guide |
| Amazon FBA | Read only: compare fulfillable, unfulfillable and researching units before and after | The FBA Inventory API defines fulfillable, inbound, reserved, unfulfillable and researching states |
| Walmart | Single-SKU call for a few SKUs, a bulk feed for many; read the feed status lines; read the quantity back | Bulk endpoints are throttled and return a feed ID with line-item statuses per Walmart's bulk inventory guide; the inventory overview defines lag time as the delay before a change is available for sale |
Walmart's pages we read do not say whether the quantity sent replaces or adjusts the current one, so send the full intended quantity and confirm by reading it back. FBA needs its own habit. Amazon's FBA report list describes the detailed Inventory Ledger as listing movements such as damaged, lost and found units, with up to 18 months of history and an Adjustments event type. When your count of units at a prep center or 3PL disagrees with FBA, reconcile with our 3PL reconciliation page, and take lost units to FBA reimbursements.
What should stay with a person?
Everything that turns a gap into a loss. Rules compute the expected quantity, the variance, the hold and the pushes. A person approves each adjustment above tolerance, chooses the cause code once a recount confirms the gap, decides whether an FBA discrepancy deserves a support case, and releases a surplus. Cause codes matter more than the numbers: a pattern of mispicks in one aisle, or of unreceived stock from one supplier, is what tells you which fix to make. The workflow's job is to make that pattern visible, by SKU, location and cause, in the same place as your low-stock alerts and draft purchase orders, because a corrected on-hand number changes your days of cover and your reorder point. For dated goods, expiry date and lot tracking adds lot to the count line.
Which tool should run it?
The simplest one that sees the count, the approver and every channel.
| Level | Fits when | What to watch |
|---|---|---|
| Warehouse or 3PL count module plus a shared approval sheet | A few SKUs, one location | Someone must lower channel quantities by hand during approval; log it |
| A multichannel inventory app | Channels and warehouse are on its supported list | Confirm it posts a reason on adjustments and is the only writer to each channel |
| Zapier, Make or n8n | One location, two channels, modest count volume | Add the idempotency key and a read-back step, or a retry becomes a double adjustment; see our Zapier vs Make vs n8n comparison |
| Custom code on your accounts | Several locations, FBA plus seller-fulfilled offers, dollar-based approvals | Can run on Ecomsellertool Growth OS beside inventory and replenishment |
Who builds inventory count workflows for brands and 3PLs?
Ecomsellertool builds inventory workflows like this on your own accounts and systems. We have built on Amazon's seller APIs since 2017 and shipped 50+ tools for 100+ teams. We start with how counts are taken today, where the system of record lives and who can approve what, then build the variance table, the holds, the pushes and the record. Send a project brief below, or read how our workflow automation service works.
The building blocks are work we have shipped. For Pacific Prep, a 3PL, we built a warehouse management system that connects Amazon, Shopify, ScanPower and ShipStation, with an inventory module showing total, available, reserved and quarantined units, bin locations, license plate management, receiving and Amazon's inbound shipment flow. The same states and locations are what a count adjustment reads and writes.
You keep your accounts, your data and the custom code we build; the Growth OS base is licensed to you.
Get this workflow built
Send us your version of this workflow
Describe the workflow you want automated. We reply with a written plan: scope, timeline and a fixed price.
Frequently asked questions
What is a cycle count adjustment?
It is the change you post to your inventory records after a physical count shows a different quantity than the system. The adjustment moves the system to the counted number and records who counted, who approved, why the gap happened and the before and after quantities. A good process also holds the missing units out of sale until the adjustment is approved.
Should a stock discrepancy be adjusted automatically?
Only inside a tolerance you set, such as one percent and a small dollar value. Above that, a person should approve it, and above a higher band a different person should recount first. Many discrepancies are a late receipt, a transfer or a returned unit that was never logged, and adjusting them hides the real error.
How do I stop overselling while a count is being approved?
Move the missing units to an unavailable state the moment the count shows a shortfall, before any approval. In Shopify, customers can only buy available stock, so units set aside as unavailable stop selling there, and the same reduced quantity is pushed to Amazon seller-fulfilled offers and Walmart. Release the hold when the adjustment posts.
Can I change my FBA inventory count through the API?
Amazon's documentation says quantity is supported for seller-fulfilled offers but not for FBA. Amazon counts FBA stock itself. You can read it through the FBA Inventory API and see adjustments in the Inventory Ledger reports, so an FBA gap becomes a reconciliation or a support case, not an adjustment you post.
Which Shopify call should post a count adjustment?
If your warehouse system or 3PL is the source of truth, Shopify says to use inventorySetQuantities for the absolute number, with changeFromQuantity so the write fails if someone edited stock in between. If Shopify itself is your record, inventoryAdjustQuantities applies the difference and keeps a reason and a reference to your count sheet.
How often should we cycle count?
That is your call and depends on SKU value, sales speed and how often the SKU has had variances. A common approach is to count high-value and fast-moving SKUs more often than slow, cheap ones. The workflow does not need a fixed schedule: it handles any count result the same way and can raise the frequency for a SKU that keeps having variances.
