The kirana shop two lanes from my building has been there for longer than I have. The owner knows which brand of atta my neighbours buy, extends informal credit to half the street, and will send a packet of milk up at 10pm if you call.

I also have four grocery apps on my phone, two of which claim they'll deliver in ten minutes.

The interesting question isn't which one is morally better or which one is winning. It's narrower and more useful: for a given basket, on a given day, which one actually costs less? The answer turns out to depend far more on what you're buying than on where you're buying it.

Why online groceries are sometimes genuinely cheaper

Three real structural reasons, not marketing.

Scale on packaged goods. Large platforms buy branded staples — atta, oil, detergent, biscuits, packaged rice — in enormous volumes, often directly from manufacturers. A kirana buying through a distributor cannot match that cost base on those specific items.

Category loss leaders. Platforms deliberately price a handful of high-frequency items very low, because those are the products people mentally track and use to judge whether an app is cheap. Cooking oil, sugar, a specific atta brand. Everything else in the same order is priced normally, and the impression from the loss leaders carries the basket.

Bulk pack availability. Online you can buy the 5kg or 10kg pack easily; a small shop stocks what fits on its shelves. On per-kilo terms the larger pack is usually cheaper, and that difference is real if you'll genuinely use it before it spoils.

Why the kirana is sometimes much cheaper

And three reasons in the other direction, which get less attention.

Fresh produce. This is the big one. Vegetables and fruit bought locally — particularly from a vendor rather than a shop — are frequently well below app prices for equivalent quality, and you can see what you're getting. Online produce carries handling and wastage costs that have to be priced in somewhere.

Loose quantities. You can buy 300g of dal or one onion. Apps push standardised packs, so the "cheaper per kilo" pack is only cheaper if you needed a kilo. Buying more than you'll use is not a saving, it's just spending with a nice ratio.

No delivery fees, no minimums, no surge. The convenience charges on quick-commerce apps are small individually and meaningful monthly. Ten orders with a ₹35 combined delivery and handling charge is ₹350 a month that simply doesn't exist in the offline version.

The fees that quietly change the answer

This is where most people's mental accounting goes wrong, so it's worth listing what actually gets added to a quick-commerce basket:

A basket that looks ₹40 cheaper than the shop can easily arrive ₹30 more expensive. The fees aren't hidden exactly — they're just presented at the end, after the decision has been made, which is functionally similar.

The category-by-category reality

Rough guidance based on how these actually compare in practice:

Packaged staples (atta, rice, oil, sugar, dal in branded packs): online often wins, especially in larger pack sizes and on the platform's promoted items. This is the strongest case for ordering.

Cleaning and personal care (detergent, soap, shampoo, toothpaste): online usually wins, particularly on multipacks. These are also the items where the kirana's margin is thinnest, so the gap is real.

Fresh vegetables and fruit: local usually wins on price, and almost always wins on your ability to judge quality. This is the category where I'd suggest defaulting offline unless convenience genuinely matters that day.

Milk, bread, eggs, everyday top-ups: local wins on both price and speed once you account for fees. Ordering a ₹28 packet of milk with a ₹25 combined fee is an expensive packet of milk.

Snacks, beverages, ice cream: genuinely mixed, and heavily promotion-driven. Worth comparing each time; this is where multi-buy offers can be either excellent or meaningless.

Speciality items: online wins by default, because the shop doesn't stock them. No comparison to make.

How to compare without turning it into a project

You don't need to price every item. You need a reference basket.

Pick eight to ten things you buy most months — your atta, your oil, your detergent, your tea, your biscuits. Note what the shop charges for each. That takes one trip. Then, when you're building an online order, you'll instantly know whether the app's prices on your actual regulars are better or worse, and you won't be fooled by a low price on something you never buy.

Recheck it every few months. Both sides move: the shop adjusts, and app pricing changes considerably as platforms fight for market share in a given area.

The subscription and coupon layer

Most grocery platforms sell a membership that waives delivery fees and adds discounts. Whether it's worth it is simple arithmetic: divide the annual fee by the fees you'd otherwise pay per order, and you get the number of orders at which it breaks even. If you order weekly, it usually pays. If you order twice a month for top-ups, it usually doesn't.

Be careful of the behavioural side though. A membership that makes delivery feel free tends to increase order frequency, and more small orders is exactly the pattern where quick commerce is most expensive relative to walking to the shop.

The ten-minute delivery question

Quick commerce deserves its own note, because it's a genuinely different product from a scheduled grocery order and gets compared to the wrong thing.

Ten-minute delivery is optimised for immediacy, which means smaller dark stores, narrower ranges, and a cost structure that has to be recovered somewhere. In practice that shows up as slightly higher unit prices on many items, a limited selection of pack sizes — often only the small ones — and fees that land hardest on exactly the small orders the format encourages.

None of that makes it a bad deal. Paying ₹30 in fees to not walk out in the rain at 9pm is a perfectly rational trade, and for people with young children or long working hours it's an obviously good one. The mistake is only in the accounting: treating a ten-minute order as if it were the cheap option, and then being puzzled by the monthly total.

The pattern that costs the most is frequent small orders — four ₹300 baskets a week, each with its own fees. The same items ordered once, or bought on one walk to the shop, cost meaningfully less. If you want the convenience without the leak, batch it: one planned online order for staples, quick commerce reserved for genuine emergencies rather than mild inconvenience.

The part that isn't about money

Since this is a cost article, I'll keep this short — but it would be dishonest to leave out.

The kirana provides things that don't appear in a price comparison: informal credit when the month is tight, single-item purchases, delivery of one packet without a fee, knowledge of what you buy, and a relationship that has occasionally been useful in ways I couldn't have arranged with an app. Some of that has genuine economic value even when the per-item price is higher.

Meanwhile the apps provide time, which is not a small thing for people working long hours, and price transparency, which the shop by design does not.

Most households end up using both, and I'd argue that's the correct answer rather than a compromise: staples and household goods in a planned monthly online order where the pricing genuinely favours it, fresh produce and top-ups locally where it doesn't.

Five rules that keep the online half honest

  1. Always look at the final total including fees, not the cart subtotal. That's the number to compare.
  2. Compare per kilo or per litre, never per pack. Pack sizes differ between platforms precisely because it makes comparison harder.
  3. Order in fewer, larger batches. Fees are per order, so four ₹500 orders cost meaningfully more than one ₹2,000 order.
  4. Ignore multi-buy offers on anything perishable unless you have a plan for the second one. Waste is the most expensive discount there is.
  5. Don't add items to cross a free-delivery threshold. Spending ₹180 to save ₹40 is a ₹140 loss, however satisfying the "FREE DELIVERY" badge feels.

Where comparison tools fit — and where they don't

Worth being straightforward here. Cross-store price comparison works beautifully for products with unambiguous identities — a specific 5kg atta pack from a specific brand exists identically across platforms, and comparing it is easy and useful. 7Compare covers exactly that kind of packaged grocery item across the stores it checks, alongside everything else.

It works far less well for loose produce, and not at all for your neighbourhood shop, which has no listing, no API and no interest in being compared. That part stays manual, and the reference-basket habit above is the practical substitute.

So the honest summary is: use comparison for the packaged, branded, standardised half of your grocery spending, where it can save real money on every order. Use your own eyes and your own shop for the fresh half. And count the fees, every single time — that one habit alone fixes most of the miscalculation.