Skip to content
PRS India

Mobile-App

How to Start a 10-Minute Grocery Delivery Business

A founder's playbook for launching a 10-minute grocery delivery venture in India — from dark-store economics and compliance to picking the right technology partner.

Aditi

Written by Aditi

Fact checked by the PRS India engineering team

23 min read

Written from production. Our articles draw on products we run live and the client work behind them, and are revised as the systems they describe evolve.

How to Start a 10-Minute Grocery Delivery Business

India’s 10-minute grocery delivery market has already proven itself. Blinkit, Zepto and Swiggy Instamart have trained tens of millions of urban shoppers to expect milk, medicine and last-minute party supplies at their door in minutes, and they have built billion-dollar valuations doing exactly that.

You don’t need Blinkit’s balance sheet to enter this category. The model is fundamentally local: a single dark store runs on its own economics, serving a two- to three-kilometre radius, independent of what a competitor is doing three localities away. That makes quick commerce one of the few high-growth e-commerce categories where a well-run, single-city operator can compete on service quality and local relationships rather than on funding.

This guide walks through what it actually takes to launch: the operational groundwork, the compliance you can’t skip, realistic costs, and the technology. For the technology half we show QuickKart, our ready-made quick commerce platform, screen by screen: the customer app, the rider app, the dark-store dashboard and the admin panel, all with real screenshots from the live demo instance rather than mock-ups.

QuickKart customer app home screen, live order tracking screen and rider app delivery screen side by side
Left to right: the customer app home for a Noida pincode, the eight-stage order tracker, and the rider’s delivery card for the same order.

How the 10-minute grocery model works

Quick commerce is not a smaller version of a supermarket, and it isn’t e-commerce with a faster courier bolted on. It runs on a different unit-economics model, built around three things: micro-warehouses, tight delivery radii and order frequency.

A dark store is a small, closed-to-walk-in warehouse, typically 1,000 to 3,000 square feet, stocked with the 1,500 to 3,000 fastest-moving SKUs across groceries, packaged food, personal care and household essentials. It sits inside the neighbourhood it serves, not on a highway or in an industrial zone, because the whole model depends on a rider reaching any customer in that zone within minutes. The location is chosen for delivery reach, not for cheap rent.

Margins per order are thin, often thinner than a kirana store once you account for delivery cost, packaging and the fee waivers used to win first-time customers. What makes the model work is repeat frequency, because the friction of ordering is close to zero. A supermarket shopper buys one large basket roughly once a month; a quick commerce customer buys many small baskets, several times a week, to the same households. That volume, not the margin on any single order, is what makes a dark store profitable, and it is why the location and delivery-radius decisions matter more here than in almost any other retail format.

For the feature-by-feature build view of the same problem, see how to set up a quick commerce app like Blinkit, Zepto and Instamart.

What you need before the first order: operations

Before any app enters the picture, quick commerce is an operations business. Get these right and the technology has something solid to run on:

  • A dark-store location per zone. A compact, well-connected space (ideally under 3,000 sq ft) inside the 2-3 km radius you intend to serve, with easy two-wheeler access and room for basic cold storage.
  • Initial inventory sourcing. Direct tie-ups with local distributors, FMCG stockists and wholesale markets for your first 1,500-2,000 SKUs, weighted toward high-frequency categories: dairy, produce, snacks and household essentials.
  • Delivery riders. A trained rider base per store, sized to your expected peak-hour order volume, with clear SOPs for picking, packing and handover time targets.
  • Local marketing and customer acquisition. Hyperlocal campaigns (society WhatsApp groups, local influencers, launch discounts) that build a repeat-ordering habit in your first few pincodes before you expand.
  • Compliance. An FSSAI licence before you sell a single packaged or fresh food item, and Legal Metrology-compliant labelling (MRP, net quantity, manufacturer details) on every SKU you stock.

The technology: three apps and an admin panel, ready to brand

The technology layer is where most first-time founders either burn months of runway building the wrong thing, or launch with a generic delivery app that cannot do what minute-level delivery requires: serviceability by pincode, a live delivery promise, rider assignment, and a bill that discloses every charge before the shopper pays.

QuickKart ships all of it as one platform, sold as white-label source code rather than a SaaS subscription. Here is what is in the box:

iOS + AndroidCustomer appFlutter. Pincode and GPS serviceability, catalogue, search, cart, coupons, itemised checkout, order tracking with a handover code. Live on the App Store.
iOS + AndroidRider appFlutter. Duty toggle, assigned deliveries with a promise countdown, Google Maps navigation, cash collection, handover code, daily and weekly earnings. Live on the App Store.
Android + webDark-store dashboardA web dashboard at /store plus an Android app for the floor: live order board, rider assignment, assortment and prices, pause switch, delivery windows.
WebAdmin panelNext.js. Dark stores with geofences and pincodes, the promise engine, fee rules, riders, catalogue, orders, customers, promotions, reports and settings.
WebCustomer storefrontA Next.js web shop on the same catalogue, with the pincode chooser, cart, checkout, order history and the legal pages the app stores require.
APINestJS backendOne REST API on Prisma and PostgreSQL behind every surface: serviceability, ETA, fees, orders, riders, stock reservations and push notifications.

Try it on your own phone

Both mobile apps are published on the App Store and point at our demo server, and the Android builds are on the APK download page. Install the customer app, enter the demo pincode below to reach the Noida Sector 62 demo dark store, sign up with an email address, and place a cash-on-delivery test order. The web storefront is at quick.prsindia.in.

Demo pincode201301
Demo dark storeNoida Sector 62
Test paymentCash on delivery

Rider and store-manager accounts are issued by the admin, not by self-signup, so the rider app and the dashboard need a login from us. Ask for a walkthrough and we will set one up and drive an order through with you.

The customer app: from pincode to doorstep

The customer app opens on a location gate. It resolves the shopper’s GPS position or a typed pincode against every live dark store’s geofence and pincode list, and answers with the store that will serve them and the delivery promise for that store right now. The “8 min” in the header of the home screen is that answer; the app never invents an ETA, and a closed or paused store says so instead of quoting one.

What the shopper can do, screen by screen:

  • Browse before signing in. The catalogue, search and cart work as a guest; the guest cart merges into the account on sign-in.
  • Find products fast. Live search suggestions, recent searches, category pages with facet filters, and sorting by relevance, price, newest or rating.
  • See the whole product. Image gallery, variants, price against MRP with the discount badge, a declarations panel for pack size and legal details, customer reviews and a questions-and-answers thread. Out-of-stock variants are disabled rather than hidden.
  • Build the basket. Quantity steppers, saved items, coupon entry with a list of the coupons available to that cart, a tip for the rider and an optional donation line, and a progress bar toward free delivery.
  • Choose when. Express delivery is the default. Where the operator has switched on delivery windows, the shopper can ask for a later window instead, and the request travels to the store with the order.
  • Pay with a bill they can read. Item total, savings on MRP, delivery fee, handling charge, cash-on-delivery charge and GST are separate labelled lines. The apps ship with cash on delivery and bank transfer as the payment methods; the online-gateway integration is covered below.
  • Keep addresses. An address book with Home and Work labels, a default address, and a six-digit pincode check that refuses an unserviceable address before it is saved.
  • Follow the order. Order history, one-tap reorder, cancellation while the store still allows it, and a live tracker with the ETA, an eight-stage timeline, a status message from the store, the handover code to read out at the door, and a map of the rider’s position once a rider is on the way.
  • Manage the account. Edit profile, push notifications for order status changes, a help form that lands in the admin panel’s contact queue, store-credit and reward-point balances where the operator uses them, the privacy and terms pages, and in-app account deletion, which the app stores now require.

The rider app: assigned, picked up, arriving, delivered

Riders do not sign themselves up. The admin creates each rider account, sets the password and puts the rider on one or more dark-store rosters, so only people you have onboarded ever see an order. The app is deliberately small: a duty switch, today’s deliveries, one delivery at a time, and earnings.

  • Go on and off duty. The Online switch tells the store which riders can take work. Going offline stops new assignments without dropping the deliveries already in hand.
  • See the work as it is assigned. The store assigns a packed order to a rider from its board; the rider’s list refreshes itself while the app is open and online, with a countdown to each order’s promised time that turns to “running late” once it passes.
  • Get there. “Navigate to store” and “Navigate to customer” open Google Maps with the destination filled in, and the call button dials the customer.
  • Move the order along. Picked up, Arriving and Delivered are three taps, in that order, and the server refuses any step out of sequence.
  • Hand over safely. When the operator has the handover code switched on, Delivered needs the four-digit code the customer sees in their tracker; five wrong attempts lock the order. For cash orders the rider also confirms the amount was collected.
  • Share position. While a delivery is in progress the app sends the rider’s location to the server, which is what the customer’s tracking map shows.
  • See the money. Today’s delivery fees and customer tips, trips and hours online, and a seven-day chart.

