Methodology

How each number here is made

We read the public product pages of Blinkit, Zepto, Swiggy Instamart, BigBasket, Flipkart Minutes, Amazon Now and JioMart, store by store at each store’s own delivery area, and we keep everything we read. Every figure in Shelf is worked out from that. This page sets out the rules: if a figure on a screen cannot be traced to a rule here, it should not be on the screen.

One word to know first. A read is one round of an app’s stores, taken over a few days and always shown with its dates. Within a read we may look at the same shelf more than once, and a rate such as “in stock” is a share of those looks. The screens count both as reads, so a line such as “20 reads over 5 stores” is counting looks.

Three rules we do not break

  1. 01

    We say you are missing from a store only where we read that store’s whole category shelf and did not find you.

  2. 02

    Every rate is printed with the counts behind it.

  3. 03

    On Zepto, Swiggy Instamart and Flipkart Minutes we never say a product is missing.

In stock at read, not a daily rate

01

In one read we look at a shelf a few times. The share of those looks that found a product on sale is what we publish, and we call it in stock at read. Two looks in a day cannot carry a daily percentage: on a single day the margin of error is close to 49 points either way, and nobody should act on that. A 7-day figure needs at least 4 reads across a week, and a 30-day figure at least 20. Until a rate has that behind it, the screen says "not enough reads yet" and prints the counts it has.

Each look falls in a morning window (05:00 to 13:59 IST) or an evening one (14:00 to 04:59). When a read holds more evening windows than morning ones, a morning against evening split is two counts and no pattern, and the screen says so.

The notes a screen prints for this

  • Point in time. This is the rate at the moments we looked, and not a daily rate. Two looks in a day cannot carry a daily percentage.
  • Windows uneven. This read has more evening windows than morning ones, so a morning against evening split is two counts and no pattern.
  • Stock, not demand. A brand out of stock more often than the leaders may be selling faster, or may not be refilled in time. The shelf cannot tell which.
  • Stock not stated. This app does not state stock for what it lists, so in stock and out of stock are blank here, not zero.
  • Only what it can sell. This app lists only what it can deliver now, so it shows no out-of-stock product and no out-of-stock count is given.
  • A newer read. This app’s stores are shown from its newest read, newer than the read the other figures here stand on.
  • A state, not units. In stock is the state the app showed at a read, never a count of units or of sales.
  • Out since first seen out. A product’s day is the first read that saw it out of stock, and out for a week or more means every read of the store since then saw it out. Between two reads it may have been back in stock for a while.

Terms on the screens

in stock at read
Of the times we looked in this read, the share that found the item buyable. It is the rate at that moment, not a fill rate and not a monthly figure.Withheld below 20 reads over 5 stores. Compare it with a seller hub fill rate only knowing they are different measurements: this counts what a shopper could see and buy at the moments we looked.
out of stock at the last read
Listings whose most recent read said out of stock; inside one read of the apps they may be days apart.
not enough reads yet
We withhold a rate below 20 reads over 5 stores and print what we have instead of a number we cannot stand behind.A 7-day rate needs 4 reads within 7 days, and a 30-day rate needs 20. These fill in as the reads arrive.
read
One reading of an app’s stores, start to finish. Every number is from one read.
morning or evening window
A reading window: 05:00 to 13:59 IST is morning, 14:00 to 04:59 is evening.
hatched
The hatch means the number cannot be known, not that it is zero.
stockout
A listing that was in stock at one read and out of stock at the next.
restock
A listing that was out of stock at one read and in stock at the next.
history we have
How far back your record goes, counted back from today over the reads we have. Nothing is filled in between reads.

Every figure says what it is counted over

02

We do not print a percentage without the count behind it. Every figure carries the stores we read out of the stores on our list, the shelves we read out of the shelves we set out to read, how many of those were read to the end, and how many attempts failed and why. The line under a figure prints these. An exported file also carries a reference for the exact set of data it came from. Quote it when you ask for a correction.

Terms on the screens

share of stores
Stores where we saw you divided by stores where your categories were read, on one app.
reads
One look at one product in one store. Every rate says how many it stands on.
of
Every number is printed as N of M. M is what we actually read, never what exists.
read to the end, of read
Stores read to the end divided by stores where your categories were read: the share of the shelf on which an absence can be claimed.
depth of distribution
Stores carrying this product divided by stores where your categories were read, on one app.
reference
The exact set of figures a screen or a file came from. Quote it if you write to us about a number.
read reference
The read of the apps these figures came from.
read window
The first and the last moment of the read behind these figures.
stores read
Stores where we got a shelf back this read. Counted for a brand, they are the stores where a shelf of its own categories came back, the base of its shares; counted for an app (Market), every store where any shelf came back, so the app’s figure is the larger.
shelves asked for
Category lists we asked a store for in this read, out of the lists planned for it. Under nine in ten means the app was still being read when the figures were made.
stores on our list
The stores we set out to read this time, whether or not an answer came back.
stores where you were seen
Stores where at least one of your products was on the shelf at a read.
export
An Excel or CSV of any table, with its reference and every store id, so a number can be traced after it leaves. Files are counted: a plan that includes them allows a stated number of rows a month.
your list
Products you chose to keep in front of you. A product on your list is followed on every app it is matched on.

A failed attempt is never an empty shelf

03

Sometimes an app does not answer: it asks for a check, refuses, sends an empty page or takes too long. We record that as a failed attempt, with its reason. A failed attempt is left out of every count, and is never used as a sign that a product is missing.

Read to the end

04

A shelf counts as "read to the end" only where the read carries its own proof. On Blinkit and BigBasket a list states how many products it holds, and the shelf counts when we collected that many. A Blinkit list that states no number counts only when it said there was no more and held fewer than 170 products, because the app cuts a list near 200 however long the category is. A BigBasket list that states no number does not count. On Zepto no shelf counts (see below). We tested this rule against the data: where a shelf really was read to the end, 3 to 4% of its listings were not seen again two weeks later; where it only looked that way, 9 to 27% were not, because the "lost" products had never been looked at. Only a shelf read to the end lets us say "if the product were listed here, we would have seen it".

Terms on the screens

read to the end
We read the whole category list in that store, so a product that is not on it is genuinely absent there at that read.A shelf counts as read to the end only where the read itself carries the proof. On Blinkit and BigBasket a list states how many products it holds, and the shelf counts when we collected that many; a Blinkit list that states none counts only when it said there was no more and held fewer than 170 products. Swiggy Instamart shows a changing part of a category, a Flipkart Minutes list is never read to its end, and neither way of reading Zepto shows a whole shelf, so none of the three ever counts.

Missing from a store needs a shelf read to the end

05

We say a brand is missing from a store only where a shelf of its category was read to the end in that store. Where a list was cut short, a second page was refused or the app showed only part of the shelf, we read the store and cannot speak for it: it is drawn as "not proven either way". This never applies on Zepto, Swiggy Instamart or Flipkart Minutes, where no shelf can be read to the end.

The notes a screen prints for this

  • Read to the end. A store counts as a gap only where a shelf of this brand’s category was read to the end. Zepto, Swiggy Instamart and Flipkart Minutes never qualify.

Zepto: neither way of reading shows a whole shelf

06

We read Zepto two ways, and neither shows a whole shelf. A category page shows part of one: on pages that ended before the limit, asking stores directly found that about three in five of their listings were ones the pages had not shown. Asking a store directly works only for products whose id we can work out; where a store lists the same product under one of the app’s random ids, it answers with nothing. So no store on Zepto is counted as one where you are missing, and no listing as lost. What we did read there (where a product is listed, its price and its stock) is shown as read, and every count of it is "at least".

The notes a screen prints for this

  • No whole shelf. On Zepto no reading shows a whole shelf: a category page shows a part of it, and the store lookup cannot see a product a store lists under one of the app’s random ids. So no store is counted as a gap on Zepto and no listing as lost. Presence, price and stock are as read, and every count of presence is a minimum.

Zepto: what "listed" covers

07

Zepto’s category pages show at most 32 products of a sub-category, so we also ask each store directly about every product we can reach that way, and the store answers with every one of them it lists, in stock or not. About half of the listings stores returned were in stock and half were not; most of the second kind never appear on a category page. Where a page and a direct answer covered the same product in the same store, they agreed on its stock 93 times in 100. So Zepto shows far more listings, and a lower share in stock, than its category pages alone would. Both are what the app answered. We do not compare either figure with another app.

The notes a screen prints for this

  • Wider read. Zepto is also read by a store lookup, which returns every product a store lists, in stock or not. About half of what a store lists is out of stock at a read, most of it products a category page does not show. So Zepto’s listings and its share in stock cover far more than before, and are not set against its earlier reads or against another app.

Looked for, not found

08

Each read is compared with the previous one. A product that a store listed at the previous read, and that this read did not see, is "looked for, not found" only where its shelf was read to the end in that store this time, with products on it. Anything less is a listing we did not see, and it is not counted anywhere. One read is not enough to call a product delisted: it can come back, or be on another shelf we did not reach. It is never said on Zepto, Swiggy Instamart or Flipkart Minutes.

Terms on the screens

looked for, not found
Listed in that store at the previous read. At this read its shelf was read to the end there, and the product was not on it. One read is not enough to call it delisted: a product can come back, or be on another shelf we did not reach. Never said on Zepto, Swiggy Instamart or Flipkart Minutes.

A list cut short proves nothing missing

09

The apps show a category a page at a time, and some stop early: a Blinkit category list stops near 200 products, a Zepto page at 32, and a BigBasket list can end before the number of products it states. A list that was cut is not a shelf read to the end, and a product missing from it proves nothing. Only a shelf read to the end can show that a product is missing, and calling a product delisted needs every shelf it was on read to the end in two windows a day apart.

The notes a screen prints for this

  • Page limit. Some category lists stopped at the app’s page limit, so a list may be cut short.

Terms on the screens

not proven either way
We read this store but could not reach the end of its list, so we say nothing about what it lacks.
delisted
Absent from every shelf it sat on across two windows covering a morning and an evening 24 hours apart, all read to the end. Never on Zepto, Swiggy Instamart or Flipkart Minutes.

A gap: where a rival is on the shelf and you are not

10

