---
title: "Digital shelf analytics"
description: "Digital shelf analytics data for CPG brands: search rank, share of shelf, content compliance, ratings and stock from Amazon, Walmart, Target and Tesco."
canonical: https://www.zenrows.com/use-cases/digital-shelf-analytics
updated: 2026-10-18
---

# Digital shelf analytics

Digital shelf analytics measures how a brand's products appear on retailer websites through search rank, share of shelf, content accuracy, ratings, reviews and availability by retailer and region. Zenrows collects those retailer search and product pages, protected ones included, as structured JSON, so CPG teams can score every SKU on every retailer they sell through.

## Sample output: one keyword on one retailer

```json
{
  "retailer": "example-grocer.com",
  "keyword": "oat milk",
  "region": "us",
  "postcode": "60614",
  "captured_at": "2026-10-17T05:00:00Z",
  "results_on_page_1": 24,
  "your_brand": "Oakfield",
  "your_positions": [
    { "rank": 2, "sku": "OAK-OAT-1L", "sponsored": true },
    { "rank": 7, "sku": "OAK-OAT-BARISTA", "sponsored": false }
  ],
  "share_of_search_top_10": 0.2,
  "content_check": {
    "sku": "OAK-OAT-1L",
    "title_matches_master": true,
    "images": 4,
    "images_expected": 6,
    "bullet_points": 5,
    "rating": 4.4,
    "review_count": 812,
    "availability": "in_stock"
  }
}
```

An illustrative record for one keyword, retailer and postcode: positions come from the search results page, the content check from Extract on the product page compared with your master data.

## What digital shelf analytics teams collect

The digital shelf is every retailer page where a shopper can find, compare and buy your product. CPG brand, ecommerce and category teams measure it SKU by SKU and retailer by retailer.

| Job | Data you collect | Typical sources |
|---|---|---|
| Share of search | Your products' positions for category keywords, sponsored or organic | Amazon, Walmart, Target, Instacart, Tesco and Carrefour search results |
| Share of shelf on category pages | Your share of products on the first page of a category listing | Retailer category and aisle pages |
| Content compliance | Title, bullet points, description, image count and claims versus your master data | Product detail pages on every retailer you sell through |
| Ratings and reviews health | Average rating, review count, new negative reviews | Product pages and review sections |
| Availability by region | In stock or out of stock per retailer, store or postcode | Grocery and big-box product pages with a selected store |
| Retail media placement | Sponsored slots won by you and by competing brands per keyword | Search results pages marked as sponsored |

## Why digital shelf monitoring breaks

A digital shelf score is only as good as the page it was read from. Results change by location, retailers mix ads into organic results, and each retailer is a different site to keep working.

| What breaks | What it looks like | How Zenrows handles it |
|---|---|---|
| Location-dependent results | Search rank and stock differ between postcodes and countries, so one check misreports the shelf | Geotargeting picks the country each request comes from, and a custom header sends the store or postcode cookie |
| Sponsored and organic mixed | Ads counted as organic rank inflate your share of search | CSS selectors read sponsored and organic results as separate fields |
| Retailer bot protection | Large retailers and grocery sites block repeated searches from one IP | Zenrows' stealth gets through protections such as AWS WAF, PerimeterX (HUMAN) and Akamai |
| Lazy-loaded content | Image carousels, reviews and "more products" appear only after scrolling | Page actions scroll and wait in a full browser render before the page is returned |
| A different template per retailer | Content checks need separate selectors for each retailer, and redesigns break them | Extract returns product fields as JSON without per-retailer selectors |
| The keyword matrix | 200 keywords, 15 retailers and 10 regions is 30,000 search pages a day | Batch runs the whole matrix as one job |

## How to collect digital shelf data with Zenrows

1. **Define the matrix.** List your keywords, retailers, regions or postcodes, and the SKUs you expect to see for each.
2. **Read search pages for rank.** Fetch each retailer search page and name the result links with CSS selectors, keeping sponsored results in their own field.
3. **Audit product pages.** Read each of your product pages with Extract and compare title, images, bullets, rating and availability with your master data.
4. **Run it daily as one job.** Submit the matrix to Batch so scores are ready before the morning category review.

```python Python
# pip install requests
import json
import requests

fields = {
    "results": ".search-result a.product-link @href",
    "sponsored": ".search-result.sponsored a.product-link @href",
}
params = {
    "apikey": "YOUR_ZENROWS_API_KEY",
    "url": "RETAILER_SEARCH_URL?q=oat+milk",
    "mode": "auto",  # Adaptive Stealth Mode
    "proxy_country": "us",
    "css_extractor": json.dumps(fields),
}
page = requests.get("https://api.zenrows.com/v1/", params=params).json()
sponsored = set(page["sponsored"])
for rank, link in enumerate(page["results"], start=1):
    if link in OUR_PRODUCT_LINKS:
        print(rank, link, "sponsored" if link in sponsored else "organic")
```

```bash cURL
curl -X POST "https://async.api.zenrows.com/v1/jobs" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "regular",
    "status": "closed",
    "zenrows_params": {
      "mode": "auto",
      "proxy_country": "us",
      "extract": "auto"
    },
    "tasks": [
      { "url": "RETAILER_A_PRODUCT_URL", "external_id": "OAK-OAT-1L|retailer-a" },
      { "url": "RETAILER_B_PRODUCT_URL", "external_id": "OAK-OAT-1L|retailer-b" }
    ]
  }'
```