The dark-store dashboard and Store app: running the floor

Every dark store gets its own operator login, scoped to that one store. The same tools come as a web dashboard for the desk and as an Android app for the floor: a live order board, rider assignment, the assortment with prices and stock, delivery windows, and a pause switch for the moments when the store simply cannot take more.

Dark-store dashboard Today tab with a Pause store button, health tiles for quoting ETA, open orders, past promise, out of stock and free riders, and the live orders board below
Today: the store’s live promise, open and late orders, out-of-stock count and free riders, with the order board underneath.
Live orders board with columns for Placed, Accepted, Picking, Packed and Assigned, order cards with Move to next state buttons and an Assign rider button on a packed order
Orders: one column per state. Move a card forward, assign a rider on Packed, and late cards turn red.
Assortment grid listing products with price, MRP, shopper pays, on hand, available, listed toggle, rack and max per order columns, with search and listing filters
Assortment: price, MRP, on-hand stock, listed on or off, rack location and max per order, edited in bulk.
  • Live order board. Placed, Accepted, Picking, Packed, Assigned, Picked up and Arriving as columns, sorted by promise time. Each card shows its age and minutes to promise; it turns amber with two minutes left and red once the promise has passed. The board refreshes itself every fifteen seconds.
  • Rider assignment. On a Packed order, pick from the riders who are on shift and active, ordered by who is carrying least. Reassign or unassign if plans change. The server refuses a rider who is offline or deactivated.
  • Assortment and prices. Every SKU the store carries with price, MRP, what the shopper pays, on-hand and available stock, a listed switch, rack location and a per-order cap. Edits are staged and saved in one transaction; a price above MRP is refused.
  • Pause with a reason. Weather, overloaded, stock-out, no riders, maintenance or other, with an optional note and an automatic resume time. A paused store stops quoting to new shoppers immediately; orders already placed are unaffected.
  • Delivery windows. The Android app shows the day’s scheduled windows with bookings against capacity.

The admin panel: every dark store from one screen

The admin panel is where the operator builds the network: dark stores and their geofences, the promise engine, fee rules, riders, the catalogue and everything a marketplace back office needs around it. The screenshots below are from the demo instance.

Admin dashboard with a needs-attention queue, gross merchandise value tiles for today, last 7 days, last 30 days and all time, a revenue chart and order counts by status
Dashboard: what needs attention, gross merchandise value, revenue over time, and orders by status.
Dark stores list showing seven stores with state, hours, geofence and pincode coverage, prep time and radius, and links to each store's assortment
Dark stores: each with its own hours, geofence, pincodes, prep time and delivery radius.
Dark store detail for QuickKart Store Noida Sector 62 with a Pause store button, live health tiles and a How that ETA is reached breakdown of prep time, queue, travel, rider wait and buffer adding up to a 16 minute quote
Store health: the live quote, and exactly how the promise engine reached it.
Admin live orders board for a selected store with a Check for SLA breaches button, live order and past promise counts, and state columns
Live orders: the same board as the store, for any store, plus an SLA-breach check.
Riders roster listing each rider with the stores they serve, active status, shift state and how many deliveries they are carrying
Riders: who serves which stores, who is on shift, and what each is carrying.
New rider form with name, email, phone and password fields, checkboxes for each dark store roster and an Active toggle
New rider: create the account, set the password, choose the rosters.
Fees and surge page listing four fee rules for distance-tiered delivery, handling, small order and evening peak surge, each with its calculation and bill label, and a preview calculator below
Fees & surge: delivery, handling, small-cart and surge rules, and a calculator to preview a bill.
Delivery windows page with a generator form for store, date, window length, capacity per window and window fee
Delivery windows: generate a day’s scheduled slots per store with capacity and an optional window fee.
Serviceability tester with latitude, longitude and postcode inputs and a table of postcodes shoppers asked for that were not served in the last 30 days
Serviceability tester: resolve any address the way the app does, and see the pincodes you turned away.
Per-store assortment grid in the admin panel with Export CSV and Import CSV buttons and columns for price, MRP, shopper pays, on hand, available, listed and rack
Store assortment: the same grid as the store dashboard, with CSV export and import.
Products list with search and filters by status, type, category and brand, showing product names, slugs, live status, price and stock
Catalogue: products with variants, images, attributes, pricing and a moderation queue.
Orders list with order numbers, customer, status, payment state, item counts, totals and placed dates
Orders: every order across the marketplace with its payment and fulfilment state.

