Skip to content
Inventory

Available-to-Promise Inventory: Why Your Stock Count Isn't What You Can Actually Sell

Retailer OSSeptember 29, 20269 min read
Available-to-Promise Inventory: Why Your Stock Count Isn't What You Can Actually Sell

Available-to-promise (ATP) inventory is the quantity of an item you can actually commit to a customer right now, after subtracting stock that's already spoken for. It is almost never the same number as your on-hand count. On-hand tells you how many units are sitting in the building; ATP tells you how many of those units are actually free to sell. If you've ever promised a customer an item that turned out to be held for a transfer, tagged for a special order, or already committed to an online sale, you've felt the gap between the two.

What Exactly Is Available-to-Promise Inventory?

Available-to-promise inventory is on-hand stock minus everything already committed against it, plus stock that's confirmed and inbound. That's the one-sentence definition. On-hand is a snapshot of what's physically in a location. ATP is a working number: on-hand, adjusted for holds, backorders, open transfers, and other channels drawing from the same pool, then adjusted upward for stock that's already ordered and confirmed to arrive.

The distinction matters most the moment a store sells in more than one place — a register, an online store, a marketplace listing — or moves stock between locations. A single on-hand number can't answer "can I sell this right now" once more than one channel or location is drawing from it.

Why Doesn't On-Hand Stock Equal What You Can Sell?

On-hand is a count of physical units. It doesn't know intent. A unit can be sitting on your shelf and still be unavailable to the next customer who walks in, because someone else already has a claim on it. The gap between on-hand and ATP grows with every one of these:

  • Held or parked orders — a customer put down a deposit or asked you to hold an item, but it hasn't left the shelf yet
  • Backorders and special orders — you've promised units against a customer order that are still incoming, but the on-hand count doesn't reflect who they belong to
  • In-transit transfers — stock marked as leaving one location for another shows on-hand at the origin until it's received, even though it's no longer really sellable there
  • Multi-channel commitments — the same SKU sold in-store and through an online store or a marketplace draws from one pool, and an order placed on one channel has to reduce what the other channels can promise
  • Damaged or quarantined stock — units that are physically present but not sellable until they're inspected or written off

Any POS that only shows a single on-hand number is quietly ignoring all five of these. That's how a customer gets told "yes, we have it" and then finds out at pickup that it was already promised to someone else.

How Do You Calculate Available-to-Promise Inventory?

The basic formula, adapted for a retail floor rather than a manufacturing line, is:

ATP = On-hand stock − Committed stock (holds, backorders, in-transit transfers out, other-channel reservations) + Confirmed incoming stock (received or in-transit transfers in, due within your promise window)

Worked example: a store has 40 units of an item on hand. Six are held for a special order, four are in a transfer that's marked in-transit to another location, and the online store has 3 units tied up in open, unfulfilled orders. That's 13 units committed. Separately, a purchase order for 20 more units has been confirmed by the vendor and is expected this week. ATP = 40 − 13 + 20 = 47. The raw on-hand count (40) understates what you'll actually be able to sell this week, because it ignores the incoming PO — and it overstates what you can sell *today*, because it ignores the 13 already committed. Neither number alone tells the truth; ATP does.

What Happens When You Sell Without Tracking ATP?

Stores that only look at on-hand tend to hit the same handful of problems, on repeat:

  • Overselling online because the ecommerce channel doesn't know six units are already held at the counter
  • Promising a customer pickup on an item that's actually mid-transfer to another store
  • Reordering too late because on-hand looks fine, even though most of it is already spoken for
  • Reordering too early because a transfer already inbound isn't accounted for, so you double-order
  • Staff quoting availability from memory instead of a number they can trust

Each of these is a service failure that traces back to the same root cause: treating a static count as if it were a live commitment ledger. The fix isn't a better spreadsheet — it's a system where every commitment against an item (a hold, a transfer, an order on another channel) is recorded as a movement the moment it happens, not reconciled at the end of the day.

How Does Available-to-Promise Work Across Multiple Locations?

Multi-location retailers have an extra layer: ATP has to be calculated per item, per location, not just per item overall. Ten units company-wide is a different answer depending on whether they're all at one store or split three ways across a warehouse and two storefronts, and a transfer between locations changes the ATP at both ends the moment it's created — the sending location loses availability before the stock physically leaves, and the receiving location doesn't gain it until the transfer is marked received. Get that timing wrong and you either oversell at the origin or undersell at the destination while the truck is on the road. This is also where reorder points and par levels have to be set per location rather than as one company-wide number — a location's real reorder trigger should be based on its own ATP, not a blended total.

How Does Retailer OS Show True Sellable Quantity?

Retailer OS keeps a per-item, per-location stock ledger, not a single blended on-hand figure. Every sale, receipt, transfer, and adjustment writes a movement row against that ledger, so the system always knows what's been committed and what's genuinely free:

  • Per-location stock with a full movement ledger — every sale, transfer, receipt, and adjustment leaves an audit row, so on-hand at each store or warehouse reflects reality, not a monthly reconciliation
  • Transfers with in-transit tracking — a transfer moves through draft, in-transit, and received states, so stock leaving one location is out of that location's sellable count before it's physically gone, and doesn't count at the destination until it actually arrives
  • Reorder points and par levels — set per item so you can flag what's genuinely low, and AI-assisted reorder suggestions are available on a Messaging & AI plan starting at $39.99/month
  • One shared catalog for every channel — if you add the online store (a paid add-on at $99.99/month) or list on Amazon or eBay (each a paid add-on at $99.99/month), those channels sell from the same inventory as the register, so a sale in one place reduces what the others can promise instead of running on a separate, unsynced count

Because Retailer OS runs point of sale and inventory as one system rather than two products stitched together, the movement ledger and the register are always looking at the same numbers. There's no export, no nightly batch job, no separate inventory tool to reconcile against what the counter is selling. Retailer OS is billed per store at $99.99/month (which includes point of sale and inventory) plus $9.99/month per user seat.

How Do You Start Tracking Available-to-Promise in Your Own Store?

You don't need new software to start thinking in ATP terms — you need a discipline about what counts as a commitment. Start here:

  • List every source of commitment against your stock: holds, layaways, special orders, in-progress transfers, and any other channel selling from the same items
  • Make sure every one of those gets recorded the moment it happens, not at end of day — a hold written on a sticky note isn't a commitment the system can see
  • Set reorder points per location rather than for the business as a whole, since a warehouse and a storefront rarely deplete at the same rate
  • Review any item where on-hand and ATP diverge by a wide margin — that gap is usually where a customer promise is about to go wrong
  • Treat an in-transit transfer as unavailable at the origin the moment it's created, not the moment it physically leaves the building

For a deeper look at running that ledger across several locations at once, see multi-location inventory management and how backorders fit into the same commitment logic. Standardized item identifiers also make this easier to trust across systems — see GS1's guidance on product identification if you're setting up barcodes from scratch.

An on-hand count answers "what's in the building." Available-to-promise answers "what can I actually sell." If your POS only gives you the first number, you're one hold or one transfer away from overpromising. See how Retailer OS tracks inventory per item, per location, with transfers and reorder points built in — or check pricing to see what it costs for your store count.

#inventory management#available-to-promise#multi-location inventory#reorder points

Last updated September 29, 2026

Run every store from one system.

Point of sale, inventory, and your team in one place. Start a 14-day free trial with no card required, or book a walkthrough with our team.