Available to Promise (ATP): What It Is and How to Calculate It
Available to promise (ATP) is the portion of your stock and inbound supply that isn't already spoken for — the quantity you can safely sell without overselling. This post gives you the ATP formula plainly (on-hand + inbound supply − committed demand), a worked example, and why gut-feel promising causes oversells and backorders. It also shows why a spreadsheet can't keep ATP current and how a live owned system computes it per line automatically.
Quick summary: Available to promise (ATP) is the uncommitted portion of on-hand inventory plus scheduled inbound supply, minus demand already committed to existing orders — the stock you can safely promise to a new customer. The ATP formula is: ATP = on-hand inventory + inbound supply − committed demand.
Available to promise (ATP) is the portion of your stock and inbound supply that isn’t already committed to other orders — the quantity you can genuinely sell to the next customer without breaking a promise you’ve already made. When a buyer asks “can you get me 200 units by the 14th?”, ATP answers the only question that matters: not how much is in the building, but how much is free to sell. Those are two very different numbers, and the gap between them is where oversells and backorders live.
Contents
- What available to promise actually means
- The ATP formula
- A worked example
- Why gut-feel promising causes oversells and backorders
- ATP is not the same as on-hand stock
- Discrete vs cumulative ATP: promising a date, not just a quantity
- Committed demand: the number everyone gets wrong
- ATP across multiple locations and channels
- Why a spreadsheet can’t keep ATP live
- How a live owned system computes ATP automatically
- FAQ
- Sources
What available to promise actually means
Available to promise is a business function that answers customer order enquiries based on what you actually have free to sell. The classic definition, from the APICS/ASCM body of knowledge, describes ATP as “the uncommitted portion of a company’s inventory and planned production” — the stock you haven’t already earmarked for someone else. Wikipedia’s summary puts the same idea plainly: ATP “provides a response to customer order inquiries, based on resource availability,” generating both the quantity you can offer and the date you can offer it for.
The key word is uncommitted. Your warehouse might hold 500 units of a line, but if 450 are already allocated to confirmed orders waiting to ship, only 50 are truly available to promise. Sell 200 against that 500-unit on-hand figure and you’ve oversold by 150 — you’ll fulfil someone late, and won’t know who until picking, when it’s already a problem. ATP exists to stop exactly that: it’s the difference between promising against what you own and promising against what you can deliver. The first is a guess dressed up as a number; the second is a commitment you can keep.
The ATP formula
The formula is refreshingly simple, and every reputable source states it the same way. QuickBooks and Interlake Mecalux both give the same core equation:
ATP = on-hand inventory + inbound supply − committed demand
Each term is a specific, checkable quantity:
- On-hand inventory — the units physically in your location right now, sellable (not damaged, not quarantined, not in QA hold).
- Inbound supply — scheduled receipts you can genuinely count on: confirmed purchase orders with a delivery date, in-transit stock, and planned production due to complete. The date matters as much as the quantity — supply arriving next month can’t cover an order you promised for next week.
- Committed demand — units already allocated to confirmed sales orders, reservations, and anything else that has first claim on the stock before your new customer does.
The subtlety isn’t the arithmetic — anyone can add and subtract three numbers. It’s getting each right and current and respecting the timeline: a quantity that’s true today is wrong the moment an order is confirmed, a receipt is delayed, or a PO date slips. That’s why ATP is a live figure, not a snapshot you type into a cell once and trust forever.
A worked example
Take one product — call it a stainless bracket, SKU BR-40. Here’s the situation on Monday:
- On-hand: 500 units, all sellable.
- Committed demand: 450 units, spread across confirmed orders shipping this week.
- Inbound supply: a confirmed PO for 300 units, landing next Monday.
A new customer asks for 200 units. What can you promise?
Available now: on-hand (500) − committed demand (450) = 50 units. That’s all you can ship this week without robbing an order you’ve already confirmed. Promise the full 200 against the 500 on the shelf and you’ve oversold by 150.
Available next week: the 300-unit PO lands on Monday, so from next Monday your ATP rises by 300. If nothing else is committed against that receipt, you can promise 50 units now plus 150 more once the PO arrives — or you tell the customer honestly: 50 this week, the balance early next week.
That’s the whole value of ATP in one exchange. Instead of “yes, 200, no problem” (a lie you’ll discover at picking) or “let me check and call you back” (a lost hour and a cooling lead), the salesperson can say “50 today, the other 150 by next Tuesday” — a promise you can keep, made on the spot. Scale that across a few thousand lines, dozens of live orders and a rolling stream of inbound POs, and it’s obvious why doing it in your head or by squinting at an on-hand column breaks down fast.
Why gut-feel promising causes oversells and backorders
When there’s no ATP figure, promising falls back on gut feel and the on-hand number — the two least reliable inputs available. The salesperson sees “500 in stock” and commits. Nobody oversells deliberately; they promise against the wrong number because the right one doesn’t exist anywhere they can see it.
The failure is systematic, not occasional. Every order confirmed against on-hand rather than ATP eats into stock that’s already spoken for, and a few times a day, commitments quietly exceed what you can deliver. The gap surfaces days later at picking, when two orders reach for the same units and one can’t be filled — so now you’re choosing which customer to disappoint, issuing a backorder, and eating the cost of a split shipment. It has a quieter cost too: a business that says “yes” then ships late trains buyers to pad orders and keep a backup supplier warm. ATP is what makes the reliable answer possible in the moment, which is why it sits at the heart of preventing overselling rather than mopping up after it.
ATP is not the same as on-hand stock
This deserves its own section because it’s the single most common and most expensive confusion. On-hand stock is a physical fact: units in the building. ATP is a commercial position: units free to sell. They’re only equal when nothing is committed — which, for any business actually taking orders, is essentially never.
The relationship runs both ways. ATP can be higher than on-hand when you count inbound — 50 on the shelf but a confirmed PO landing Friday lets you promise 250 for next week. And it can be far lower than on-hand when commitments stack up — 500 on the shelf but only 50 free. On-hand alone tells you neither. It’s a warehouse number pretending to be a sales number, and getting it wrong causes both mistakes at once: overselling on committed lines, and refusing orders you could fill from inbound on others. ATP is the number that lets you say yes to everything you can deliver and never promise what you can’t.
Discrete vs cumulative ATP: promising a date, not just a quantity
Because inbound supply arrives on specific dates, ATP isn’t one figure — it changes over time, and there are two common ways to express that:
- Discrete ATP — the quantity uncommitted in each individual period (this week, next week), calculated as the supply arriving in that period minus the demand committed against it. It tells you what’s free in that window.
- Cumulative ATP — the running total carried forward period by period. It answers “if I’m willing to promise a slightly later date, how much can I offer in total?”
This is what lets a system give a real delivery date rather than a flat yes/no. In the BR-40 example, discrete ATP is 50 this week and 150 next week; cumulative ATP by next week is 200. You can offer part now and part later, or the whole lot on the later date — each option a promise anchored to an actual receipt. The master production schedule is the classic upstream input for this forward-looking ATP in businesses that also manufacture.
Committed demand: the number everyone gets wrong
Of the three inputs, committed demand is where accuracy quietly collapses. On-hand you can count on a shelf; inbound you can read off a PO. But “how much is already committed” depends on capturing every claim on your stock the instant it’s made — exactly the thing manual processes miss.
Committed demand should include confirmed sales orders, but also reservations and holds, customer allocations, stock earmarked for kits or assemblies, transfers promised to another location, and anything in a channel’s checkout that will convert. Miss any of these and ATP reads high, so you oversell; double-count and it reads low, so you refuse good orders. Both errors come from the same root: commitments that live in an inbox or a note on a desk instead of in one system the ATP calculation can see. It’s why ATP and backorder management are two sides of one coin — clean committed-demand data lets you deliberately accept an order you can’t fill immediately and manage it as a backorder, rather than overselling by accident and discovering it at picking.
ATP across multiple locations and channels
Add locations and channels and the naive version breaks. If each channel promises against total group stock, they’ll collectively oversell the same units; if each promises only against its own local pool, you’ll refuse orders you could fill from the next warehouse over.
Real ATP across a network answers the harder question: what’s uncommitted and reachable for this order, given where the stock is and where the customer is? That means netting committed demand per location and — for multi-channel sellers — making sure a unit promised on one channel is instantly invisible as available on the others. It’s the same discipline that underpins stopping overselling across Shopify, Amazon and eBay: one shared, live view of what’s free, so no two channels sell the same unit. Not exotic maths — just bookkeeping that has to be perfect and instantaneous across several moving pools at once, which is exactly the work humans do badly and a system does without noticing.
Why a spreadsheet can’t keep ATP live
The ATP formula is simple enough that a spreadsheet can compute it — once. The problem is that ATP is only useful if it’s current, and current is exactly what a spreadsheet can’t stay. On-hand changes with every despatch and receipt. Committed demand changes with every order confirmed. Inbound changes every time a PO date slips. ATP is a function of three inputs that all move continuously, and a spreadsheet re-derives none of them until a human sits down and re-does the maths.
So the number on the sheet describes the business at the moment someone last updated it, and drifts from reality every minute after. By the time a salesperson checks it, orders have been taken, stock has shipped, and a PO has slipped — none of which the sheet knows. Worse, a shared spreadsheet gives several people a stale figure simultaneously, so two of them can promise the same 50 units within the same hour, each looking at a cell that says the stock is free. The formula was right the day it was typed and lies a little more every day after — the same slow rot that undermines a reorder point kept on a spreadsheet.
How a live owned system computes ATP automatically
A right-sized operations system treats ATP as a live figure it derives on demand, not a number anyone types in. Because it already holds your on-hand stock, confirmed orders and inbound POs in one place, it computes available to promise for any line the instant it’s asked — netting committed demand against on-hand plus dated inbound, per location, showing not just how much but by when. The salesperson asking “can I promise 200 by the 14th?” gets a straight answer at the point of sale.
The moment an order is confirmed, committed demand rises and ATP drops for everyone, so no two orders can be promised against the same units. The moment a PO date slips, forward ATP re-dates itself, so nobody promises against supply that’s no longer arriving when they think. It’s the backbone of a wholesale order management system and, more broadly, of an operations control system that lets a business promise dates it can keep instead of dates it hopes to hit — owned outright, sized for a business that’s outgrown spreadsheets but shouldn’t have to run a full ERP just to answer “can we deliver this?”
FAQ
What is available to promise (ATP)?
Available to promise is the uncommitted portion of your inventory and inbound supply — the quantity you can genuinely sell to a new customer without breaking a promise already made to another. It’s the difference between what’s physically in the building and what’s actually free to sell once you subtract everything already committed, letting you answer “can you deliver X by date Y?” with a date you can stand behind.
What is the ATP formula?
ATP = on-hand inventory + inbound supply − committed demand. On-hand is sellable stock in the location now; inbound is confirmed scheduled receipts with dates (POs, in-transit, planned production); committed demand is everything allocated to confirmed orders, reservations and holds. Because inbound arrives on specific dates, ATP is usually expressed over time — discrete per period or cumulative — so you can promise a realistic date, not just a quantity.
How is ATP different from on-hand stock?
On-hand is the physical count of units in your location. ATP is how many of those, plus dated inbound, are actually free to sell after subtracting committed demand. They’re equal only when nothing is committed, which almost never happens in a business taking orders. Promising against on-hand causes overselling; ignoring inbound causes the opposite error — refusing orders you could actually fulfil.
Why does gut-feel promising cause oversells and backorders?
Because gut feel and the on-hand number both ignore committed demand. Every order confirmed against on-hand eats into units already spoken for, and once commitments exceed what you can deliver, the shortfall surfaces at picking as a backorder, split shipment, or late delivery. Nobody oversells deliberately — they promise against the wrong number because the right one (ATP) doesn’t exist anywhere they can see it.
Can you calculate ATP in a spreadsheet?
You can compute the formula, but it won’t stay accurate. ATP depends on three inputs — on-hand, committed demand, inbound — that change with every despatch, order and PO update, and a spreadsheet re-derives none of them until a human redoes the maths. The figure is right when typed and drifts every minute after, and a shared sheet lets several people promise the same units at once. Keeping ATP live needs a system that recomputes it on every transaction.
How OpsMavix can help
OpsMavix builds right-sized operations systems for businesses that have outgrown the spreadsheet but aren’t ready — and shouldn’t have to pay — for a full ERP. Instead of promising delivery dates against an on-hand column that’s already out of date, we move order promising into a system that computes available to promise per line from live on-hand, committed demand and dated inbound supply — so the moment an order is confirmed, ATP drops for everyone and no two orders promise the same units. You own it outright as a wholesale order management system that lets your team promise dates they can keep, on the spot.