```bash CLI
npx -y @zenrows/cli init
zenrows extract RETAILER_A_PRODUCT_URL --autoparse
# shelf.jsonl: one {"url": "..."} per product page, run daily as one job
zenrows batch create shelf.jsonl --proxy-country us --wait
zenrows batch results <job-id> --out shelf-results.jsonl
```

```text Claude Code (MCP)
# Connect once
claude mcp add zenrows -e ZENROWS_API_KEY=YOUR_ZENROWS_API_KEY -- npx -y @zenrows/mcp

# Then ask:
Use Zenrows to open our oat milk product page on these four retailers
and list, per retailer, the title, number of images, rating, review
count and stock status. Flag any title that differs from "Oakfield
Oat Milk 1L, Unsweetened".
```

## Which Zenrows product fits

| If you need to | Use | Why |
|---|---|---|
| Read search positions on one retailer | [Fetch](/products/fetch) | CSS selectors return ordered result links, sponsored and organic apart |
| Audit product content across retailers | [Extract](/products/extract) | Automatic structured extraction returns title, images, rating and availability without per-retailer selectors |
| Run the full keyword, retailer and region matrix daily | [Batch](/products/batch) | Tens of thousands of pages as one job, each tagged with your SKU and retailer |
| Let a category manager check a few pages | [MCP Server](/mcp) | Claude and other MCP clients call Zenrows and return a table |

## What success looks like

| Measure | What good looks like | How to check it |
|---|---|---|
| Rank accuracy | Captured positions match what a shopper in that postcode sees | Weekly manual search from the same region on a sample of keywords |
| Matrix completion | Every keyword, retailer and region cell has a result each day | Share of matrix cells filled per run |
| SKU coverage | Every listed SKU is audited on every retailer that carries it | Audited SKU and retailer pairs divided by expected pairs |
| Content compliance | Gaps against master data are found within a day of appearing | Compare the date a change went live with the date it was flagged |
| Availability signal | Out-of-stock events per retailer and region are visible daily | Out-of-stock count per retailer over time, checked against sell-out data |
| Delivery time | Scores are ready before the daily category review | Time the Batch job finishes against your reporting deadline |

## Digital shelf analytics FAQ

### What is the digital shelf?

The digital shelf is every online page where shoppers find and evaluate your products: retailer search results, category pages, product detail pages, reviews, and marketplace listings. It is the online equivalent of shelf placement in a store, and it changes by retailer, region and hour.

### What is digital shelf analytics?

Digital shelf analytics is measuring that presence with data. Typical metrics are share of search for category keywords, content compliance against your master product data, ratings and reviews, availability, and placement on category pages. Brands track them per SKU and per retailer to find where sales are lost.

### How is share of search measured?

Pick the keywords shoppers use for your category, search each one on each retailer, and record the position of every product on the first page. Your share of search is the share of the top results that belong to your brand. Report sponsored and organic positions separately so ad spend does not hide organic losses.

### Which retailers can I track?

Any retailer whose pages shoppers can see without logging in: Amazon, Walmart, Target, Kroger, Instacart, Tesco, Sainsbury's, Carrefour, Woolworths, Flipkart and regional grocers. Zenrows' stealth handles protected retailers, and geotargeting sets the market.

### Can I track the digital shelf by store or postcode?

Yes. Grocery and big-box retailers set the store through a cookie or a postcode prompt. Send that cookie as a custom header and run one task per postcode, so each rank and stock reading carries its location.

### Should we build digital shelf monitoring or buy software?

Digital shelf software gives you dashboards for the retailers and metrics it supports. Building on a scraping API gives you the raw pages for any retailer, keyword and region you choose, inside your own data warehouse and BI tools. Building fits brands that have a data team, or that sell through retailers a packaged tool leaves out.

### How do I check product content compliance on retailer sites?

Keep a master record per SKU with the approved title, image count, bullets, description and price. Read each retailer's product page daily, compare every field with the master, and flag differences such as a shortened title, a missing image or an outdated claim. Group the gaps by retailer so each account manager gets one list to send. Recheck flagged pages after the fix to confirm the retailer applied it.

## Related use cases

- [Ecommerce web scraping](https://www.zenrows.com/use-cases/ecommerce-web-scraping.md): Product, price, stock, review and seller data from Amazon, Walmart, eBay and Shopify stores, as JSON.
- [Review scraping](https://www.zenrows.com/use-cases/review-scraping.md): Review text, ratings, dates and replies from Amazon, Google, Yelp, Trustpilot and G2, every page.
- [Product data enrichment](https://www.zenrows.com/use-cases/product-data-enrichment.md): Specs, images, descriptions and GTINs from manufacturer and retailer pages, written into the gaps in your PIM.
- [MAP monitoring](https://www.zenrows.com/use-cases/map-monitoring.md): Advertised prices and sellers across marketplaces and resellers, with screenshot evidence of every MAP violation.
- [Retail data scraping](https://www.zenrows.com/use-cases/retail-data.md): Store locations, store-level prices, promotions and click-and-collect stock from grocery and high-street chains.

Start free: https://app.zenrows.com/register. Docs: https://docs.zenrows.com
