Methodology
How the dataset is built - sources, accuracy bands, what we don’t cover, and how to flag errors. Written so a careful reader can decide how much to trust it.
In one paragraph
We pull dark store coordinates and metadata from each platform’s public store-locator endpoints, dedupe by platform store ID and spatial proximity, enrich with reverse-geocoded city / area / sub-locality data via Ola Maps (with Mappls and Nominatim as fallbacks), classify cities into tiers, group stores into hyperlocal areas, and refresh the whole pipeline monthly with a public diff. Every record we publish is a real store the platform itself classifies as a fulfilment centre.
Data sources
Store location data is sourced from the public APIs that the three platforms’ consumer-facing applications use. We extract coordinates (latitude, longitude), platform-internal store IDs, and any available metadata such as store names and locality identifiers.
- Blinkit: store-locator endpoints exposed to the Blinkit consumer app and to its picker / delivery onboarding surface.
- Zepto: coverage and store-resolution endpoints used by the Zepto app to determine serviceability.
- Swiggy Instamart: serviceability and store-resolution endpoints inside the Swiggy app, filtered to Instamart fulfilment locations.
- Flipkart Minutes: store-locator and serviceability information exposed to the Flipkart consumer app.
- BigBasket: store and serviceability information exposed to the BigBasket consumer app.
We compile only publicly observable store-locator information. We do not access any platform's internal or private data, we do not place orders to elicit responses, and we do not use authenticated or paywalled surfaces. Everything we collect is publicly accessible to any consumer of the platforms’ own apps.
How we identify a dark store
Not every location returned by a platform endpoint is a dark store. Some are pickup points, some are partner kirana stores, some are delivery rider hubs without inventory. We treat a location as a "dark store" only when three signals line up:
- 1. Platform classification. The platform’s own data classifies the location as a dark store / micro-fulfilment centre / dispatch warehouse - distinct from retail partner stores or pickup points.
- 2. Operating hours pattern. Dark stores typically run extended hours (often 24/7 or close to it) to support 10-minute delivery windows. Locations whose schedule looks like a regular retail storefront are excluded.
- 3. Address pattern. Dark stores are warehouse-style facilities - anonymous building numbers in residential or mixed-use zones, not high-street retail frontage. Locations whose address looks like a branded retail store are flagged for review.
Within a platform we dedupe by store ID. Across platforms we keep records separate even when two warehouses sit in the same building - they’re commercially distinct (separate teams, separate inventory, separate hiring). Within a platform, we collapse two records that share an ID or sit within ~50 metres of each other (typically the same store re-emitted with a slightly different coordinate).
Reverse geocoding
Raw coordinates are enriched with full address data using a three-tier geocoding pipeline. Each tier is tried in order; we fall through only if the higher-priority service returns empty, ambiguous, or low-quality results.
- Ola Maps (primary) - best accuracy and consistency for Indian addresses, including sub-locality data and Plus Codes.
- Mappls / MapmyIndia (fallback) - used when Ola Maps returns generic or empty locality data.
- Nominatim / OpenStreetMap (last resort) - open-source fallback with a 1-request-per-second rate limit and a custom User-Agent.
Successful geocoding results are cached. Stores within 500 metres of each other reuse the same area assignment to keep the neighbourhood-level grouping consistent. Failed lookups (all three services empty) are logged and flagged for manual review - those stores keep their coordinates but show no derived address.
Geocoding accuracy band
Coordinates are accurate enough for spatial analysis and neighbourhood grouping, but they’re not survey-grade. The accuracy distribution we measure across the dataset:
Measured, then moved for the free map
Exact: a measured pin
Approximate: placed by its service area
Area level
The August 2026 dataset (research portal)
In August 2026 we re-ran our national sweep with an improved method for dense urban areas, and cleaned up duplicate records from earlier sweeps. The result is a larger dataset: more stores observed, a small number of records removed. The higher count is better observation, not market growth, and should never be read as stores opening.
The accuracy figures above describe the free map's snapshot. Stores newly observed in August are located by service-area analysis, which is less precise, so in the research portal every store now carries an explicit precision label: exact (a measured pin), approximate (placed by its service area), or area-level (placed only by its area so far, which includes stores whose position has not yet been measured). A street address computed from an imprecise coordinate would be plausible and wrong, so we only show one when the store has an exact pin, or when the address comes from a record of the store's own premises that does not depend on our coordinate.
The free map continues to show the July snapshot until the expanded dataset has settled through a full monthly cycle.
Area grouping
Individual stores are grouped into areas based on their geocoded locality. An area represents a neighbourhood or commercial zone where one or more platforms operate dark stores - Mansarovar in Jaipur, Whitefield in Bangalore, Andheri West in Mumbai. Area grouping gives spatial context that single pin points don’t.
Where the geocoded locality is ambiguous (multiple "Sector 18" results within a city, for example), we use the city plus the sub-locality to disambiguate, and fall back to a coordinate-based cluster if the address signal is too weak.
City tier classification
Cities are classified into three tiers based on population, economic activity, and quick commerce penetration. The classification matters for analysis (worker pay scales, store density expectations, platform expansion patterns):
- Tier 1 metro - Delhi NCR (Delhi, Noida, Gurgaon, Ghaziabad, Faridabad), Mumbai, Bangalore, Hyderabad, Chennai, Kolkata, Pune.
- Tier 1 non-metro - Ahmedabad, Jaipur, Lucknow, Chandigarh, Kochi, Indore, and similar.
- Tier 2 - Every other city in the dataset where any tracked platform operates.
10-minute food, fashion, beauty and pet apps
Beside the seven grocery apps we count apps that deliver one kind of thing in minutes from their own kitchens and dark stores: Zepto Cafe (at least 281 cafes), Myntra M-Now (83 dark stores), Bistro by Blinkit (77 kitchens), Swish (71 kitchens), Supertails (44 dark stores), Nykaa Now (102 dark stores). We first counted them this month. Each kind has its own map: 10-minute food, fashion, beauty and pets.
A store counts when the app itself named it for a location in that month's read and it was live. We place each one from the app's own answers: its own coordinate, the road distance it reports to a point (walked down to the store), a fit to the distances it reports from many points, or the store's own map listing where the app's own check names that store. A store we could place only by the area it delivers to is marked approximate, and a pass shows it with a wider ring. Zepto Cafe's count is a floor: we count the cafes that run inside the Zepto dark stores we read, so a cafe anywhere else does not show.
Nykaa Now is placed differently. Its app names the store that serves each spot, so the count is the app's own, but it does not say where any store is. So we place each Nykaa Now dark store by the middle of the area it delivers to, and at the store itself only where its own map listing and Nykaa's check agree (10 of 102). Its map, its pages and its pass show each store by the area it delivers to, never at street level.
Slikk is on the fashion map with its count: its stores are placed as precisely, but it is in one city so far. We count Plazza, OZi and Peeko, and Zepto Pharmacy, but do not publish them yet: the first three are in one to four cities each, and most of Zepto Pharmacy's stores we could not place yet. Walk-in shops that deliver fast are never added to a dark-store count.
DMart Ready is DMart’s online grocery delivery. It delivers next day or in a slot, not in minutes, so it is counted on its own and never inside a quick-commerce total. We read DMart’s own sites as a guest, pincode by pincode: a store is DMart’s own online store for a set of pincodes (45 of them, delivering to 585 pincodes). DMart does not say which fulfilment centre fills which store, so a store sits on the map at the centre we matched it to; pickup points are at the positions DMart gives. Walk-in DMart stores do not deliver and are not counted.
What we DON’T cover
The boundary of the dataset matters as much as what’s in it. The public site explicitly excludes:
- Apps we count but do not publish yet. Zepto Pharmacy, until we can place most of its stores, and apps with only a few stores.
- Restaurant delivery (regular Swiggy and Zomato orders). Restaurants are not a dark-store model, so they are out of scope. 10-minute food apps that cook in their own kitchens are covered above.
- Pickup points and partner kirana stores. These appear in some platform endpoints but are not dark stores and are filtered out.
- Listings we can no longer detect. Listings are re-checked against public availability at each new dataset. A listing we repeatedly cannot detect may be removed at a subsequent refresh, and the change is logged in the changelog. We do not claim a specific store has closed — locations are best-of-our-knowledge and approximate.
- Salary or worker-level data. The map is about stores, not people. Per-platform pay ranges are discussed in our written reports but never tied to individual stores.
Data freshness and refresh cadence
Full data refresh: monthly, on the 1st. The current dataset has 7,388 stores across 526 cities and 3,869 areas. We aim to publish the diff (additions, removals, reclassifications) within 24 hours of the refresh; that lands on the changelog page.
- New stores typically appear in the next monthly refresh after they open (so up to a 30-day lag).
- Listings we can no longer detect in public availability may be removed at a subsequent refresh.
- Coordinates are re-checked each refresh; stores that move are re-geocoded.
Between refreshes, the public site is a snapshot. Use the
last_refreshed_at stamp on each page to judge how
current the picture is.
How to report an issue
Found a wrong location, a missing store, a closure we haven’t caught, or a misclassification? Please tell us. Use the contact form with subject "Data correction", or write directly to support@quickcommercemap.com.
A good correction includes:
- The platform (Blinkit / Zepto / Swiggy Instamart)
- The city or area you’re in
- The specific address or coordinate that’s wrong
- What you believe the correct state is (e.g. "this store closed in March 2026")
- (Optional) a screenshot or link showing the actual state
Limitations
The honest section. Things we can’t fully fix, and that you should factor into how much weight to put on the data:
- Coverage bias toward metros. The platforms themselves are densest in tier-1 metros, and our geocoding is most accurate there. Tier-2 city coverage is real but more variable - both because there are fewer stores and because address signals are sparser.
- Up-to-30-day lag on new stores. Stores that opened after the most recent monthly refresh won’t appear until the next one. Same holds for store moves within a city.
- Lag on removals. A store that quietly stops operating may still appear here until our periodic re-verification against public availability catches up — always verify before visiting.
- Platform endpoint changes. Platforms periodically change their API structure. When that happens we sometimes lose a refresh cycle while we adapt. The changelog records any month where coverage was incomplete.
- Sub-locality naming inconsistencies. Different geocoders disagree on whether "Andheri West" or "Andheri (W)" or "Andheri W" is the canonical name. We normalise but don’t always pick the most popular form.
- Transliteration variants. Areas with multiple common Romanisations (Bengaluru / Bangalore, Mumbai / Bombay) are normalised to a canonical form, which may not match what locals call the place.
- Snapshot, not stream. Data is point-in-time. Markets that change weekly look stable here for a month at a time.
Want the per-store data with all the caveats above documented in machine-readable form? See the data files. Want to see what changed in the most recent refresh? The changelog has it.
Want more data? We can send you all of India in one file, new data every month, older months, Amazon Now stores, or a custom list made for you. Tell us what you need and we will share the price.
QuickCommerceJobs.com
Looking for dark store jobs?