Beyond the quick-commerce screens, the panel carries a full marketplace back office: categories as a drag-to-reorder tree, customers with groups, suspension, wallet adjustments and login history, cart and catalogue price rules with coupon generation, banners, sliders and CMS pages, newsletter campaigns and email templates, search synonyms and redirects, sitemap and SEO audit, inventory sources with adjustments, transfers and a movement log, tax classes, rates and rules with the India GST extension, sales, orders, customers, products, inventory, tax and coupon reports with CSV export, payment methods, staff users, locales, currencies and system settings.

Serviceability, the promise engine and disclosed fees

Three pieces of the backend do most of the work that makes a quick commerce app feel like one.

Serviceability. Each dark store owns a polygon geofence drawn on the map in the admin panel, a list of pincodes, opening hours, a prep time, a capacity per slot and a maximum delivery radius. A shopper’s coordinates or pincode are resolved against all of that, and against whether the store is open or paused right now, before the app shows a single price. Every lookup is logged, so the serviceability tester can show you which pincodes asked and were refused in the last thirty days: your expansion map, drawn by demand.

The promise engine. The ETA a shopper sees is built term by term from that store’s prep time, its current queue of open orders, travel distance at a configured average rider speed, a rider-wait term that only applies when every rider is busy, and a small buffer so the promise is beatable. The store detail page shows the breakdown live, so when a quote drifts to sixteen minutes you can see exactly which term moved. Nothing in the product hardcodes “10 minutes”.

The fee engine. Delivery, handling, surge, small-cart and cash-on-delivery charges are rules, not code: flat, percentage, distance-tiered or subtotal-tiered, platform-wide or per store, with a time window for surge. Each active rule becomes one labelled line on the bill, and the label the operator types is the exact wording the shopper reads before paying. That structure is what keeps a bill aligned with India’s Consumer Protection (E-Commerce) Rules on fee disclosure, and it is why there is no “other charges” line anywhere in the app.

Two more guards sit around the order itself: a handover code, minted per order and shown in the customer’s tracker, that the rider must enter before an order can be marked delivered (switchable in settings), and breach flags that mark any open order past its promised time in red on every board.

Built on a modern stack: what ships wired, and what you connect

The three mobile apps are Flutter. The storefront and admin panel are Next.js. The API is NestJS on Prisma and PostgreSQL, with Redis for caching and queues. Quick commerce itself is a platform module on top of a general marketplace core, so serviceability, the fee engine, delivery windows and OTP sign-in each switch on and off from the admin panel without a redeploy. You receive the full source code for every part under a one-time licence and host it yourself.

Because it is your deployment, a few integrations are yours to connect, and it is worth being clear about which:

  • Payments. Cash on delivery works out of the box, including the COD surcharge rule. Bank transfer is built in with a receipt-approval queue for the admin. Razorpay is integrated in the backend and the web storefront and switches on with your keys; the mobile apps’ checkout ships with cash on delivery and bank transfer.
  • Maps. The geofence editor in the admin panel and the rider map in the customer tracker use Ola Maps and need your Ola Maps key. Rider navigation opens Google Maps on the phone and needs nothing.
  • Sign-in. Email and password work immediately. Phone OTP sign-in is built into the customer app and the API with rate limits per phone and per IP; connect the SMS gateway of your choice to send the codes.
  • Notifications. Order-status push notifications to customers go through Firebase Cloud Messaging with your Firebase project. Transactional email needs your SMTP or email provider.

We list these plainly because a founder who discovers a missing gateway key in week one is fine, and one who discovers it the night before launch is not. Everything above is a configuration step, not a build.

Realistic costs and timeline to launch

