Sainsbury's Scraper: UK Grocery Prices avatar

Sainsbury's Scraper: UK Grocery Prices

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Sainsbury's Scraper: UK Grocery Prices

Sainsbury's Scraper: UK Grocery Prices

Search Sainsbury's online groceries by any term. Get rows with shelf price, unit price, Nectar price, promotions with dates, ratings, categories and EAN barcodes. Filter by price, rating and promotions. Unofficial.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

reventadata

reventadata

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Sainsbury's Scraper: Grocery Prices, Nectar and Promotions

Unofficial. This Actor is not affiliated with, authorised by, endorsed by, or in any way officially connected to Sainsbury's. "Sainsbury's" is a trademark of its respective owner and is used here only to describe what this tool reads. It reads the same public search pages a browser does.

Search the UK Sainsbury's online grocery store (sainsburys.co.uk) for any grocery term and get one clean row per product: shelf price in pounds sterling, price per litre, kilo or item, Nectar card price, promotions with their dates, rating, categories and barcodes.

What does it do?

For each search term it walks the result pages of the Sainsbury's online grocery search, reads the product data the page embeds, and saves one row per product. Only products the page itself tags as search results are saved; tiles without that tag are not. On the milk page 1 capture of 2026-10-21, 11 of 66 product objects had no tag, and 9 of those 11 are the ids listed in the page's sponsored-ad metadata; none of the 55 tagged ones is. The other 2 were not attributed.

Why use it?

  • Prices as shoppers see them. price is the price printed on the product tile. When the tile shows a Nectar card price, price is that price, priceIsNectar is true and regularPrice holds the price without it.
  • Unit prices. unitPrice and unitMeasure (per litre, per kg or per ea) make products of different sizes comparable.
  • Promotions as data. Each promotion carries its type, its text (for example Meal Deal for £5.50), whether it needs a Nectar card, its price before the promotion, and its start and end dates.
  • Filters that run before you pay. Price band, minimum rating, promotions only, exact matches only, words the name or category must or must not contain.
  • Barcodes. eans lists the product's EAN codes for matching against other retailers.

How to use it

  1. Put one or more grocery terms in searchQueries, for example milk or oat milk.
  2. Set maxItems (rows to save) and, if you want, a sort order and filters.
  3. Run the Actor and download the dataset as JSON, CSV or Excel.

Input

