Data story · 2026

How processed is India's grocery shelf?

Bhav already knew what 51,146 grocery products cost across six shops. It did not know what they were. A language model read every product name overnight and gave each an aisle, a NOVA processing level and a veg or non-veg mark, then the labels were joined to a week of real prices.

Bhav Shelf Atlas on screen
51,146
products labelled
94%
two models agree on ultra-processed
2.02M
price readings joined
Built with
PythonPostgreSQLOllamaCanvasCaddy

Labels from names, and how far to trust them

A model sees only the product name, never the ingredient list, so a NOVA level here is an informed reading, not a lab result. To put a number on that, a second and larger model labelled a 3,076-product sample on its own. The two agree on whether a product is ultra-processed 94% of the time, on the exact NOVA level 86%, on the aisle 87% and on the veg mark 98%. The page states those figures next to the charts.

The same product, two shops

The markup comparison only works because Bhav already resolves listings to one product key: same brand, variant and pack size, however each shop names it. That makes it possible to divide a Blinkit price by a DMart price for the identical item rather than comparing averages of different baskets.

Built in one night on a spare allowance

The Ollama plan's weekly allowance was about to reset unused. Labelling took 1,277 calls with no failures, and a timer was set to stop every job before the reset so none of it could spill into the next week.