A store counts as a gap for your brand only when at least one shelf of a category you sell in was read to the end in that store, and your brand was not on it. Every gap figure is counted over those stores, and not over every store we read. Rivals are then ranked by how many of those stores they are in. Zepto, Swiggy Instamart and Flipkart Minutes never produce a gap: none of them shows a whole shelf, so on those apps "seen in N stores" is a minimum and nothing is said about where a brand is missing. The pincode and the store list come from the same data on the plans that include them, and the count is the same on every plan.

Your categories are the ones holding at least 3% of your listings on that app, and they decide which shelves count for you. Within them, every store read to the end is one of four: both brands on the shelf, you and not the rival, the rival and not you (the gap), or neither. The four add up to the stores read to the end.

Terms on the screens

where a rival is and you are not
A store whose category shelf we read to the end, where a rival is on it and you are not.The store’s shelf must be read to the end for your categories, the rival must be on it and you must not. It is always counted over the stores read to the end, and not over the stores on our list or the stores we saw.
you are and they are not
A store read to the end where you are on the shelf and the named rival is not.
both on the shelf
A store read to the end where you and the rival are both listed.
neither brand on the shelf
A store read to the end where neither you nor the rival is listed.
worst city
The city with the most stores where a rival is and you are not, with the stores it is counted over.
new product
A product on a shelf read to the end at this read, and not on the same shelf, read to the end, at the previous read.
your categories
The categories holding at least 3% of your listings on that app. They set which shelves count for you.
category
Our own list of categories, the same across apps. A native category is the app’s own.
cities with a gap
Cities holding at least one store read to the end where a rival is and you are not.

Your own range: a product missing where your brand is

11

A brand that is in nearly every store of an app has almost no store where a rival is on the shelf and it is not. What it does have is gaps in its own range: a product listed in some of the stores that list the brand, and not in others. For each product we take its base: the stores that list any product of the brand, and where that product’s shelf was read to the end in this read. Then we count how many of those stores list the product and how many do not. We look for a product on the shelf most of its stores list it under. A shelf the app says a store does not carry is left out: that is the store’s range, and not a missing product.

The count of stores missing is exact for the stores in the base and a minimum for the app as a whole, because a store whose shelf was cut short is not counted either way. A product listed in at least half of its base is a wide listing, and a store without it is one to raise. A product in fewer than half is a narrow listing (a regional pack, a launch, a test): most of its base leaves it out by design, so it is shown apart. On Zepto, Swiggy Instamart and Flipkart Minutes no shelf is read to the end, so no product is counted as missing there.

The notes a screen prints for this

  • The product’s own shelf. A product is looked for on the shelf most of its stores list it under. Its base is the stores that list the brand and where that shelf was read to the end in this read. A store whose shelf was cut short is counted neither way.
  • A minimum. Stores missing are exact for the stores in the base and a minimum on the app as a whole: a store outside the base may be missing the product as well.

Terms on the screens

missing where your brand is
Stores that list your brand, where the shelf this product sits on was read to the end, and that do not list this product.A product is looked for on the shelf most of its stores list it under. Only a store that lists your brand and where that shelf was read to the end is counted either way, so the stores missing are exact for those stores and a minimum on the app as a whole.
stores in its base
For one product: the stores that list your brand and where the shelf this product sits on was read to the end. Every count for the product is over these.
wide listing
A product listed in at least half of its base. A hole in one of these is a store to raise; a product in fewer is a narrow listing, missing from most of its base by design.

Held back: not enough reads yet

12

A rate with fewer than 20 looks over 5 stores behind it is held back, and the screen prints the counts it has, because a percentage built on a dozen looks is a coin toss. A 7-day rate needs 4 reads within 7 days, and a 30-day rate needs 20. These fill in as the reads arrive.

The notes a screen prints for this

  • Not enough reads. Some rates are withheld because they do not yet have the reads to support them.

Category apps: fashion, beauty, pharmacy, pets, baby, cafe and premium grocery apps

13

Besides the grocery apps we read the apps that sell fast from their own dark stores: Myntra M-Now, Nykaa Now, Zepto Pharmacy, Plazza, Supertails, OZi, Slikk, ZILO, KNOT, Peeko, FirstClub, Zepto Cafe, Bistro and Swish, and DMart Ready, DMart’s online shop, which delivers next day or in slots and so is not quick commerce. Each store is read on its own, from a place it delivers to, and its search is read at every store, as a guest except on FirstClub. They are counted on their own: nothing read on them is added to the grocery apps’ figures. Counts are a minimum, as everywhere. Each app states stock its own way, and we print it the way it is stated: units left, in stock or not, or, on Supertails, whether the store would send the product now. A paid figure appears only for an app that marks a paid result; an app that marks none has a blank, never a zero. Cafe apps sell their own food, so their dishes are counted by dish and section, never as a brand. Categories on these apps are ours: placed from the app’s own category words, and from the product’s name where those say nothing, on the same list of categories as the other apps.

FirstClub answers only a signed-in account, so it is read with one; nothing is ordered or kept on it, and each store is read by its own location record. Each store is read page by page in the app’s own order, and its search finds what the category pages do not show. DMart Ready is read as a guest: each online store is the one DMart names for a pincode, its category pages are read in their own order, and its search at every store; a product seen at other stores that a store’s lists did not show is then asked of that store by its id, and such a row has no list position. DMart marks its sponsored cards, and they count as paid. A product DMart lists as coming soon is not on sale at that store yet: it is counted apart and left out of the store’s range. Peeko shows a guest one store and does not say which, so its figures are one Bengaluru store, not tied to an address. KNOT reorders its lists on every visit, so a position there is one visit’s order. Zepto serves each address from two stores, a grocery dark store and a larger store that also sells fashion, home, kitchen, toys, beauty and electronics. The larger stores are read with the category apps, through the app’s store lookup: each store is asked for every product by its id, so a product counts there whether it is in stock or not, and a lookup has no list position and no paid mark. They are kept apart from Zepto’s grocery stores and never added to them.

The notes a screen prints for this

  • At least. Counts are floors: a store with no row of a brand was not seen with it in this read, which is not proof it does not stock it.
  • One read. These apps have been read once, so nothing here is a trend yet.
  • Held or not. This app states no units: a product counts at a store when the app would send it from that store now.
  • In stock or not. This app states in stock or not, without units.
  • No paid mark. This app marks no paid card in what we read, so its paid figures are blank, not zero.
  • Its own menu. The app sells its own food: its dishes are counted by dish and section, never as a brand.
  • Our categories. Categories are ours, placed from the app’s own category words and, where those say nothing, the product’s name, on the same list as the other apps.
  • Every store. Search on these apps was read at every store, as a guest. A signed-in shopper may see a different order.
  • Sending store. A product is counted at the store the app names as sending it, which can be a neighbouring store of the same app.
  • Only what is in stock. This app lists only what it can deliver now, so it shows no out-of-stock product and we give no share in stock.
  • City only. A store we could not place to 500 m has a city and no square.
  • Signed in. Search on this app was read at every store with a signed-in account. Another shopper may see a different order.
  • Found by search. This app opens its category pages only to an account with a saved address, so its products were found by searching at each store. There are no list positions and no first-ten share.
  • Store lookup. Read through the app’s store lookup: each store was asked for every product by its id, so a row says the store lists the product, in stock or not. A lookup has no list position and no paid mark, so those figures are blank, not zero.

What a plan holds back, and what it does not

14

What your plan does not include is removed on our server before anything reaches your browser: cities outside your plan, brands you do not watch, and the store lists and pincodes of the plans above yours. A count is never changed by this. A locked row on a screen states the real number behind it.

The notes a screen prints for this

  • Your plan. Rows outside your plan (other cities, other rivals, store or pincode detail) are not shown. The counts still include them.

Terms on the screens

rows outside your plan
Rows outside your plan are not shown. The counts still include them.
outside your plan
Stores this plan counts but does not list. Every plan shows the full count. A paid plan lists the stores.
watching
A rival your plan follows on every screen: its stores, prices, search rank and paid slots, beside yours. Each plan watches a set number at a time, and you can swap which once in 30 days.
kept for later
A rival you ticked beyond what your plan watches. It stays on your account, out of the screens, and is watched when you move to a plan that watches more or swap it in.

Swiggy Instamart shows part of a category

15

Swiggy Instamart shows a ranked part of a category in place of the whole list, and changes which part it shows. So its counts of stores are a minimum ("seen in at least N stores"), and it never produces a gap or a "not found". A position on Instamart is the place a listing had in the part we were shown, and is not a search rank. A listing that moved 5 or more places inside the first 30 between two looks at the same shelf is recorded as "position moved".

The notes a screen prints for this

  • Ranked slice. Instamart returns a ranked slice of the shelf, so absence is never proof of absence.

Terms on the screens

presence only
Instamart returns a rotating ranked slice, a Flipkart Minutes list is never read to its end, and no reading of Zepto shows a whole shelf, so on those three we can prove you are there ("at least N") and never that you are not.
position
Where a listing sat in the ranked slice Instamart served us. Not a search rank.
position moved
An Instamart listing that moved 5 or more places inside the top 30 between two reads of the same shelf.

A pincode beside an Instamart store shows where it is

16

We know each Swiggy Instamart store by its area, and none carries a pincode of its own. A pincode shown beside one tells you where the store is. It proves nothing about what that store lacks, because we only ever see part of its shelf.

The notes a screen prints for this

  • Store by store, in part. Instamart is read as a ranked slice per store; a pincode locates the store, it never proves what the store lacks.

Flipkart Minutes: where a product is listed and its price

17

We never reach the end of a list on Flipkart Minutes. The first read took one page per store; later reads went further down each list without reaching its end. So it tells us where a product is listed and at what price, and never that a product is missing.

The notes a screen prints for this

  • Never to the end. A Flipkart Minutes list is never read to its end: presence and price only, never an absence.

Zepto: a quantity only when in stock, and the store that serves a location

18

Zepto states a quantity only for products that are in stock, so counting zero quantities would always give 0.0% out of stock. We use the app’s own in-stock mark for availability, and treat the quantity as a sign of depth where it is given. Zepto also decides which store serves a location, so we file a shelf under the store that served it, and not under the location we asked from.

A second store serving the same location

