Sainsbury's Groceries Scraper
Pricing
from $3.00 / 1,000 products
Sainsbury's Groceries Scraper
Scrape Sainsbury's UK grocery search. Export shelf price, unit price, Nectar offers, EAN, rating, and stock. HTTP, no browser.
Pricing
from $3.00 / 1,000 products
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Disclaimer: Unofficial tool — not affiliated with, sponsored by, or endorsed by Sainsbury's Supermarkets Ltd or its affiliates. Data is read from publicly accessible grocery search results only. No login. You are responsible for complying with applicable law (including GDPR where personal data appears) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.
Sainsbury's UK grocery prices, unit prices, Nectar offers, and EAN from search. This Sainsbury's scraper is an API alternative for price monitoring. Paste keywords. Each dataset row is one product. Run it from Python, Node.js, or MCP and export JSON.
| UK grocery search | US weekly ad | EU leaflets | US grocery |
|---|---|---|---|
| Sainsbury's Groceries Scraper ◄── you are here | Aldi Weekly Ad Scraper | Lidl Weekly Offers Scraper | Walmart Scraper |
When to use
- Snapshot Sainsbury's UK shelf prices for a keyword
- Flag Nectar promotions next to the current shelf price and the regular price
- Match products by EAN, unit price, and category
Use a grocery circular Actor when you need a weekly ad rather than the live online shelf.
Key features
- Search keywords, paginated until
maxItemsormaxPages - Price, regular price, unit price, previous unit price, currency, stock flag
- Nectar promotion text and a Nectar boolean
- EAN, rating, review count, category
- HTTP fetch, 256 MB, no browser
Input
| Field | Required | Description |
|---|---|---|
queries | Yes | Search terms such as milk |
maxItems | No | Stop after this many products. Default 24, maximum 1000 |
maxPages | No | Pages per keyword. Default 1. Up to 60 products per page |
nectarOnly | No | Keep only rows with a Nectar promotion |
Input example
{"queries": ["baked beans"],"maxItems": 24,"maxPages": 1}
Output
| Field | Description |
|---|---|
title | Product name |
price | Current shelf price |
regularPrice | Price before the current promotion |
unitPrice | Price per unit |
unitOfMeasure | Unit, such as ltr or kg |
wasUnitPrice | Previous unit price |
currency | GBP |
nectarOffer | True when a Nectar promotion is present |
promotionText | Promotion strap line |
ean | Barcode when the listing includes one |
inStock | Listing availability |
rating | Average rating when reviews exist |
reviewCount | Number of reviews |
category | First category name |
productUrl | Product page URL |
Output example
{"source": "sainsburys.co.uk","productId": "123","title": "Branston Baked Beans 4x410g","ean": "5000354900012","price": 2.5,"regularPrice": 3,"unitPrice": 1.52,"unitOfMeasure": "kg","wasUnitPrice": 1.83,"currency": "GBP","inStock": true,"nectarOffer": true,"promotionText": "Buy 1 for 2.5","promotionEndsAt": "2026-10-12T23:00:00Z","rating": null,"reviewCount": 0,"category": "Baked beans","productUrl": "https://www.sainsburys.co.uk/gol-ui/product/branston-baked-beans","query": "baked beans"}
Use cases
- Price check — export shelf and unit price for one keyword
- Nectar watch — turn on
nectarOnlyand keep the strap line and regular price - Catalog match — join EAN to another grocery file
Integration examples
Replace APIFY_TOKEN with your Apify token. The Actor name is crawloop/sainsbury-scraper.
Node.js
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor("crawloop/sainsbury-scraper").call({queries: ["baked beans"],maxItems: 24,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("crawloop/sainsbury-scraper").call(run_input={"queries": ["baked beans"],"maxItems": 24,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
cURL
curl "https://api.apify.com/v2/acts/crawloop~sainsbury-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d "{\"queries\":[\"baked beans\"],\"maxItems\":24}"
MCP and AI assistants
Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call this Actor by its Store name.
Example prompts:
- "Run Sainsbury's Groceries Scraper for baked beans and return title, price, unit price, Nectar, and EAN as JSON"
- "Scrape Sainsbury's search for milk with nectarOnly and list the promotion text"
- "Pull 24 Sainsbury's milk rows, then run Aldi Weekly Ad Scraper for ZIP 60174 and compare milk prices"
Suite next step
After Sainsbury's UK shelf prices, run Aldi Weekly Ad Scraper for a US weekly circular, or Walmart Scraper for ZIP-local US grocery prices.
Related Actors
- Sainsbury's Groceries Scraper ◄── you are here
- Aldi Weekly Ad Scraper — ALDI US weekly ad and ALDI Finds
- Lidl Weekly Offers Scraper — Lidl weekly leaflets
- Walmart Scraper — ZIP-local Walmart prices
- DoorDash Menu Scraper — chain menu items
FAQ
Does this open a product page for nutrition and ingredients? No. It reads the search listing: price, unit price, Nectar text, EAN, rating, and category.
Are these prices for a chosen store?
No. Rows are the online search listing. inStock is the listing flag, not stock at a postcode.
What if the keyword matches nothing? The run finishes with an empty dataset. Other keywords in the same input still run.
How many products are on a page?
Up to 60. Raise maxPages when you need more than one page. maxItems caps the combined rows.