Sainsbury's Groceries Scraper avatar

Sainsbury's Groceries Scraper

Pricing

from $3.00 / 1,000 products

Go to Apify Store
Sainsbury's Groceries Scraper

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

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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 searchUS weekly adEU leafletsUS grocery
Sainsbury's Groceries Scraper ◄── you are hereAldi Weekly Ad ScraperLidl Weekly Offers ScraperWalmart 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 maxItems or maxPages
  • 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

FieldRequiredDescription
queriesYesSearch terms such as milk
maxItemsNoStop after this many products. Default 24, maximum 1000
maxPagesNoPages per keyword. Default 1. Up to 60 products per page
nectarOnlyNoKeep only rows with a Nectar promotion

Input example

{
"queries": ["baked beans"],
"maxItems": 24,
"maxPages": 1
}

Output

FieldDescription
titleProduct name
priceCurrent shelf price
regularPricePrice before the current promotion
unitPricePrice per unit
unitOfMeasureUnit, such as ltr or kg
wasUnitPricePrevious unit price
currencyGBP
nectarOfferTrue when a Nectar promotion is present
promotionTextPromotion strap line
eanBarcode when the listing includes one
inStockListing availability
ratingAverage rating when reviews exist
reviewCountNumber of reviews
categoryFirst category name
productUrlProduct 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 nectarOnly and 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 os
from apify_client import ApifyClient
client = 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().items
print(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.

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.