Every market and city tier prices differently, so treat the numbers below as illustrative ranges to plan against, not quotes:

  • Dark-store setup (per store). Lease deposit, racking, cold storage and basic renovation: illustrative range ₹8-20 lakh.
  • Initial inventory. First stock fill across 1,500+ SKUs: illustrative range ₹10-25 lakh per store.
  • Technology. Ready-made platform source code versus custom development: illustrative range ₹3-15 lakh one-time for a ready-made platform, versus ₹40 lakh-1 crore-plus and 6-12 months for a custom build.
  • Marketing and launch. Hyperlocal acquisition across your first pincodes: illustrative range ₹3-8 lakh for a launch quarter.

On a realistic timeline, the operational groundwork (securing a store, locking first inventory tie-ups, hiring riders, clearing FSSAI and Legal Metrology paperwork) takes most founders 6-10 weeks. The technology timeline is the one variable entirely within your control: build from scratch and you are looking at months of engineering before your first test order; license a ready-made platform and that same step shrinks to configuring stores, fees and branding.

Your edge in quick commerce is operational: the dark-store location you have secured, the distributor relationships you have built, the neighbourhood you understand better than any outside investor ever will. None of that edge comes from writing checkout code, and every week spent doing so is a week a local competitor could be taking your first customers. If you would like to see the whole platform running before you commit, get in touch for a walkthrough of the customer app, rider app, store dashboard and admin panel.

Frequently asked questions

How much capital do you realistically need to start a 10-minute grocery delivery business?

For a single dark store covering setup, initial inventory, technology and a launch quarter of marketing, plan for an illustrative range of roughly ₹25-60 lakh, depending on city tier and store size. Choosing a ready-made platform like QuickKart over custom development is the single biggest lever for keeping that number toward the lower end, since it removes months of engineering cost.

Do you need an FSSAI license to run a quick commerce grocery business?

Yes. Any business selling packaged or fresh food, which is most of a quick commerce SKU list, requires an FSSAI licence before it can legally sell those items, along with Legal Metrology-compliant labelling showing MRP, net quantity and manufacturer details on every product. This is not optional paperwork to add later; build it into your pre-launch checklist alongside store and inventory setup.

Can you start in one neighborhood and expand later?

Yes, and it is the recommended approach. The dark-store model is built around a tight 2-3 km delivery radius, so a single store can prove out your operations, inventory mix and local demand before you commit capital to a second location. QuickKart supports any number of dark stores from one admin panel, each with its own geofence, pincodes, hours, prep time, assortment and prices, so expansion is a new store record and a rider roster rather than a rebuild.

How long does it take to go from decision to first delivery?

With operations and technology running in parallel, most founders can go from decision to first live delivery in 8-12 weeks. The operational timeline (store lease, inventory tie-ups, rider hiring, FSSAI approval) is usually the longer pole. Licensing a ready-made platform instead of building custom software removes the technology bottleneck almost entirely, since the apps and admin panel are configured and branded rather than built.

Can I try QuickKart before buying?

Yes. The customer app and the rider app are live on the App Store and connected to our demo server, and the Android builds are on the APK download page at quick.prsindia.in/mobile-app. Enter pincode 201301 to reach the Noida Sector 62 demo dark store, sign up with an email address and place a cash-on-delivery test order. Rider and store-manager logins are issued by the admin, so ask us for a walkthrough to see the rider app, the store dashboard and the admin panel with a live order.

Do I get the full source code?

Yes. QuickKart is sold as a one-time source-code licence, not a subscription: the customer app, rider app and store app in Flutter, the Next.js storefront and admin panel, and the NestJS API. You host it yourself, brand it as your own, and pay no per-order platform fee.

Which payment methods do the apps support?

The mobile apps ship with cash on delivery, including a configurable COD charge, and bank transfer with an admin receipt-approval queue. Razorpay is integrated in the backend and the web storefront and is enabled by adding your Razorpay keys.

How is the delivery time promise calculated?

Per store, from live data: the store’s prep time, its current queue of open orders, travel distance at a configured average rider speed, a rider-wait term that applies only when every rider is busy, and a small buffer. The admin panel shows the breakdown for each store, and the customer app shows the resulting ETA; nothing in the platform hardcodes a fixed number of minutes.

Related reading

Aditi

Written by

Aditi

Building software at PRS India.