Waitrose Scraper - UK Grocery Products & Prices avatar

Waitrose Scraper - UK Grocery Products & Prices

Pricing

from $5.00 / 1,000 result scrapeds

Go to Apify Store
Waitrose Scraper - UK Grocery Products & Prices

Waitrose Scraper - UK Grocery Products & Prices

Scrape the full Waitrose UK grocery catalogue: names, brands, prices, price-per-unit, promotions, ratings, and images. Full category-tree walk with exact per-category counts. No login or cookies required.

Pricing

from $5.00 / 1,000 result scrapeds

Rating

0.0

(0)

Developer

Studio Amba

Studio Amba

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Waitrose Scraper

Scrape the full Waitrose UK grocery catalogue — product names, brands, prices, price-per-unit, promotions, ratings and images — with verified per-category counts. No login, no cookies.

Why use this actor?

Waitrose is one of the UK's premium supermarkets, and its online grocery range (roughly 25,000 SKUs) is a clean reference set for price monitoring, competitor analysis, product cataloguing, and market research. Waitrose blocks non-UK traffic and runs Akamai anti-bot, so the data is hard to reach with a normal scraper. This actor solves both and walks the entire category tree, so you get the whole catalogue, not just the first page of a search.

Buyers who use this: pricing analysts, grocery and FMCG brands tracking their own and competitor shelf prices, market researchers, and data teams building UK grocery datasets.

No cookies, no login

This actor reads only public catalogue pages. It never logs in, never needs a Waitrose account, and never touches personal data. Every request is routed through a Bright Data Web Unlocker UK exit, which handles the geo-block and the Akamai Bot Manager challenge for you.

How it works

Waitrose category pages are server-side rendered. Each page embeds a JSON blob containing the full product objects for that category, the exact product count (totalMatches), and the list of child categories. This actor:

  1. Discovers the top-level grocery departments from the site navigation.
  2. Fetches each category page through Bright Data (UK exit) and parses the embedded product data.
  3. Recurses down the category tree to the leaf shelves.
  4. De-duplicates every product by its Waitrose line number.

Because each category reports its exact totalMatches, coverage is verifiable: the run stores a CATEGORY_TOTALS record in the key-value store so you can check the count captured against the count Waitrose reports.

How to scrape Waitrose data

  1. Get a Bright Data account and a Web Unlocker zone (web_unlocker1). Copy your API key.
  2. Paste the key into the Bright Data API Key input field (or set the BRIGHT_DATA_API_KEY environment variable).
  3. Leave Category empty to scrape the whole catalogue, or set it to a single department slug (for example fresh_and_chilled, food_cupboard, frozen) to scope the run. Or set Search Query to search by keyword instead (see below) — the two are mutually exclusive; a search query always wins.
  4. Set Max Products — a small number (20) for a quick test, a large number (30000) for the full catalogue.
  5. Run the actor. Results stream into the dataset as they are found.

The category slug is the part of the browse URL after .../browse/groceries/. For example https://www.waitrose.com/ecom/shop/browse/groceries/bakery has the slug bakery, and a nested shelf uses a path such as fresh_and_chilled/cheese.

Set Search Query (for example heinz baked beans or oat milk) to search the whole catalogue by keyword instead of walking a category. This replaces the category walk entirely and is bounded by Max Products.

Waitrose's own search page and search API aren't reachable for scraping — its robots.txt disallows the search results URL and the token endpoint needed to call the search API directly, and Bright Data enforces robots.txt. Instead this actor matches your query against Waitrose's public product sitemap (~18,700 products), then fetches each matching product's own page for full data — name, brand, price, rating, images, and barcode. All words in the query must appear in the product's name; unlike a category run, coverage against Waitrose's own totals is not tracked for search results, and the fetchBarcodes option is not needed for search — barcodes are included automatically since each match already requires its own product page fetch.

Input