19

On Zepto a second store sometimes serves the same location as the store we asked for. Products served by the second store are filed under it, and a note says so wherever they appear, so the same shelf is never counted twice.

The notes a screen prints for this

  • Second store. On Zepto some products were served by a second store at the same location, and are filed under that store.

A price spread mixes place with time

20

A read runs over more than one day, so two prices for one product may be two stores, or one store on two days. Unless every look fell inside one morning or evening window, we show the spread as the most that place alone could explain, and print the number of hours the looks cover. The median price is the middle of every price we read for the product across stores in the read. "Prices seen" is how many different prices were displayed. "At the most common price" is the share of stores showing the single most common one.

The same rule covers "stores moved together": only a count taken inside one window says that stores changed at the same time.

The notes a screen prints for this

  • Place and time. Stores in this comparison were read at different moments, so part of any spread is time, not geography.

Terms on the screens

median price
The middle of every price read on this product across stores in this read.
prices seen
Distinct displayed prices for one product across the stores read.
at the most common price
The share of stores carrying the product at its single most common price.
spread, at most
When reads span more than one window, two prices may be two stores or two days, so the spread is the most that the difference between stores could be.
stores moved together
Stores where one product moved the same way in one window, over stores carrying it. Only a count from one window says the stores moved together.

Price position, on one app

21

Your median product price divided by the category’s median on the same app, times 100. It is a position and not a discount: 100 is the category’s median, and 90 is a tenth below it. "Price vs rival" is the same sum between your median in the category and the rival’s. Both are medians over a category and not matched packs, and neither is compared across apps, because each app sets prices for its own shelf.

Terms on the screens

price position
Your median product price divided by the category median on one app, times 100. A position, not a discount, never compared across apps.
price vs rival
Your category median divided by the rival’s, times 100, on one app. Category medians, not matched packs.

A discount is measured against the MRP the app shows

22

Every discount figure here compares the selling price with the MRP the app itself displays, which is a list price the app controls. "Below MRP" is the median, across your products on one app and category, of MRP minus price as a share of MRP. "On promo" is the share of your listings that show an MRP and are priced 10% or more below it. Flipkart Minutes shows a discount on nearly every product, which says more about how it presents prices than about the prices.

The notes a screen prints for this

  • Displayed MRP. A discount is measured against the MRP the app itself displays, a list price it controls, and not a market price.
  • Mrp only with a discount. This app shows an MRP only beside a discount, so a product it shows without one is taken as sold at its MRP.

Terms on the screens

displayed MRP
The list price the app itself shows. Every discount here is against it, not against a market price.
below MRP
How far below MRP your products are priced: the median discount in one category on one app.
on promo
Share of your listings with an MRP that are 10 points or more below it.
MRP changed
The displayed list price changed between two reads. Rare, and the steadiest sign of a price change we have.

A product count is what a read reached

23

We read across every category before going deep into any one, so a count of products is what that read reached. It is not the size of an app’s catalogue, or of yours.

The notes a screen prints for this

  • Reached, not catalogue. A distinct product count is what this read reached, not the size of the catalogue.

Terms on the screens

products
Distinct products of yours this read reached. What the read reached, not the size of your catalogue.

Matching one product across apps, and how sure we are

24

BigBasket publishes a barcode on about 30% of its products, and that is the only exact key any app gives us. A pair matched on a valid barcode is exact. Without one we match on the brand, the pack size and the words of the name, and keep how sure we are with the pair: strong, probable, name only, or commodity. A match we worked out is never shown as exact. Where one listing is the best match for another and the reverse is not true, the pair is shown as a conflict and not quietly settled. "Same pack, different app" compares the median store price of one matched pack on each app, and only matched packs count.

The notes a screen prints for this

  • Matched, not barcode. Without a barcode, a match across apps is worked out from brand, pack and name, and is not shown as exact.

Terms on the screens

same pack, different app
The same pack matched across apps; the median store price on each, compared. Only matched packs count.
match confidence
How a pack was matched across apps: exact is a barcode; strong, probable, name-only and commodity are brand, pack and name, never shown as exact; confirmed is a product a person checked on each app.
matched pack
A group of listings, one on each app, that we are confident are the same pack.
one product, every app
The listings of one product on different apps, matched as the same product and the same pack, shown as one row under one title.
no match found
We found no listing on that app that we are confident is this product and this pack. That is not proof it is not sold there.
matched on another app
Of the products on the app where the brand has the most, how many we matched to a listing on each other app. The rest are "no match found": a different pack, a different name, or not listed, and we cannot tell which.

Share of shelf, and what a listing is

25

A listing is one product on the shelf of one store: a brand with 10 products in 100 stores has up to 1,000 listings. It is not a physical facing on a rack. Share of shelf is your listings in one category on one app, divided by all the listings in that category on that app, over the stores we read. It is not added across apps, and it is not market share or sales.

Terms on the screens

product-store listings
One product on the shelf of one store; a brand with 10 products in 100 stores has up to 1,000 listings. Not a physical facing.
share of shelf
Your listings in one category on one app divided by all listings in that category on that app, over the stores read. Never summed across apps, and not sales.

Store locations, and how they are shown

26

Store positions come from the apps themselves. On the brand screens a store is drawn as the 1 km square it is in, and no latitude or longitude, store name or address is shown there: they are shown only in Location intelligence, to an account that holds it (the next rule). Flipkart Minutes, Amazon Now and JioMart are counted by city on the brand screens, and their stores are not listed there. Every Swiggy Instamart store is known by its area and has no pincode.

The notes a screen prints for this

  • Area level. Some store positions are area-level, not exact. Every store is drawn as the 1 km square it is in.

Terms on the screens

location precision
How precisely the app located the store: exact, approximate, area (about 1.8 km) or unknown. On a map a store is drawn as the 1 km square it is in. Every Instamart store is area-level and has no pincode.

Location intelligence: every store, refreshed every week

27

Location intelligence lists every store of the 22 apps we read, with every detail of it that is public: where it is and how exactly, its address, its area and pincode, the hours and the delivery promise the app states, what the app uses it for, its print station and its range. We find the stores by a census of each app: every week for the grocery apps, and once a month for now for the category apps. A position is exact (within 250 m), approximate (within 1 km), or the area only (further, or never measured), and a street address is given only with an exact position. A store the app lists and nothing placed is listed with no position. Totals that include JioMart and Amazon Now count stores, not only dark stores.

Each refresh is set against the one before it. A store is new in the census the first time we see it: it may be older than that, and it is called likely newly opened only where the app’s own store ids say so. A store is called closed only when two readings on different days agree; after one reading without it, it is not answering, waiting for the second. A move is a position that changed by more than 250 m, said with its distance: a move, or a sharper reading of the same store. These details leave Shelf only on the Location screens and in its files, and only to an account that holds Location intelligence.

The notes a screen prints for this

  • New in the census. New in the census is the first time we saw the store. Likely newly opened only where the app’s own store ids say so.
  • Closed on two readings. A store is called closed only when two readings on different days agree. Until then it is not answering.
  • A move, or a sharper reading. A position that changed by more than 250 m is a move, or a sharper reading of the same store.
  • Address only when exact. A street address is given only with an exact position (within 250 m); within 1 km, the pincode and locality.
  • Stores. Totals that include JioMart and Amazon Now count stores, not only dark stores.
  • Monthly for category apps. The category apps are counted once a month; the grocery apps every week.
  • Matched centre. DMart Ready stores are placed at the fulfilment centre matched to them.
  • Not placed. Listed by the app with no position we could read.
  • Distance bands. Nearby stores come from the store census and are said as a distance band (within 1 km, 1 to 3 km, 3 to 5 km or 5 to 10 km), never as a position.

The first read, and changes inside one read

28

At a first read there is nothing to compare with, so every product is "first seen" and not "new", and nothing is called missing. Changes inside one read are real: we look at some shelves twice, and about 7% of the listings we looked at twice had changed in between. A change of that kind is marked "same read": caught between two looks inside one read, and not from one read to the next.

The notes a screen prints for this

  • Same read. This is a first read. A change shown inside it was seen between two looks in the same read, and is not a change from one read to the next.
  • First seen, not launched. New at a store is the first read that found the product there, not the day it was launched.

Terms on the screens

same read
A change seen between two looks at one store inside the same read. Real, but not a change from one read to the next.
first read
The first read: nothing to compare against, so every product is "first seen" and no absence is claimed.
movements
Every change we caught between two reads of the same product in the same store: a price cut, a rise, a stockout, a restock, an MRP change, a position move.
price cut
The displayed price fell by at least one rupee between two reads.
price rise
The displayed price rose by at least one rupee between two reads.
alert
A message when a rival cuts price, goes out of stock, restocks or moves position on a shelf you watch.

Not seen is not delisted

29

A product we did not see in this read is only that: not seen. Unless every shelf it was on was read to the end in two windows a day apart, and it was on none of them, we say nothing about whether it is still listed.

The notes a screen prints for this

  • Not observed. Not observed in this read. That is not the same as delisted.

When we read more, "new" is often "new to us"

30

When a read covers more stores or more categories than the previous one, some of what looks new is new to us and not newly listed. A product is "first seen" the first time we read it. It is called a "new product" only when it is on a shelf read to the end this time, and was not on the same shelf, read to the end, the previous time.

The notes a screen prints for this

  • Coverage grew. Coverage grew between reads, so some of what looks new is newly watched, not newly listed.

Terms on the screens

first seen
The first time we read this product. It is not called a launch, because the previous read could not show it was missing.

Time to restock, and stockouts still open at the last read

31

Restock lag is the hours between a listing going out of stock and coming back, measured only for stockouts that came back inside the read. A stockout that had not come back by our last look at that store is "still out at last read": it may have come back after we left, so it is counted apart and kept out of the median. The median is held back below 20 completed stockouts over 5 stores.

The notes a screen prints for this

  • Cut off at the end. A stockout that came back after our last read of that store looks unresolved here. The median counts only the pairs that closed inside the read.

Terms on the screens

restock lag
Hours from a listing going out of stock to coming back, for the stockouts that came back inside the read.
still out at last read
A stockout with no restock before our last read of that store. It may have come back after we left.

Sponsored products on category pages

32