FieldTypeDescription
searchQueriesarrayGrocery search terms, one search per term.
maxItemsintegerTotal products to save across all queries, counted after the filters. Default 100. Queries run in the order given and the run stops once the cap is reached, so later queries may never be searched.
maxPagesintegerResult pages per query, 1 to 20. Default 6, which gives up to about 360 products per query (60 per page). The site serves pages until its own result total is used up; the Actor stops at the first empty page.
sortstringRELEVANCE, PRICE_ASC, PRICE_DESC or RATING. The site sorts by the price on the tile in pounds, not by unit price.
minPrice, maxPricenumberPrice band in pounds.
minRatingnumberMinimum average rating, 0 to 5. Unrated products are dropped when set.
onlyPromotionsbooleanKeep only products with at least one promotion.
exactMatchesOnlybooleanDrop the lower-ranked related results the site appends (rows whose relevance is 2).
includeKeywords, excludeKeywordsarrayWords the product name or category must / must not contain, ignoring case and accents.
proxyConfigurationobjectApify Unblocker (default, and the only transport measured to work with this Actor's HTTP client, httpx). Plain and datacenter requests get an Access Denied page; a residential proxy returned it on 25 of 25 test pages with this Actor's HTTP client.

Sample input

{
"searchQueries": ["milk"],
"maxItems": 20,
"maxPages": 1,
"sort": "PRICE_ASC"
}

Output

One row per product:

FieldTypeDescription
idstringSainsbury's product id.
namestringProduct name.
urlstringProduct page URL.
pricenumberShelf price in GBP, the Nectar price when priceIsNectar is true.
currencystringAlways GBP.
unitPrice, unitMeasurenumber / stringPrice per unit and the unit, or null. Values seen: ltr, kg and ea.
regularPricenumber / nullThe price before the product's fixed-price promotion (SIMPLE_FIXED_PRICE), or null when it has none. Multibuy and meal-deal promotions do not set it; their price is the normal shelf price.
priceIsNectarbooleanTrue when price needs a Nectar card.
onPromotionbooleanTrue when the product has at least one promotion.
promotionsarraytype, text, isNectar, regularPrice, startsAt, endsAt for each promotion. Inside a promotion, regularPrice is the product's price before the promotion: for a fixed-price promotion it is higher than price, for multibuy and meal deals it equals price.
ratingnumber / nullAverage rating out of 5, null when the product has no reviews.
reviewCountintegerNumber of reviews, 0 when there are none.
categoriesarrayCategory names.
imagestringImage URL.
eansarrayEAN barcodes.
isAvailablebooleanAvailability flag the site reports.
relevanceinteger1 for an exact match, 2 for a related result.
matchedKeywordstringThe query that returned the product.
pageintegerResult page the product came from.
scrapedAtstringISO 8601 timestamp.

Sample output

Taken from a real row (2026-10-21), with scrapedAt set to a fixed time:

{
"id": "7657802",
"name": "Sainsbury's 2L Fresher for Longer Filtered Semi-Skimmed Milk",
"url": "https://www.sainsburys.co.uk/groceries/product/sainsburys-2l-fresher-for-longer-filtered-semi-skimmed-milk",
"price": 1.95,
"currency": "GBP",
"unitPrice": 0.98,
"unitMeasure": "ltr",
"regularPrice": 2.2,
"priceIsNectar": true,
"onPromotion": true,
"promotions": [
{
"type": "SIMPLE_FIXED_PRICE",
"text": "Buy 1 for 1.95",
"isNectar": true,
"regularPrice": 2.2,
"startsAt": "2026-10-06T23:00:00Z",
"endsAt": "2026-10-27T00:00:00Z"
}
],
"rating": 4.77,
"reviewCount": 362,
"categories": [
"Fresh milk",
"Dairy & chilled essentials"
],
"image": "https://assets.sainsburys-groceries.co.uk/gol/7657802/image.jpg",
"eans": [
"0000000133845"
],
"isAvailable": true,
"relevance": 1,
"matchedKeyword": "milk",
"page": 1,
"scrapedAt": "2026-10-21T12:00:00+00:00"
}

Limits

  • Results per query follow the site's own total. Measured 2026-10-21 with maxPages 7 or more: milk had 329 results over 6 pages, bread 371 over 7 pages (page 7 held 11 products) and chocolate 770 over 13 pages. With the default maxPages of 6 a query stops at about 360 products, so raise maxPages (ceiling 20, about 1,200 products) for broad terms. Beyond 770 results for one term was not measured; split a very broad term into several narrower searches.
  • Some results are related products, not exact matches. On bread 228 of 368 rows had relevance 2. Turn on exactMatchesOnly to keep only relevance 1.
  • Prices and promotions are what the site serves to an anonymous visitor with no postcode, store or delivery slot set; the proxy exit's location is not pinned.
  • Prices are in pounds sterling (GBP).
  • Rows are read from the page as served; the Actor reports a failed run when it cannot read any product.
  • A run that saves zero rows fails instead of finishing empty, so a mistyped term or an over-strict filter is visible.

How fast is it?

About 5 to 7 seconds per result page of up to 60 products. Measured 2026-10-21: 769 chocolate products (site total 770) over 14 pages (the last one empty) in 94 seconds. bread (7 pages, 368 products) took 33 seconds.

How much does it cost to scrape Sainsbury's?

Pay-per-event: $0.001 per result saved to the dataset ($1.00 per 1,000 results), plus $0.00005 charged once when the run starts. No subscription. Filters run before a row is saved, so rows they drop are not charged.

FAQ

Is a proxy required? Yes. Sainsbury's returns an Access Denied page to plain and datacenter requests. The Actor defaults to Apify Unblocker, the transport that returned a real search page on 25 of 25 test searches (2026-10-21).

Is price the Nectar price? When the tile shows a Nectar card price, yes: priceIsNectar is true and regularPrice holds the price without the card. Otherwise price is the plain shelf price.

Why is rating null but reviewCount 0? The product has no reviews. In 1,137 rows from two runs on 2026-10-21, 194 had no reviews: rating null, reviewCount 0.

Why do I get products that are not what I typed? After the exact matches the site appends related products. They are marked relevance 2; exactMatchesOnly drops them.

Does it cover stores outside the UK? No. It reads sainsburys.co.uk only, which is the UK storefront.

Does it use my Sainsbury's or Nectar account? No. It sends no login and sees what an anonymous visitor sees.

More scrapers

ActorWhat it scrapes
Amazon Product & Price ScraperAmazon product listings and prices
Idealo Price Comparison ScraperIdealo price comparison listings
Gumtree UK ScraperGumtree UK, any category, second-hand listings
AliExpress Product & Price ScraperAliExpress products and prices
Shopify Store MonitorPrice and stock changes on Shopify stores