FieldTypeRequiredDescription
brightDataApiKeyStringYes*Bright Data Web Unlocker API key. *Or set BRIGHT_DATA_API_KEY.
categoryStringNoGrocery department/shelf slug to scope the run. Empty = full catalogue.
searchQueryStringNoKeyword search across the catalogue, e.g. heinz baked beans. When set, replaces the category walk entirely.
maxProductsIntegerNoMaximum unique products to return (default 20).
sortByStringNoListing order hint (cosmetic).
fetchBarcodesBooleanNoFetch the EAN/GTIN barcode per product (default false). Adds one extra Bright Data request per product — see below.
proxyConfigurationObjectNoNot used — Bright Data handles the UK exit.

Output

Each result contains:

FieldTypeExample
nameString"Waitrose Italian Summer Salad Kit"
brandString"Waitrose Ltd"
priceNumber2.50
currencyString"GBP"
originalPriceNumber3.00
pricePerUnitString"£20.83/kg"
discountString"Any 3 for 2 Cheapest Item Free Mix & Match"
productIdString"939428"
eanString"5063210100002" (with fetchBarcodes)
barcodesArray["5063210100002"] (with fetchBarcodes)
ratingNumber4
reviewCountNumber24
imageUrlStringPrimary product image URL
imageUrlsArrayAll image URLs
descriptionString"Pack size: 120g"
categoryString"301135"
categoriesArray["Groceries", "Fresh & Chilled", ...]
urlStringFull product page URL
scrapedAtStringISO 8601 timestamp

Stable product identifier

productId is the Waitrose line number. It is the identifier Waitrose itself uses for the product across its site and stays the same across re-scrapes, price changes and category moves — use it as the join key when comparing runs over time.

EAN barcodes (fetchBarcodes)

Waitrose only exposes barcodes on product detail pages, not on category listings. With fetchBarcodes enabled the actor fetches each product's detail page and adds two fields:

  • ean — the primary retail EAN/GTIN, checksum-validated where possible.
  • barcodes — every code Waitrose lists (some products carry an internal or variable-weight code alongside the retail EAN).

This costs one extra Bright Data request per product on top of the normal catalogue walk. On a full ~16,000-product catalogue that roughly doubles the Bright Data spend and run time, so it is off by default. It is most useful for cross-store price matching, where the EAN is the join key between retailers.

Example output

{
"name": "Waitrose Italian Summer Salad Kit",
"brand": "Waitrose Ltd",
"price": 2.50,
"currency": "GBP",
"pricePerUnit": "£20.83/kg",
"productId": "939428",
"rating": 4,
"reviewCount": 24,
"imageUrl": "https://ecom-su-static-prod.wtrecom.com/images/products/11/LN_939428_BP_11.jpg",
"description": "Pack size: 120g",
"category": "301135",
"categories": ["Groceries", "Fresh & Chilled", "Fresh Salad & Herbs", "Salad Bags"],
"url": "https://www.waitrose.com/ecom/products/waitrose-italian-summer-salad-kit/939428-1-2",
"scrapedAt": "2026-07-03T14:30:00.000Z"
}

Cost estimate

A full-catalogue run visits every grocery category page once (roughly 1,500–2,500 pages) through Bright Data Web Unlocker to cover ~25,000 products. Scoping to a single department is far cheaper — a department such as fresh_and_chilled (~3,600 products) walks a few hundred category pages. Test runs with a small maxProducts cost a handful of requests.

Limitations

  • Requires a Bright Data Web Unlocker key with a GB exit. Waitrose drops non-UK connections, so this is mandatory.
  • Stock/availability is delivery-slot and postcode dependent on Waitrose, so it is not reported per product. The catalogue, pricing, promotions and ratings are.
  • Each category page returns its top products; the catalogue is completed by walking the tree to leaf level. A small number of very large leaf shelves may not expose their full tail — check the CATEGORY_TOTALS record for coverage.
  • Data is scraped from the public website and may change without notice. Respect the website's terms of service and use responsibly.

Need this data on a schedule, or a custom version?

We run this scraper as a managed service for businesses: scheduled runs, deduplication, delta detection, and delivery to your inbox, Google Sheets, or API — maintenance included. We can also build a custom version with your exact fields and filters, or combine multiple sources into one feed.

See studioamba.dev/services or email hello@studioamba.dev for a free data sample. We maintain 300+ European web scrapers and answer within one business day.