In the shelf read, Swiggy Instamart is the one app whose category pages carried a "sponsored" label in what we read. Paid slots in search results are covered under Ads below. The sponsored share is the looks that carried that label divided by all looks, per category and city. It measures how often the label was shown. It says nothing about money, so no rupee figure is shown, and it is not share of voice. "The first page" is the first ten positions of the part of the category Instamart showed us at the last read.

The notes a screen prints for this

Terms on the screens

sponsored share of reads
Instamart only: reads that carried an ad marker divided by all reads. Not share of voice, not spend.
first page
The first ten positions of the ranked slice Instamart served us at the last read.

The first 10, share of the first 10, and keyword gaps

34

The first 10 is the first ten unpaid results of a search. A brand’s share of the first 10 for a keyword is the part of all those unpaid places, across every search of that keyword on one app, that its products held. It is not added across apps. Best unpaid rank is the highest unpaid position any of the brand’s products held in a search, and across many searches we print the middle value. A paid slot has no unpaid rank.

Two things on the Search screen are our own analysis, and are labelled as ours. A keyword is relevant to a brand when the brand holds part of its first 10, or sells in the category that fills that keyword’s first 10 on that app. Where an app states no category, a brand that keeps coming up just below the first 10, on a kind of keyword it already ranks for, counts too. A keyword gap is a relevant keyword where the brand held none of the first 10 in any search we read. "Brands beside you" are the brands that most often share a first 10 with yours on plain keywords, leaving out sister brands of the same company.

The notes a screen prints for this

  • Over many searches. Shares and ranks are over many searches. Paid slots rotate, so no figure is one search at one moment.

Terms on the screens

first 10
The first ten unpaid results of a search, in the order the app returned them. Paid results are counted apart.
share of the first 10
Of all the unpaid first-10 slots across the searches read for a keyword, the fraction your products held. One app at a time, never added across apps.
best unpaid rank
The highest unpaid position any of your products held in a search; across many searches, the middle value. A paid slot has no unpaid rank.
first unpaid result
Searches in which one of your products was the first unpaid result on the page.
relevant keywords
The plain keywords where you hold part of the first 10, or whose first 10 is filled by a category you sell in on that app. This is our own analysis of where a brand belongs, worked out from what the app returned.
keyword gap
A relevant keyword where your products held none of the first-10 slots in any search we read.
brands beside you
The brands that most often share a first 10 with you on plain keywords. Sister brands of your own company are left out.
held by the top brands
How much of a first 10 the largest brands take, averaged over the keywords of that kind. 100% means one brand holds every slot; 10% means ten brands share them evenly.
holds the most
The brand whose products took the largest share of the unpaid first-10 slots, over every search read for the keyword (or the kind of keyword) on that app, with that share.
where you sit
Ten cells for the first ten unpaid results. A cell is as dark as the share of searches where your best result sat in that slot.
products that carry the rank
For each of the brand’s products: the unpaid first-10 slots it held across every search read, the times it was the first result, and the keywords it held them on.

What to do in search: our own reading, by fixed rules

36

The "What to do" list on the Search screen picks out keywords where the searches we read point to something a brand could act on. It measures nothing new: every line is made of counts shown elsewhere on the Search and Ads screens. There are eight kinds. Defend your name: another brand held a paid slot on searches for your name in five or more cities. Not in the first 10: a keyword relevant to you where none of the first 10 results is yours. Almost there: you came up in at least three in ten searches of a keyword, were in the first 10 in fewer than half, and your best result was usually at rank 11 to 20. City holes: on a keyword where you hold a twentieth or more of the first 10 and appear in at least half the cities read, five or more cities showed none of your products. Another brand’s paid slot where you are in the first 3: on a plain keyword you are usually among the first 3 unpaid results and held no paid slot in five or more cities, and another brand held one in five or more. It says who held a paid slot on the keyword, and not that the slot was above your result. Paid where already in the first 3: you held a paid slot in five or more cities on a plain keyword where your products are already in the first 3 in at least half the searches. A paid slot only: you held a paid slot in five or more cities on a plain keyword where none of the first 10 unpaid results is yours; your products may still come up lower on the page. Unavailable in search: the app listed your product under a search and marked it unavailable at that store.

The order is a fixed sum, the same for every brand: a weight for the kind (1.0 defend your name, 0.9 not in the first 10, 0.8 almost there, 0.7 another brand’s paid slot where you are in the first 3, 0.6 city holes, 0.5 paid where already in the first 3, 0.5 unavailable in search, 0.45 a paid slot only), times the keyword’s place in our list (a head keyword counts in full, a long-tail one half), times a figure between a half and one for how much of the keyword we read. On the screen no kind takes more than two of the first six lines. The list states what was on the page. It does not say what a rival intended, and it does not suggest a bid or a budget, because we see where slots appeared and not ad accounts.

Terms on the screens

what to do, in search
Our own reading: keywords where the searches we read suggest something to do, ranked by a fixed rule. Every line is counts from this screen; nothing is modelled.Eight kinds. Defend your name: another brand held a paid slot on it. Not in the first 10: a relevant keyword where none of the first 10 is yours. Almost there: your best result usually sits at 11 to 20. Another brand’s paid slot where you are in the first 3: you are usually in the first 3 unpaid results, held no paid slot of your own in five or more cities, and another brand held one there. City holes: you hold part of the first 10 and a few cities show none of your products. Paid where already in the first 3. A paid slot only: none of the first 10 unpaid results is yours. Unavailable in search. The order is a weight for the kind, times the keyword’s place in our list, times a figure between a half and one for how much of the keyword we read.
almost there
The brand came up in at least three in ten of a keyword’s searches, in the first 10 on fewer than half of them, at a usual best rank of 11 to 20.
city holes
On a keyword where the brand holds a twentieth or more of the first 10 and shows up in at least half the cities read, the cities (five or more) where none of its products came up at all.

Rank and paid slots, read together

37

Search shows where a brand’s products rank unpaid. Ads shows where a brand held a paid slot. Put together, every plain keyword a brand came up on falls into one of a few groups, and we count them. Unpaid rank has three bands, each with one rule. Usually in the first 3: the brand’s best unpaid result was in the first three in at least half the searches of that keyword. Lower on the page: in the first 10 in some searches, and in the first three in fewer than half. None of the first 10: no unpaid place in the first 10 in any search we read. A paid slot counts once it was seen in five of the cities read, the same rule as every other table of paid slots; one seen in fewer cities is counted and not treated as a finding. Brand-name keywords are left out: a paid slot on a brand’s own name is a defence, and other brands’ names have their own view.

Three lists come out of it: keywords where a brand held a paid slot while already in the first 3; keywords where it held a paid slot and none of the first 10 unpaid results is its own; and keywords where a brand is usually in the first 3 with no paid slot of its own in five or more cities, while another brand held one there (named from five cities, and never a sister brand). The last one says who held a paid slot on the keyword and in how many cities. It does not say the slot was above the brand’s own result, because the two positions are not compared search by search. The same is worked out for a rival you watch and set beside yours, keyword by keyword. This is our own analysis of what was on the page, over many searches, read as a guest. It states where results and paid slots appeared. It does not say what a brand chose, what a slot cost or what it earned, and a paid slot can serve a purpose we cannot see from the page. How often a page opens with a paid slot depends on the app’s layout and differs from app to app, so it is printed as a fact about a keyword and not about a brand.

Terms on the screens

paid where already in the first 3
Plain keywords where a brand held a paid slot in five or more cities while its own products were already in the first three unpaid results in at least half the searches read.A brand’s own name is left out: there a paid slot is a defence. It says where the slot sat beside the unpaid results, not what the slot earned.
rank and paid slots, together
Our own reading of two facts side by side: where a brand’s products rank unpaid on a keyword, and whether the brand held a paid slot there.Three bands of unpaid rank. Usually in the first 3: the brand’s best unpaid result was in the first three in at least half the searches read. Lower on the page: in the first 10 in some searches, and in the first 3 in fewer than half. None of the first 10: no unpaid first-10 slot in any search read. A paid slot counts from five of the cities read; fewer is counted and not read as a finding. Plain keywords only. It states where results and paid slots sat, never what a brand chose, paid or earned.
a paid slot only
A plain keyword where the brand held a paid slot in five or more cities and none of the first 10 unpaid results was its own.
another brand’s paid slot where you are in the first 3
A plain keyword where your products are usually in the first three unpaid results, you held no paid slot in five or more cities, and another brand held one there. The line names the brand that held it in the most cities.How often a page opens on a paid slot is the app’s own layout and differs from app to app, so this is about who held the slot and how widely, never about that share. A sister brand of yours is never the brand named.

The keyword finder: how crowded a keyword is, and its signs of demand

38

For every keyword we read on an app, the finder sets how crowded its first 10 is beside the signs of demand the app shows. How crowded is read from the unpaid first 10 across the searches read: the leading brand’s share, the share of the first three brands, and, where the app’s paid slots were read, how many brands held a paid slot in five or more cities. A keyword is open when it is in the least crowded third of that app’s keywords, crowded in the most crowded third, and contested between. It compares a keyword with the others on the same app; it is not a measure of cost, and it is never added across apps.

No app publishes how often a word is searched, so we do not print a search volume. Demand is read from three things the apps show: how many brands held a paid slot on the keyword in five or more cities (the apps place paid slots on the searches shoppers make), whether our keyword list counts it a head keyword, a body keyword or a long-tail one (a judgement made when the list was written), and how often the app itself listed products that shoppers searched for and could not get. Strong, moderate and light are the keyword’s third of the app’s keywords by those signs together. Each keyword also names its first five brands by share of the first 10, with the middle value of each one’s best unpaid rank, so where every brand stands on the keyword can be read in one row. “Worth a try” is a filter of ours, the same for every brand: plain keywords in the brand’s main categories (those holding at least a tenth of the plain keywords it has a first-10 slot on), open or contested, with moderate or strong signs of demand, where the brand is not usually in the first 3 (its best unpaid result in the first three in under half the searches read).

Terms on the screens

