BasketWatch Irish Grocery Data - Aldi|Tesco|SuperValu|Dunnes
Pricing
from $5.00 / 1,000 results
BasketWatch Irish Grocery Data - Aldi|Tesco|SuperValu|Dunnes
Weekly product, price, unit price and promotion data for the four major Irish supermarkets. Thin client — fetches from BasketWatch's existing API (so prices are the same weekly snapshot as the BasketWatch dashboard, no scraping happens at run-time).
Pricing
from $5.00 / 1,000 results
Rating
0.0
(0)
Developer
BasketWatch
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
BasketWatch — Irish Grocery Data
Every SKU. Every shelf price. Every promotion. Across all four major Irish supermarkets — Aldi, Tesco, SuperValu and Dunnes Stores — refreshed weekly.
The only data feed on Apify Store that covers the full Irish grocery market in one place. 47,514 live SKUs as of this week — 16,468 of them currently on promotion — structured into clean JSON rows, with promotional pricing, loyalty-card prices, multibuys, was-prices and offer-validity windows already parsed and ready for analysis.
🗓️ Refresh schedule
All four retailers are scraped every Friday morning at 02:00 GMT. Every actor run from that point in the week reads from the latest weekly snapshot — the
scrape_datefield on each row tells you exactly when the price was captured. Need a faster cadence (daily, twice-weekly, on-demand)? See the contact details at the bottom of this page.
Why this exists
The Irish grocery market is dominated by four retailers running on three different e-commerce platforms — Aldi's bespoke storefront, Tesco Ireland's own stack, and the Mercatus platform shared by SuperValu and Dunnes Stores. Each anti-bots aggressively and emits prices in a different shape. Building this in-house means:
- 4 separate scrapers, each with its own regex + class-name extraction rules
- Anti-bot bypass infrastructure that survives Cloudflare and JavaScript challenges
- Weekly maintenance as each retailer's markup drifts
- Data-quality fixes for the inevitable per-unit-vs-pack-price misreads, cents-suffix parse errors, promo-badge collisions, etc.
- Cross-retailer SKU matching by brand + canonical pack size
We've done all of that and packaged it into one Apify actor. You call the endpoint, you get clean rows.
What you get
Pick a retailer and a dataset — get back structured rows you can load directly into pandas, BigQuery, Excel, your warehouse or pipeline:
| Dataset | What's in each row |
|---|---|
| products | SKU id, name, brand, pack size + canonical units, current shelf price, unit price (€/kg, €/L), full category breadcrumb, product URL, first-seen + last-seen dates |
| promotions | Only products currently on offer — offer label (e.g. "3 for €5", "SAVE €0.75", "Only €2.50"), was-price, validity window ("13th May - 15th Jun"), Tesco Clubcard prices, SuperValu Real Rewards and Dunnes member-only pricing where promoted |
| new-products | Products newly listed within a configurable window — range additions / launches |
| removed | Products that have dropped off the catalogue — delistings / range cuts |
| changes | Week-over-week price movements with delta and % change (compares the latest weekly snapshot to the previous one) |
Available data per retailer
Any combination below is valid input to the actor — set store and
dataset to one of these and you'll get the matching rows:
dataset ↓ store → | Aldi | Tesco | SuperValu | Dunnes |
|---|---|---|---|---|
products | ✓ 2,948 | ✓ 19,057 | ✓ 11,069 | ✓ 14,440 |
promotions | — (Aldi doesn't publish multibuy promos) | ✓ 7,089 on offer | ✓ 3,219 on offer | ✓ 6,160 on offer |
new-products | ✓ | ✓ | ✓ | ✓ |
removed | ✓ | ✓ | ✓ | ✓ |
changes | ✓ | ✓ | ✓ | ✓ |
Counts are the live current SKU figures (refreshed weekly). new-products
/ removed row counts depend on the days_back window you pass; changes
returns however many SKUs moved week-over-week.
Example input:
{ "store": "tesco", "dataset": "promotions", "max_products": 1000 }
Returns up to 1,000 Tesco products currently on offer — with Clubcard
prices, was-prices, multibuy labels and offer-validity windows already
parsed. Search by product name (e.g. heinz, cadbury, kerrygold)
is supported on the products dataset via the search input.
Sample output
Input:
{"store": "tesco","dataset": "promotions","max_products": 50}
Output (one row per product on offer):
{"id": "tesco:307552934","store": "tesco","name": "Heinz Baked Beans In Tomato Sauce 415G","brand": "Heinz","category_path": "Food Cupboard > Tinned Food > Tinned Beans, Pasta & Pulses","pack_size": "415G","price": 1.49,"unit_price": 3.59,"unit_basis": "1 KG","offer_text": "Any 3 for £3 Clubcard Price","was_price": 1.85,"clubcard_price": 1.00,"offer_valid": "13th May - 9th Jun","url": "https://www.tesco.ie/groceries/...","scrape_date": "2026-05-21"}
Use cases
| Buyer | What they do with it |
|---|---|
| CPG brand teams | Track competitor pricing, promo depth and assortment share across all four retailers from a single feed |
| Retail suppliers | Monitor own-brand and private-label pressure against your products, weekly |
| Market research & consultancies | Continuous Irish grocery price index, cost-of-living tracking, basket analysis |
| Journalism & data investigations | Cited, timestamped, reproducible source data for stories on food inflation, shrinkflation, promotional intensity |
| Public bodies & regulators | Independent grocery price evidence for consumer protection, competition oversight and official statistics |
| Academic & policy research | Household-budget research, food-policy studies, longitudinal price tracking |
How it works
This actor is a thin client over a hardened weekly scrape pipeline. The four retailers are scraped on a fixed weekly cadence — every Friday at 02:00 GMT — by infrastructure that handles:
- Mercatus storefront parsing (SuperValu + Dunnes) with corrected
ProductPriceselectors — no per-unit-price-as-headline misreads - Anti-bot bypass for Cloudflare-fronted endpoints
- Multipack canonicalisation —
"4 x 330ml","12 Pack (330 ml)"and"2L"all normalise to comparable units - Promo capture — offer label + was-price + validity window from
PromotionLabelBadge/ProductWasPrice/OfferValidMessageelements - Loyalty-tier pricing — Tesco Clubcard prices, SuperValu Real Rewards pricing, Dunnes member offers
- Data-quality checks — week-over-week catalogue-drop detection, per-product outlier sweeps, regression-tested parsers
You don't pay for any of that scraping cost on a per-call basis — the pipeline runs once a week regardless. Each actor run reads from the already-fetched snapshot, so:
- Fast: <2 seconds per page of results (vs 5-15 minutes for a live scrape)
- Cheap to fulfil: marginal cost per row is fractions of a cent
- Consistent: the same parser fixes and regression-tested extraction rules across every call
The scrape_date field on every row tells you exactly when each price was
captured.
Weekly (Friday 02:00 GMT) is the default cadence. Daily or twice-weekly snapshots can be stood up for buyers with a continuous-monitoring use case (e.g. live inflation tracking, real-time competitive-pricing dashboards) — the underlying scrape infrastructure already supports it; gating is on committed demand rather than engineering. Reach out to basketwatchireland@gmail.com if that's you.
Pricing
Pay-per-result — only pay for rows you actually receive. Your Apify subscription tier determines the per-row rate:
| Your Apify plan | Per result | Per 1,000 rows | Full Aldi (2,948) | Full Tesco (19,057) |
|---|---|---|---|---|
| Free (no subscription) | $0.05 | $50.00 | ~$147 | ~$953 |
| Starter (Bronze) | $0.01 | $10.00 | ~$29 | ~$191 |
| Scale (Silver) | $0.007 | $7.00 | ~$21 | ~$133 |
| Business (Gold) | $0.005 | $5.00 | ~$15 | ~$95 |
Plus a flat $0.05 per run (Actor start) — waived for the first 5 seconds of runtime. Platform compute is included; no separate platform charges on top.
Maximum rows per run is configurable up to 100,000 — enough for a full multi-retailer pull in a single run if you need it.
Need unlimited API access, bulk historical exports or a direct integration that bypasses Apify? Email basketwatchireland@gmail.com.
Coverage (live figures, refreshed weekly)
| Retailer | SKUs | On promotion now | Promotional data | Loyalty pricing |
|---|---|---|---|---|
| Aldi | 2,948 | — | Limited (Aldi doesn't publish multibuy promos) | — |
| Tesco | 19,057 | 7,089 | Full incl. multibuys & "Tesco Finest" | Tesco Clubcard prices as a dedicated field |
| SuperValu | 11,069 | 3,219 | Full incl. "3 for €X" multibuys, was-prices, validity windows | SuperValu Real Rewards member pricing captured in offer label |
| Dunnes Stores | 14,440 | 6,160 | Full incl. multibuys, was-prices, validity windows | Dunnes member offers captured in offer label |
| Total | 47,514 | 16,468 |
Every actor run reflects the most recent weekly snapshot. The scrape_date
field on each row tells you when that price was captured.
Limits
- Hard cap of 100,000 rows per run. Large pulls scale linearly in cost.
- Search filtering currently applies to the products dataset only.
Support & contact
📧 basketwatchireland@gmail.com
Email directly for any of the following — typical response within 24 hours:
- Scraper issues or data-quality questions — wrong price, missing product, weird pack-size value, suspicious week-over-week jump
- Commercial enquiries — custom scraping solutions, additional Irish retailers, scraping for other markets (UK, NI, EU), bespoke integrations
- Higher-cadence pulls — daily / twice-weekly / on-demand snapshots
- Bulk historical exports — multi-year price history, full back-catalogue
- Direct API access — integrate against the BasketWatch API directly (skipping Apify) for unlimited pulls and lower marginal cost
You can also use Apify's Contact maintainer button on this listing — it routes to the same inbox.
BasketWatch is not affiliated with Aldi Ireland, Tesco Ireland, Musgrave SuperValu or Dunnes Stores. Data is collected from publicly available sources for lawful market research and price comparison purposes.