Inventory Forecasting for Quick Commerce Dark Stores
Your national forecast can be perfectly accurate and still empty half your dark stores. Quick commerce is forecast per store or not at all.
A brand will show us a beautiful quick commerce forecast. One number per SKU, citywide, sometimes nationwide, accurate to within a few percent at the aggregate. And then half the dark stores in that same city are stocked out by 9pm while the other half are sitting on dead inventory the platform is about to charge them to hold. The forecast was not wrong. It was just answering a question nobody on a ten-minute delivery promise actually asks.
Quick commerce does not fulfil from a warehouse. It fulfils from a dark store that serves a two-to-three kilometre radius, and demand inside that radius has almost nothing to do with the national average. The forecasting model that works for Amazon, where stock pools centrally and any unit can serve any customer, breaks the moment your inventory is scattered across hundreds of tiny independent nodes that cannot share stock with each other. And there are a lot more of those nodes now. India crossed roughly 6,000 operational dark stores entering 2026, and the leading platforms are still building, so the grid you have to forecast against is denser and finer-grained every quarter.
Why the aggregate forecast lies to you
The core problem is pooling. On a marketplace, a thousand units in one warehouse can absorb demand from anywhere in the country, so the variance you forecast against is smoothed across the whole map. In quick commerce there is no pool. Each dark store holds its own stock, sells only to its own radius, and cannot lend a unit to the store three kilometres away that just sold out. You are not forecasting one demand curve. You are forecasting hundreds of them, each small, each noisy, each local.
And local demand is genuinely different store to store. A dark store in a young-professional pocket of Bengaluru sells protein bars, cold brew, and condoms at volumes a store in a family neighbourhood across the same city will never touch. Demand is shaped by who lives in the radius, what the nearest competing stores carry, the weather that afternoon, and whether there is a cricket match on. Aggregate it all together and the signal that should drive each store’s order is averaged into mush.
You are not forecasting a product. You are forecasting a product in a postcode, and the postcode matters more than the product.
This is the same trap that ruins assortment decisions, which is why we treat what each dark store carries as a per-store exercise rather than a catalogue you push everywhere. The forecast and the assortment are the same decision viewed from two angles. Once you accept that the right range differs by store, you have already accepted that the right quantity does too.
Fill rate is the number that actually pays you
Marketplace operators obsess over availability. Quick commerce operators should obsess over fill rate, and the distinction is not pedantic. Fill rate is the share of demand inside a given store’s radius that you could actually serve from that store’s shelf at the moment the order came in. It is a local number by definition. A national availability figure of 95 percent can hide a dozen dark stores running at 60 percent fill on your hero SKU, and those are precisely the stores quietly bleeding you.
The bleed is worse than the lost sale. When your product is out of stock in a dark store, the platform’s app does not show an empty shelf. It shows your competitor, or it drops your item from the listings that radius sees entirely. A few days dark in one store and you lose placement in that store’s slate, which means you lose it even after you restock. Stockouts in quick commerce are hyperlocal ranking events, and the damage compounds exactly the way it does on marketplaces. We have made the broader case that the real cost of a stockout is the ranking you cannot see on the invoice, and on a per-store grid that cost simply multiplies by the number of stores you let go dark.
How to forecast when every store is its own market
You cannot run a clean statistical model on a SKU that sells four units a day in one store. The numbers are too small. So the practical approach is to stop pretending each store is a standalone forecasting problem and start clustering stores that behave alike.
- Cluster stores by demand pattern, not geography. Two stores in different cities can sell the same mix because the same kind of people live in their radius. Group stores by what actually sells, then forecast the cluster and apply it down to the store. This borrows signal across thin data without flattening real local difference.
- Anchor to local history, adjust for local events. Last month in this store is a far better base than this month nationally. Layer on what is specific to that radius: a festival, a heatwave, a nearby office reopening, a competitor store going live next door.
- Forecast at the SKU-store-day grain for hero items, coarser for the long tail. You do not need daily store-level precision on the slow movers. Spend the modelling effort on the handful of SKUs per store that drive fill rate and revenue.
- Treat new stores as cluster members from day one. A store with no history is not a blank slate. It is most like the existing stores serving similar radii, so seed its forecast from its cluster and correct as real data arrives.
The point of all of this is not statistical elegance. It is to get the order quantity for each store close enough that fill rate holds without burying that store in stock it cannot move before it expires or racks up holding fees. The tighter your replenishment cycle, the more forgiving the forecast can be, which is why forecasting and replenishment cadence have to be designed together rather than handed off between teams.
Spiky demand, multiplied by hundreds of stores
Quick commerce inherits all the spike problems of Indian marketplaces and then makes them local. A platform sale, a long weekend, a sudden downpour that pushes everyone to order in rather than step out. The spike is real, but it does not land evenly. It hits the stores serving the right radius and barely touches the others.
The discipline of separating steady-state baseline from event-driven demand, which we laid out for forecasting marketplace demand when it is spiky, carries straight over. What changes is that you now run that separation per cluster, because a Friday-night spike in alcohol-adjacent snacking shows up in one set of stores and a Sunday grocery top-up spike shows up in another. One national event forecast smears these into a single bump that is wrong everywhere it lands.
The mix is also shifting under you. Non-grocery categories like electronics, beauty, and small appliances have been growing faster than food on the major platforms, which means the spiky, considered-purchase demand patterns you used to ignore now sit inside your hero set in more stores than before. A cluster that was once pure grocery may now need a different forecast shape entirely.
Sequence stores so forecasting is even possible
None of this works if you are trying to forecast a thousand dark stores you launched all at once with no history and no operational depth in any of them. Forecasting quality is downstream of how deliberately you expanded. Brands that go deep in a few high-density cities before they go wide build the per-store history and the cluster patterns that make hyperlocal forecasting tractable. Brands that sprint across the map forecast everything badly at once.
This is why we are unromantic about which cities to launch quick commerce in first. Concentration is not just a marketing or unit-economics call. It is what gives your forecasting model enough local signal to keep fill rates high instead of guessing blind across a footprint too thin to learn from.
What changed recently
The biggest shift for brands is that the platform increasingly owns the forecast. Blinkit moved to an inventory-led, first-party model from September 2025, buying stock from brands, holding it under its own GSTIN, and selling as the legal seller. By the third quarter of FY26 it reported that roughly 90 percent of net order value came from its own inventory, a transition Blinkit itself framed as a route to better availability and fill rates, per Medianama. When the platform owns replenishment, your forecast does not stop mattering. It becomes the input you use to push allocation, argue stock cover, and contest the platform’s own demand planning store by store rather than accepting a citywide number.
The grid you forecast against is also getting bigger and faster. Blinkit has said it is targeting 3,000 dark stores by March 2027 while staying profitable, as reported by Business Standard, and Flipkart Minutes is moving to double its network toward roughly 1,500 stores by the end of 2026, leaning hard into tier-2 and tier-3 towns. More stores in newer, less-understood radii means more nodes with thin history, which is exactly where cluster-seeding earns its keep. Storyboard18 reports non-grocery categories growing well faster than food across the major platforms, which is the assortment-mix change feeding straight back into how your forecast clusters need to be drawn.
Make the dark store the unit of planning
The brands that win quick commerce stop thinking in national SKUs and start thinking in store-SKUs. Every forecast, every order, every fill-rate target is set at the store level and rolled up only for reporting, never for deciding. They cluster stores so thin data becomes usable, they protect fill rate on the items that matter per radius, and they accept that a perfect national number is worthless if it leaves individual stores dark. In an inventory-led world where the platform is doing its own forecasting, the brand with the sharper per-store view is the one that wins the allocation argument.
This is the operational core of what our Operations & Logistics Management team builds for quick commerce brands, working alongside Marketplace Performance and Data & Analytics because the per-store demand signal and the platform fill-rate penalties are two halves of the same problem. Forecast the postcode, not the country. Hold fill rate store by store. The aggregate will take care of itself once the stores do.