who ranks on it
The five brands with the largest share of the unpaid first 10 on this keyword over the searches read, each with its usual best rank and its share.
head or long tail
Where a keyword sits in our list: a head keyword is a broad word many shoppers type (milk, chips), a body keyword is narrower, a long-tail keyword is a specific phrase. A judgement made when the list was written, never a count of searches.
worth a try
Our own filter, the same rule for every brand: plain keywords in your main categories (where at least a tenth of the keywords you hold a first-10 slot on are), open or contested, with moderate or strong signs of demand, where you are not usually in the first 3. Most promising first.
keyword finder
Every keyword we read on an app, with how crowded its first 10 is, the signs of demand the app shows, your usual rank and the first five brands with theirs. Our own analysis of the searches read.
how crowded
How a keyword compares with the other keywords on the same app: open (the least crowded third), contested, or crowded (the most). Read from the leading brand’s share of the first 10, the first three brands’ share and, where ads were read, how many brands held a paid slot in five or more cities.
signs of demand
No app publishes how often a word is searched. Demand is read from what the apps show: how many brands held a paid slot on the keyword, whether our keyword list counts it a head keyword (a judgement), and how often the app listed products shoppers searched for and could not get. Strong, moderate or light: the keyword’s third of the app’s keywords.
searched for, not available
The share of searches of a keyword where the app itself showed products that shoppers searched for and the store could not supply. Shown on the apps that print such a block; blank on the others, never a zero.

Product research: a category as a niche to enter

39

Product research sets every category of an app beside the others, for a brand choosing what to launch next and for anyone studying a market before entering it. It measures nothing new: every figure is one the market, demand and store steps already counted, from the same read. How crowded a shelf is comes from five things, each a category’s place among the others on the same app: the share of listings held by the three largest brands, the brands for each place on a typical store’s shelf (the category’s brands over the products a typical store lists in it), the share of listings on the app’s own labels, the median discount off MRP, and, where the app prints ratings, the share of the ratings shown on the three most-rated brands. Its signs of demand come from three: the share of stores read that carry the category, how many of its products a typical store lists (the app’s own range decision), and the ratings shown per rated product. A part an app does not give for most of its categories is left out for that app, never counted as zero. Each score is the mean of its parts, and open, contested and crowded (light, moderate and strong) are its thirds among the app’s categories.

Room to enter is a filter of ours, the same for every category: strong signs of demand on an open or contested shelf, or moderate signs on an open one. A category in depth shows its brands, what sells by the apps’ own marks (ratings, a “sold” badge), the price ladder (the price per 100 g, 100 ml or piece in eight equal bands; an empty price point is a band with no product, or under 3%, between two that have them), its pack sizes, the cities where its shelf is thin (at least 15 points under the app’s share across India, over 10 stores read), the plain keywords whose words name it, and the products first seen on our list at the latest read. First seen is not a launch: the October read reached deeper into every shelf than the reads before it. A rival’s range against yours is one app at a time: the categories where it has products and you have none, the ones you share, and its products first seen at the latest read. Listings are not sales, and nothing here is added across apps.

The notes a screen prints for this

  • Our reading. How crowded a shelf is, its signs of demand and room to enter are our own reading of the counts, by one fixed rule for every category: each category against the others on the same app. They are not a forecast of sales.
  • First seen by us. First seen is when we first saw a product, not when it was launched. The October read reached deeper into every shelf than the reads before it.

Terms on the screens

product research
Every category we read on an app, set by how crowded its shelf is beside its signs of demand, then one category in depth and a rival’s range beside yours. For a brand choosing what to launch next, and for anyone studying a market before entering it.
room to enter
Our own filter, the same rule for every category: strong signs of demand on a shelf that is open or contested, or moderate signs on an open one. It compares a category with the others on the same app; it is not a forecast of sales.
how crowded the shelf is
How hard the shelf is to get onto, against the other categories on the same app, in thirds: open, contested, crowded. Read from the share of listings held by the three largest brands, the brands for each place on a typical store’s shelf, the app’s own labels, how deep the discounts run and, where the app prints ratings, how much of them the three most-rated brands hold. Listings, not sales.
signs of demand
What the apps show of how much a category is wanted, against the others on the same app, in thirds: strong, moderate, light. Read from the share of stores that carry it, how many of its products a typical store lists (the app’s own range decision), and, where the app prints ratings, the ratings shown per rated product. No app publishes sales, so none is shown.
brands for each shelf place
The brands of the category on the app, over the products a typical store lists in it: how many brands compete for each place on a store’s shelf. Where an app’s shelf per store is not known, the count of brands stands in.
ratings held by the top 3
Of every rating the app prints in the category, the share on the three most-rated brands’ products. Ratings accumulate while a product is listed, so it leans to older brands; it is shown only from 20 rated products.
empty price point
A band of the price ladder (the price per 100 g, 100 ml or piece, in eight equal bands from the cheapest twentieth to the dearest) that holds no product, or under 3% of them, between two bands that do. A gap on this shelf at this read, not a promise that shoppers want that price.
pack sizes
The pack sizes the category is sold in on the app, most products first, with how many brands sell each size and the widest reach one product of that size has.
thin shelf
A city where the app carries the category in a share of its stores at least 15 points below its share across India, over at least 10 stores read. A store that does not carry it may still deliver it from another store.
first seen on our list
The read at which we first saw a product. Not a launch date: the October read reached deeper into every shelf than the reads before it, so most products first seen then were on the shelf already.
their categories, not yours
Categories where a brand has products on the app and the brand set beside it has none, at the latest read. One app at a time.
keywords that name it
Plain keywords read on the app whose words name the category (“atta” and “multigrain flour” for atta and flours), with how crowded each one’s first 10 is and its signs of demand. A brand name is never one.

Ads: paid slots, counted where they appeared

40

On Blinkit, Zepto, Swiggy Instamart and Flipkart Minutes every search we read carries the app’s own mark on a paid result, and we count every one: the brand, the keyword, the city and the position on the page. BigBasket and JioMart show a paid result only to a search that asks for it, the way their own pages ask. On BigBasket we asked on every keyword (through the app). On JioMart we asked on the head keywords, and its other keywords have blank ads cells. On JioMart a paid slot follows the category of the first result and not the word typed. Amazon Now shows sponsored results to signed-in shoppers only, and we read as a guest, so its paid columns are blank. A blank is not a zero. Everything here is a slot seen on a page. We do not see spend, bids, clicks or return, and no rupee figure is shown. We say a brand "held a paid slot on searches for a keyword": apps also place paid slots by category, so this says where the slot appeared and nothing about what the advertiser chose. "Cities with a paid slot" is the cities where a paid slot of the brand was seen among the results, out of the cities where the keywords it held one on were read; a paid banner is counted apart, with its own cities. The paid share of the first 10 is the part of the first ten positions marked as paid. "First result paid" is the share of searches whose very first result was paid.

On Swiggy Instamart each paid result states the keyword it was served on. We publish that keyword and one fact worked out from it: whether it is the word that was searched or a wider match. A brand that an app itself owns is marked as the app’s own label. Campaign ids, account ids and anything that looks like a cost in what an app returns are never published.

The notes a screen prints for this

  • Placement, not intent. A brand held a paid slot on searches for a keyword. Apps also place paid slots by category, so this is where the slot appeared, not what the advertiser chose.
  • Not shown to a guest. This app shows sponsored results to signed-in shoppers only. We read as a guest, so its paid slots are not in what we read. Its paid columns are blank, and a blank is not a zero.
  • Ads on head keywords. On this app paid slots were read on the head keywords only. On every other keyword ads were not read: a blank there is not a zero.
  • Aimed at a category. On this app a paid slot is aimed at the category of the first result, not at the word typed.
  • Ads not read. Ads were not read on this app. It shows sponsored results to a shopper, but what we read from it did not carry the mark. Its paid columns are blank, and a blank is not a zero.
  • Not spend. These are placements seen on the page. Never spend, bids, clicks or return.

Terms on the screens

paid slot
A result the app marked as paid for. We count where it appeared; we never see what it cost.
paid share of the first 10
Of the first ten positions on the page, the fraction the app marked as paid, across the searches read.
result slots that were paid
Of every result on the pages read, the whole page and not only its first ten, the share the app marked as paid, across the searches read on that app.
first result paid
The share of searches read whose very first result was a paid one.
paid position
Where on the page a paid slot sat, counting every result from the top; across many searches, the middle value.
cities with a paid slot
Cities in which we saw at least one paid slot of the brand, out of the cities where the keywords it held one on were read.
advertisers
Brands that held at least one paid slot in the searches read on that app.
booked keyword
Instamart only: the keyword a paid slot was served on, as the result itself states it, and whether that is the word searched or a wider match.
the app’s own label
A brand the app itself owns. Marked so a house label is not mistaken for a rival advertiser.
paid banner
A banner or sponsored strip above or between the results, counted when the app ties it to a brand.
paid slots held here
Cities in which the brand on screen held a paid slot on this keyword, out of the cities read; under it, the other brands you watch that held one in five or more cities.Newer figures also name the one other brand that held a paid slot in the most cities, under the same five-city rule, and never a sister brand. Where a slot appeared, never what a brand chose or paid.
you against your rivals
Your paid slots beside those of each rival you watch, on one app: slots seen, keywords, and the cities with a slot out of the cities read. Counts of what was on the page, never spend.
searches with a slot
Of the searches read for the keyword, the share where this brand held at least one paid slot. Paid slots rotate, so this is a share over many reads, never one page.
keywords with a paid slot
Keywords on whose searches the brand held at least one paid slot, in any city read on that app. "Tea" and "green tea" are two keywords.
paid pressure
How much of a keyword’s first ten positions were paid, as a band of our own: no paid slot, lightly paid (under a tenth), paid (under a quarter), heavily paid. The number beside it is the brands named on its paid slots.

Ad openings: where others held paid slots and a brand did not

41

For a brand on one app we take the plain searches of its own categories (a search is the brand’s when its products are in the first 10, or when the app’s own category that fills the first 10 is one the brand sells in) whose paid slots were read, and leave out those where the brand held a paid slot in five or more cities. What is left is listed two ways. Where another brand, never a sister brand of the same company, held a paid slot in five or more cities on a first 10 that is a tenth or more paid, the search is listed with every such brand, widest first, and the brand’s own best unpaid rank there; the screen picks out the rivals the reader watches. Where paid slots were seen but fill under a tenth of the first 10, the search is listed as one with few paid slots.

A search with no paid slot at all is counted and never listed: an app may not sell slots on a search, or the law may keep ads off it, as with tobacco and infant formula. Nothing here says a slot would pay off or what it would cost; it is where slots appeared, read as a guest. The same paid slots are also added up by the kind of search each keyword is filed under in our list (snacks, beverages and so on), on a brand’s ads page and on its row beside its rivals.

Terms on the screens

openings
Searches of the brand’s own categories where another brand held a paid slot in five or more cities and the brand did not, and searches where paid slots fill under a tenth of the first ten positions. A search with no paid slot at all is never one: an app may not sell slots on it, or the law may keep ads off it. Where a slot appeared, never what it cost or would.
few paid slots
A search of the brand’s categories where paid slots were seen and fill under a tenth of the first ten positions.
kind of search
Our keyword list files every keyword under one kind (snacks, beverages, personal care and so on). A brand’s paid slots are added up by the kind of the keyword they appeared on.

Another brand on your name

42

For each brand name in our keyword list we count the brands that held a paid slot when that name was searched. A brand is named there only where it held a paid slot in five or more of the cities read; below that it is counted with "others". A sister brand of the same company is not listed as another brand, since a company advertising on its own label is not a rival on its name. This is the usual case and not an exception: on most brand names, another brand held a paid slot in five or more cities.

The notes a screen prints for this

  • Five cities. A brand is named on a keyword only where it held a paid slot in five or more of the cities read. The rest are counted together as others.

Terms on the screens

on your name
Another brand held a paid slot on a search for your brand name, in five or more of the cities read. It says where the slot appeared, not what that brand chose.
your own name
Cities read in which your brand held a paid slot on a search for its own name.
other brands’ keywords
Keywords that are another brand’s name (not its own or a sister brand’s) on whose searches the brand held a paid slot in five or more cities. Several keywords can be one brand’s name. Where a slot appeared, not what the brand chose.
cities seen in
Cities where your products were in the unpaid first 10 on searches for this name, out of the cities where the name was searched.

When an app states no brand

43

Amazon Now gives a product a title and no brand. On the Search screens we take its brand from the first words of the title, checked against the brands the other apps state for their products. A title that matches no known brand is left without one. We do not guess.

The notes a screen prints for this

  • Brand from title. This app states no brand, so the brand is read from the product title against the brands the other apps state.

One product, every app, and its price on each

44

Where a product’s listings on different apps are matched as the same product and the same pack, the Products screen shows them as one row under one title, with each app’s listing beside it: the stores it was seen in, its median price over those stores, the MRP that app displays, and the share of looks that found it in stock. A product is "priced apart" when its median is 5% or more higher on one app than on another. "Lowest on" names an app only when its median is clearly below every other app that lists the product; when two apps are within 1% of each other, none is named. These are medians from different stores read at different times, so a difference is stated with both prices and not called a saving.

A listing we could not match with confidence is shown alone, and "no match found" on an app does not mean "not sold there". Your list keeps the products you choose in front of you, on every app where they are matched.

The notes a screen prints for this

  • Median prices. A price is the median over the stores read on that app in the read. Two apps are compared on those medians, never store by store.
  • The price at most stores. A product’s price at a read is the one shown at the most stores carrying it.

Terms on the screens

price across apps
The median price of the same product on each app, over the stores read there in the read. Medians are set side by side; nothing is compared store by store.
priced apart
The same product is priced 5% or more apart between the app where it is lowest and the app where it is highest.
lowest on
The one app whose median price for the product is clearly below every other app that lists it. Two apps within 1% of each other name nobody.

Price per 100 g, 100 ml or piece

45

A unit price is the median price of a listing divided by everything in its pack: a pack of 2 x 500 g is priced over one kilogram. It is given per 100 g for weight, per 100 ml for volume and per piece for packs sold by count, and only where an app states the pack. A size we could only find in a product’s name is not used, because it is too often some other quantity: the protein in a bar is not the weight of the bar.

Beside a unit price we may show the range for its category on the same app: the price a tenth of the category’s products are under, the middle price, and the price a tenth are over. This needs at least 20 products seen in 20 or more stores, and at least half the category’s listings with a unit price. Categories are broad (cream is filed with milk), so the range gives context and is not a judgement. We do not compare two apps’ ranges, since each app files products its own way, and we show no range per piece: a piece of one thing is not a piece of another.

The notes a screen prints for this

  • Whole pack. A unit price is the median price over the stores read, divided by everything in the pack. A pack that did not parse has none, and neither has a pack size read out of a product name, so an app that states no pack size has no unit price here.

Terms on the screens

price per unit
The median price divided by everything in the pack: per 100 g, per 100 ml, or per piece. A two-pack is priced on both units together. A pack whose size no app states has no unit price.
the category’s range
On one app, the unit prices of the products filed under the same category: the bar runs from the price a tenth of them are under to the price a tenth are over, with the middle marked. Never set against another app’s range, and only shown per 100 g or 100 ml.

Least seen: a product against its brand’s stores

47

For each product we know the stores it was seen in on an app, and the stores where any product of its brand was seen on that app. "Least seen" puts a brand’s products in order of the first as a share of the second. It is shown on the apps where the app itself states the brand and the brand was seen in at least 50 stores. Unless you ask, it leaves out products seen in fewer than 20 stores, since those are more often a trial, a regional line or old stock than a gap.

Both numbers count sightings. Pages stop at a limit, and in our first reads most category shelves were read for their first few pages only, so a product low on a long shelf was not seen in a store even where it was listed. So "least seen" means "not listed, or low on the shelf". Both are worth a look, and it is not printed as a number of stores that do not sell the product. The claim that a product is missing from a store is made on Where you are missing, and only where a shelf was read to the end.

Terms on the screens

least seen
A product’s stores, out of the stores where any product of the brand was seen on that app. Pages stop at a limit, so a product low on a long shelf is not seen there: least seen means not listed or low on the shelf, and is never a count of stores that do not sell it.

Categories and the market: the apps next to each other

48

The Market and Categories screens count what the shelf read reached, one app at a time. A listing is one product in one store, as it was at our last look in the read. A brand’s share of shelf in a category is its listings divided by all the category’s listings on that app. "Held by the top 3 brands" is the same sum for the three largest. Nothing is added across apps: they differ in shelves, page limits and store counts, so two apps’ figures are shown next to each other and not summed.

Some figures are held back on purpose. A category needs at least 20 products on an app, seen in at least 30 of its stores, before that app gets any figure for it. Brand figures need at least 90% of the category’s listings to carry a brand the app states, because a listing with no brand counts for nobody; and a leader is named only where its lead is larger than all the listings with no brand. Own labels are the labels on our own list, so their share is a minimum. Two apps are compared on price only over products matched as the same product and pack on both, by counting which is more than 1% lower: a count, and not a saving. Store patterns (out of stock by kind of store) are our own reading of counts next to each other, and claim no cause. A blank on these screens is a figure we do not have or would not print. It is not a zero.

The notes a screen prints for this

  • One app at a time. Every count and share is inside one app. Listings, products and stores are never added across apps: the apps differ in shelves, page caps and store counts.
  • Listings. A listing is one product in one store at the last read of the read. Share of shelf is a brand’s listings over all listings of the category on that app.
  • Brand not read. Some listings came with no brand we could read, on Blinkit most of all. They count in a category’s listings and for no brand, so every brand share is a minimum. Where under 90% of a category’s listings carry a brand its brand figures are withheld, and where the largest brand leads by less than the listings with no brand no leader is named.
  • Own labels: our list. An app’s own labels are the labels on our own list. A label an app owns that is not on the list counts as a national brand, so an own-label share is at least that much. The search read keeps its own, wider list, so the shelf share and the search share are not one measure.
  • Two counts. Listings count the products we file under a category, on whatever shelf the app shows them. Stores carrying and typical listings per store count the app’s own shelves filed under the category. The two are different counts and are never divided by each other.
  • Same products only. Two apps are compared only on products matched as the same product and pack on both, on the median price over the stores read on each. A count of which app is lower is not a saving, and the matched products are a small part of either range.
  • No cause claimed. Store patterns set counts side by side: the share of products seen at a store that were out of stock at its last read, by kind of store. They are our own reading and say nothing of cause. Stores that close at night are also more often the ones with a compact range.
  • Dates differ. Shelf figures come from the shelf read, search figures from the later search read, and hours, promise minutes, print stations and reach from later single readings. An app or a store can have changed in between.
  • Blank is not zero. An app whose ads were not read has no paid share and no advertiser count here. That is not a zero.
  • Price only. Flipkart Minutes is read for presence and price only. No in-stock rate and no store pattern is stated for it.

Terms on the screens

products the read reached
Products of the app that the shelf read saw in at least one store. Pages stop at a limit, so it is what we reached and never the size of the app’s range.
brands
Brands with at least one product the read reached, counted only where the app or its catalogue states the brand. A brand read off a product’s name is not counted.
own labels, share of listings
Listings of the app’s own labels over all its listings in categories, from our list of which labels belong to which app. A label missing from that list counts as a national brand, so the share is a minimum.
10 points or more below MRP
The share of priced products whose median price sits 10 percentage points or more under the MRP the app displays. MRP is the app’s own list price, not an independent one.
at more than one price
The share of priced products seen at more than one price across the stores read. It says an app prices by place; it does not say by how much.
held by the top 3 brands
Listings of the three largest brands over all listings of the category on one app. Listings that came with no brand count in the total and for nobody, so it is a minimum. Withheld where under 90% of the category’s listings carry a brand.
leader
The brand seen in the most stores of the category on one app at the read; brands level on that count are named together.
most listings
The brand with the most listings in the category on one app: the widest range on the shelf, not the brand on the most shelves. Named only where its lead over the next brand is larger than all the listings that came with no brand.
listings with a brand
The share of a category’s listings on one app that came with a brand the app or its catalogue states. Below 90%, brand figures are withheld for that category on that app.
the same products on two apps
Two apps are compared only on products matched as the same product and pack on both, by median price over the stores read on each. We count how many are more than 1% lower on one, on the other, or level. It is a count, not a saving, and the matched products are a small part of either range.
out of stock by kind of store
For each store, the share of the products seen there that were out of stock at its last read; then the middle store of each kind. Counts set side by side, our own reading, with no cause claimed.

Prices from one read to the next

49

We keep several reads of the shelf, taken weeks apart. For each product on each app, a read gives one point, and only where the product was seen in at least 20 stores: its median price over everything we read, the MRP most listings showed, and, on the apps that publish stock, the share of looks that found it in stock. A product’s change runs from its first read with a point to its latest read with a point, and a move within 1% counts as level. A read with no point is a break in the line. It is not a zero.

The reads did not all go equally deep, because page limits changed between them. So the number of stores a product was seen in is not compared across reads, and prices are. While the latest read is still under way, and until it has covered 80% of an app’s stores, it is marked partial: its prices are those of the stores read so far, and no product is called "not seen in the latest read". That is never said on Swiggy Instamart or Flipkart Minutes. "Not seen" is not "delisted". The same-product basket for an app is the middle value of later price over earlier price across the products both reads hold. It has no weights and no sales in it, and it is not a consumer price index.

The notes a screen prints for this

  • Reads differ in depth. The reads went to different depths: page limits changed between them. Do not compare stores seen in one read with another. Prices can be compared.
  • Latest read partial. The latest read is still going on. Where it has read under 80% of an app’s stores it is partial: its prices are those of the stores it happened to read, and "not seen" is not said of any product.
  • Median over reads. A read’s price for a product is the median over every listing in that read that showed a price. Where an app prices by store or city, it is the middle of the stores read, not one shopper’s price.
  • Names from the first read. Names, brands and categories are those of the first read. A product first met in a later read is not in a brand’s table yet.
  • A basket, not an index. A same-product basket of what the reads reached: no weights, no sales and no fixed basket. It is not a consumer price index.

Terms on the screens

one point a read
A product has a point for a read only where that read saw it in at least 20 stores: its median price over everything we read, the MRP most listings showed, and the share of reads in stock. A read with no point is a break in the line, and not a zero.
price change across reads
From the first read with a point to the latest read with a point, so two products can span different reads. Within 1% is level.
same-product basket
The products seen in at least 20 stores in both of two reads, and the middle value of later price over earlier price. A basket of what the reads reached: no weights, no sales, not a consumer price index.
not seen in the latest read
The product was not seen in the latest read. Said only where that read covered at least 80% of the app’s stores, and never for Zepto, Swiggy Instamart or Flipkart Minutes. It is not the same as delisted: a read takes a limited number of products from each shelf.

Maps: what a mark is, and what its colour means

50

Shelf draws two kinds of map. The map of India puts one mark on each city, sized by the figure it stands for: the area of the mark follows the figure, so a city with four times the stores gets a mark four times the area, down to the smallest mark that can still be seen and pointed at. The mark is placed at the middle of a square about 9 km across that holds the middle of the city’s stores, on the apps whose stores we list. It stands for the city and not for any store, and a city we have no square for is listed and not drawn. The street map opens only when you ask for it, and draws each store as the 1 km square it is in. No latitude or longitude is published on either map.

Colour means the same on a map as everywhere else in Shelf. Green is you: on the shelf, in the first 10, in stock. Red is a rival where you are not, or your product out of stock. On a map of India a city turns red where a fifth or more of our looks found the product out of stock; that line is our own, and the legend states it. A ring is a place we read where there was nothing to count. Everything else is black. On a product’s street map coloured by price, green is below the price most stores show and red is above it, the same colours as a price cut and a price rise in What changed. A category’s street map splits one app’s stores into thirds by how many products of the category each lists; where most stores stop at the same page limit, only a store away from that count stands out. A map of sizes draws each category as a rectangle whose area is its number of products and whose shade is one more figure, named under it. No map here is a forecast, and none adds figures across apps.

Terms on the screens

a mark a city
One mark for each city, as large as the figure it stands for: the area follows the figure, down to a smallest mark that can still be seen. It is set at the middle of a square about 9 km across that holds the middle of the city’s stores. It is a place for the city, never the place of a store.
street map
Each store drawn as the 1 km square it is in, over the streets around it. It is loaded only when you ask for it. No latitude or longitude is published.
the usual price
The price the most stores showed for this product on this app, at each store’s last read. On the map a store below it is green and a store above it is red, as a price cut and a price rise are. It is not a list price.
map of sizes
Every item drawn as a rectangle whose area is its product count. Depth of ink is one second figure, named under the picture; a hatched rectangle is one where that figure was not read.
keyword landscape
One dot a keyword. Left to right is the share of the first 10 the brand holds; bottom to top is the share of the first 10 that is paid. Two counts side by side, never a forecast.

A store’s shelf by category, and which stores go deepest

51

A store page lists every product we read at that store, grouped by the category of the shelf it was read on, with the price and stock shown at that time. A product is named as the app lists it: name, brand and pack. A product seen on a shelf of a category other than its own is shown where it was read. The names of brands you do not watch are held back below Pro; the number of products on each shelf is complete on every paid plan.

For a category we also know, store by store, how many products its shelves listed. Where the app cut a shelf short, that count is a minimum. In our first reads most Blinkit shelves stopped at the same page limit, so many stores are level at the top and the order among them means nothing. Flipkart Minutes, Amazon Now and JioMart have no store page and no store list on any plan.

The notes a screen prints for this

  • The average store. The average store of an app is the mean of each figure over the stores read: an average, not one real store.

Terms on the screens

the shelf, by category
Every product we read at this store, grouped by the category of the shelf it was read on, with the price and stock shown at that read. Pages stop at a limit, so a category’s count is a minimum.
products listed, by store
How many products a store’s shelves of the category listed at the shelf read. Where the shelf was not read to its end the count is a minimum, and many stores then sit level at the page cap.

The Stores screen: what a store is here, and its two dates

52

The Stores screen puts together two things we know about every dark store. One is the shelf read: the products and categories listed at the store, which is also where a brand was or was not seen. The other is a later check of each app at each store’s own location: the hours it states, the minutes it promised, the kinds of range the store ships, the wider ranges that reach it, and on Blinkit whether its print service answered. The two were read on different dates, and a store can change in between, so every screen that shows both prints both dates.

A store here is a store id as the app issues it, from our monthly list of stores plus any id the shelf read met that the list does not have. An app can have two ids at one site, so there can be more ids than buildings. A store can have its hours and reach and no shelf figures yet; a brand is only counted over stores with shelf figures. A store is placed by the 1 km square it is in. Flipkart Minutes, Amazon Now and JioMart are shown by city and state only, and their stores are not listed on any plan.

The notes a screen prints for this

  • Two dates. Products seen, categories and the range band come from the shelf read. Hours, promise, reach and print come from later readings. A store can have changed in between; both dates are on the screen.
  • Two lists. Some store ids are in one list only: a store on our list whose shelf was never read has its hours and reach and no shelf figures, and the reverse.
  • Ids, not buildings. A store here is a store id as the app issues it. An app can have two ids at one site, so there can be more ids than buildings.

Terms on the screens

stores on record
Store ids we have for the app: those on our monthly list of stores, plus any the shelf read met that the list does not have.A store here is a store id as the app issues it. An app can have two ids at one site, so there can be more ids than buildings.
stores with shelves read
Stores where the shelf read got an answer. Every count of a brand by kind of store is out of these, never out of every store on record.

Hours, status and promised minutes

53

Each of these is one check of the app at the store’s own location, on the date shown. It is not an average and not a timetable. A store is "open 24 hours" when the hours the app stated for it cover the whole day; with shorter stated hours it "closes at night"; where the app stated no hours it is in neither group. Status is what the app answered at that minute: serving, paused, coming soon or not serviceable. Paused means it was not taking orders then, and does not mean the store has closed down. Promised minutes are what the app promised at the store’s own doorstep, its shortest trip, so the middle value across stores is not a typical delivery time and is not printed as one.

The notes a screen prints for this

  • One reading. Hours, promised minutes, store roles, reach and print stations are one reading of each app at each store location, on the date shown. It is not an average and not a timetable.
  • Paused, not closed. Paused means the app was not taking orders at that location at the minute of the reading. It does not mean the store has closed.
  • Shortest trip. Promised minutes are what the app promised at the store’s own location at that minute, its shortest trip, not a typical delivery time.

Terms on the screens

open 24 hours
The hours the app stated for the store span the whole day. A store with shorter stated hours closes at night; a store with no hours read is in neither group.
status at the reading
What the app answered at the store’s own location at the minute we read it. Paused means it was not taking orders then, not that the store has closed.
promised minutes
The minutes the app promised at the store’s own location at the reading: its shortest trip. Not a typical delivery time.

Roles, reach, pharmacy and print

54

An app often serves one location from more than one store: a nearby express store for the everyday range, and a larger store further away for a wider range (long-tail), a still wider one (extended long-tail) or pharmacy stock, each with a longer promised time. A store’s roles are the kinds of range we saw it ship, in the answer for any location. A range "reaches" a store when it is offered at that store’s own location, whichever store ships it. So a store can be reached by pharmacy stock without holding any. On Zepto and Swiggy Instamart the same idea shows up as a second store serving the location.

Print stations and pharmacy stock are shown for Blinkit. On every other app those columns are blank, and a blank there is not a none. A print station is a store where the print service answered, including where it answered that it was down at that minute.

The notes a screen prints for this

  • Store type from the app. A store’s type is the app’s own word for it, from the app’s own records. Where the app does not say, the store is counted as type not stated, never guessed.
  • Everything offered at the address. Blinkit serves an address from more than one store: an express store, and long-tail or pharmacy stores further away. A store’s products are everything offered at its own address, whichever store ships them.

Terms on the screens

print station
The app’s print service answered for this store. Read on Blinkit only; on every other app this is blank, which means not read.
reaches the store
A wider range (long-tail stock, pharmacy stock) is offered at the store’s own location. It may ship from another store, so the store is reached by it, it does not necessarily hold it.
second store
A second store of the same app also serves the location, usually with a wider range and a longer promise.
store role
The lines a store was seen shipping on in any location’s answer: express, long-tail, extended long-tail or pharmacy on Blinkit; main or second store on Zepto and Instamart.

Products seen, and the range band

55

Products seen is the number of different products the shelf read saw at a store. Pages stop at a limit, so it is a minimum of what was listed and not the size of the store’s shelf. The range band is our own split, and labelled as ours: the stores of an app whose shelf lists came back almost in full are put in order of products seen and cut into thirds: compact, standard and wide. It ranks what the pages listed. It is not floor area and not the store’s true range, and it is not shown on apps whose pages cannot rank stores, which today are Zepto and Swiggy Instamart.

The notes a screen prints for this

  • Our own band. The range band is our own split of an app’s fully read stores into thirds by distinct products seen. It ranks what the pages listed, not floor area or true assortment, and is withheld where pages cannot rank stores.

Terms on the screens

range band
Our own split of an app’s fully read stores into thirds by distinct products seen: compact, standard, wide. It ranks what the pages listed, not floor area.
products seen
The different products the shelf read saw at a store. A minimum of what the pages listed, and not the size of the store’s shelf.

Which stores carry a category, and how crowded it is

56

A store carries a category when a shelf of that category listed at least one product there at the shelf read. "Stores carrying it" is counted out of the stores where a shelf of the category gave an answer. "Products a typical store lists" is the middle value, over the stores that carry it, of the products listed on the category’s shelves: it shows how crowded the shelf is where a brand competes. Both are minimums, because pages stop at a limit. No row for an app means we have no shelf of that category for it. It does not mean the app does not sell it.

The notes a screen prints for this

  • Minimums. Products, listings and categories are what the shelf read listed. Pages stop at a limit, so every count is a minimum, and a shelf that listed nothing is not proof the store never stocks it.

Terms on the screens

rank by stores
Where the brand stands among every brand of the category by the number of stores carrying it at the read, on one app. First is the widest.
aisle
Our group of categories, the same across apps: dairy, bread and eggs holds curd, milk and paneer. A category sits in one aisle.
cities carrying it
Cities where at least one store read had it on the shelf at the read. A city with no store read is not counted either way.
stores carrying it
Stores where a shelf of the category listed at least one product at the shelf read. A minimum.
products a typical store lists
The middle value, over the stores carrying the category, of the products listed on its shelves there. It says how crowded the shelf is where you compete.

Across India: where a brand was seen, and where a category is carried

57

For each app we count the stores where at least one product of a brand was read, and show that beside two totals: the stores of the app where the read got any answer, and every store of the app on our list. A share is always over stores read. The same counts are given by zone, by state, by kind of city and by city. A city is counted in the state most of its stores are in, so a state is the sum of its cities and a zone the sum of its states. A zone is one of the six groups of states used by the Zonal Councils and the North Eastern Council. Two brands shown together are compared over the same stores read. This counts where a brand was seen. It does not say where a brand is not sold: every app cuts its lists short somewhere, so a store with no sighting is not a store without the brand, and on Swiggy Instamart and Flipkart Minutes every count is a minimum. A brand is counted only where the app itself names it on the listing. For a category the count is the stores where at least one product of the category was read, with the products and brands read there, how many products a typical store lists, the share in stock at the last read and the middle price.

The notes a screen prints for this

  • Seen, not sold. Stores seen are stores where a product of the brand was read in the read. Every app cuts its lists short somewhere, so a store with no sighting is not a store without the brand.
  • Two bases. Stores read are the app’s stores we read anything in at this read. Stores on record are every store of the app we know of. A share is always over stores read; the two are never mixed.
  • One state a city. A city is counted in the state most of its stores are in, so a state is the sum of its cities and a zone the sum of its states. A few border towns have a store across the line.

Terms on the screens

across India
Stores where a product of the brand was read, out of the stores we read, by zone, state, kind of city and city, on one app.It counts where a brand was seen. It never says where a brand is not sold: every app cuts its lists before their end, so a store with no sighting is not a store without the brand. A city is counted in the state most of its stores are in, so a state is the sum of its cities and a zone the sum of its states.
zone
One of the six groups of states the Zonal Councils and the North Eastern Council use: North, Central, East, West, South and North-East. The grouping is theirs, not ours.
seen there
Which of the two brands was seen in the place at all in this read: both, only you, only the rival, or neither."Only the rival" means a product of the rival was read there and none of yours was. It is not a claim that you are not sold there.
kind of city
Three groups. Tier 1 metro: Delhi, Noida, Greater Noida, Gurgaon, Ghaziabad, Faridabad, Mumbai, Thane, Navi Mumbai, Bengaluru, Hyderabad, Chennai, Kolkata and Pune. Tier 1 non-metro: Ahmedabad, Jaipur, Lucknow, Chandigarh, Kochi and Indore. Tier 2: every other city an app serves.
map of states
Every state is one square of the same size, set roughly where the state is. A small state with many stores is then as easy to read as a large one with few.A hatched square is a blank, never a zero: no store of the app was read there, or the count is held on this plan.
stores carrying the category
Stores where at least one product of the category was read, out of the stores we read, by zone, state, kind of city and city.Beside it: the distinct products and brands read there, how many products a typical store lists, the share in stock at the last read and the middle price. Counts of what the pages listed, on one app, never added across apps.

Popularity marks: what the apps themselves print

58

Some apps print on a product how much it is bought: the number of ratings it has, and on BigBasket a badge such as "150+ sold (1 mo)". Within a category we rank an app’s products by those marks, and its brands by their share of the ratings shown. They are the apps’ own figures, as printed the last time we read one. We do not measure sales and do not estimate them. A count of ratings keeps growing for as long as a product is listed, so it favours older products: it gives an order, and is not a rate of sale. BigBasket’s badge was on most of its products in August and on few since, so every badge keeps the day it was last printed: one printed in the read on the screen ranks a product, and an older one is shown with its day and ranks nothing. Amazon Now names no brand on a listing, so its products are ranked and it has no table of brands. A mark on one app is not compared with a mark on another, and a category needs ten products with a mark on an app before it is ranked there.

The notes a screen prints for this

  • Ratings, not sales. Demand here is the rating count each app prints on a product. A rating is never a sale; a product more shoppers buy gathers more of them.
  • Rounded counts. Blinkit and Swiggy Instamart round a large rating count, so a small rise on a large brand does not show there.
  • The app’s own marks. Ratings counts and "sold" badges are the apps’ own, as printed on a product at the last read that carried one. We measure no sales and model none.
  • Ranks, not sales. A count of ratings grows for as long as a product is listed, so it favours older products. It ranks; it is not a rate of sale.

Terms on the screens

popularity marks
What an app itself prints on a product about how much it is bought: the number of ratings it shows, and on BigBasket a "sold in a month" badge. Ranked inside a category, one app at a time.They are the apps’ own marks, as printed at the last read that carried one. We measure no sales and model none, and a mark on one app is never set against another app’s.
ratings shown
How many ratings the app prints for the product. It grows for as long as a product is listed, so it favours older products: it ranks, it is not a rate of sale.
the app’s sold badge
BigBasket prints a badge such as "150+ sold (1 mo)" on some products. We show it in the app’s own words. A badge printed in this read ranks a product by the minimum it states; one last printed before this read is shown with that day and ranks nothing.The badge was on most BigBasket products in August and on few since, so for many products it is some weeks old. It is the app’s figure, never ours.
share of ratings shown
A brand’s ratings shown, over all ratings shown for the category’s products on that app. A share of attention to date, not of sales.
products with a count
Products of the brand for which the app printed a rating count at the read. A product with no count shown is not in this figure.

Your brand by kind of store

59

For each kind of store (open 24 hours or closing at night, reached by pharmacy stock or not, wide or compact in range) we count the stores of that kind whose shelves were read and, of those, the stores where the brand was seen. It counts where a brand was seen. A store where the brand was not seen is not called a store without it on this screen: that needs a shelf read to the end, and it is worked out store by store on Where you are missing. On Swiggy Instamart every such count is a minimum, so two of them are not compared.

"Thinner here" is our own reading of that table: a kind of store where the brand was seen in a clearly smaller share of stores than in the opposite kind, where both groups have at least 30 stores and the shares are at least 10 points apart. It states two counts and no cause. Kinds of store overlap: stores that close at night are also, more often, the ones with a compact range.

The notes a screen prints for this

  • Our own reading. Where a brand is thinner is our own reading of two counts set side by side. It states no cause: stores that close at night are also, more often, the ones with a compact range.

Terms on the screens

seen in
Stores where at least one product of the brand was on a shelf we read. A count of presence: the stores it was not seen in are not claimed as absences here.
thinner here
Our own reading: a kind of store where the brand was seen in a clearly smaller share of stores than in its opposite. Both groups hold at least 30 stores and the shares are at least 10 points apart.Two counts set side by side. It never says why: stores that close at night are also, more often, the ones with a compact range.

How often a store is read

60

Every store on the apps we read is read again every day, JioMart and Amazon Now twice a day. The largest apps take up to two days to read from end to end, so every figure rests on one whole read of its app. Every read is kept, and that is what lets a product be followed store by store: when it went out of stock, how long it stayed out, and how fast its stock runs down, shown as bands, never as units. Which reads an account sees follows its plan: Pro sees every day’s read, and a read every hour in the target cities it names with us; Free is refreshed every week.

The notes a screen prints for this

  • Morning and evening. Read twice a day, in the morning and in the evening: each day shows what those reads found.

A read that is still under way

61

Figures published while a read is still under way cover only part of it, and are marked "partial read" wherever they appear. They do not replace the figures of a finished read. New figures are published when a read is finished.

The notes a screen prints for this

  • Still being read. These figures were made while the apps were still being read, so they cover part of this read. They are replaced when it ends.

Terms on the screens

still being read
These figures were made while the apps were still being read, so they cover part of this read. They are replaced when it ends.

Every term, in one place

62

The glossary lists all 206 terms in alphabetical order, each in the one sentence the screens show beside it, with a link back to its rule on this page.

Corrections

63

  1. 1If a figure about your brand looks wrong, write to trust@seetheshelf.com.
  2. 2We aim to answer within one working day.
  3. 3We read the store again, and print the new reading next to the original.
  4. 4If we were wrong, we change the method and not only the figure, and the changelog says so that day.

Corrections asked for and read again so far are listed on the changelog, with their dates.