Trolley.co.uk Scraper — UK Grocery Price Comparison avatar

Trolley.co.uk Scraper — UK Grocery Price Comparison

Pricing

from $1.20 / 1,000 result scrapeds

Go to Apify Store
Trolley.co.uk Scraper — UK Grocery Price Comparison

Trolley.co.uk Scraper — UK Grocery Price Comparison

Scrape trolley.co.uk cross-retailer grocery price comparisons: one product, prices at Asda, Tesco, Sainsbury's, Morrisons, Waitrose, Iceland and more, side by side. No login, no cookies.

Pricing

from $1.20 / 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

5 days ago

Last modified

Categories

Share

Scrape trolley.co.uk product pages and get one row per product with every UK retailer's current price for that exact item side by side — Asda, Tesco, Sainsbury's, Morrisons, Waitrose, Iceland and more, whichever retailers Trolley has matched to that product. No login, no cookies.

Why use this actor?

Trolley.co.uk already does the hard part: matching the same grocery product across UK supermarkets. This actor turns that matching into structured data — one product, N retailer prices, ready to load into a spreadsheet or pricing dashboard. Useful for CPG pricing teams checking shelf price consistency, price-comparison sites that want a ready-made retailer match instead of building their own, and anyone tracking how a basket of grocery items moves in price across the big UK chains.

How to scrape Trolley.co.uk data

  1. Enter a Category slug from trolley.co.uk/explore/{category}, for example milks, cheeses, yoghurts, eggs or bries. The actor browses that category's listing pages and follows each product link.
  2. Alternatively, paste specific Product URLs (advanced input) to scrape an exact list of products instead of browsing a category. This overrides Category when set.
  3. Set Max Results to cap how many products the run returns. Category pages return 20 products per page, so the actor pages through /explore/{category} until it has enough or the category runs out.
  4. Run the actor. Each product page contributes one dataset row: the product's own fields (name, brand, pack size, SKU, rating) plus a retailers array with one entry per supermarket that carries it.
  5. Read lowestPrice for the cheapest price found across all retailers on that product, or sort within retailers per row to see which chain is cheapest for that specific SKU.
  6. Use retailerCount to filter out weakly-matched products (a Trolley product page with only one retailer listed is a thinner comparison than one with six).

Input

FieldTypeRequiredDescription
categoryStringNoTrolley.co.uk category slug to browse, e.g. milks, cheeses, yoghurts, eggs, bries. Defaults to milks. Trolley's own /search/ endpoint is robots-disallowed, so discovery goes through category browsing.
productUrlsArrayNoDirect trolley.co.uk product page URLs to scrape instead of browsing a category, e.g. https://www.trolley.co.uk/product/{slug}/{SKU}. Overrides category when set.
maxResultsIntegerNoMaximum number of products to return (1–500, default 20).
proxyConfigurationObjectNoProxy settings. Trolley.co.uk has no anti-bot protection at any tier, so a proxy isn't required for the actor to work, but the free Apify automatic pool is used by default for reliability at scale.

Example input

{
"category": "milks",
"maxResults": 20,
"proxyConfiguration": { "useApifyProxy": true }
}

Output

Each result is one product with a nested array of per-retailer prices — the core value of a comparison site: many prices for the same item on one row.

FieldTypeExample
productNameString"Cravendale Pure Filtered Fresh Semi Skimmed Milk Fresher for Longer (1 Litre)"
brandString"Cravendale"
packSizeString"1 Litre"
skuString"MNJ299"
urlStringFull Trolley product page URL
scrapedAtStringISO 8601 timestamp
lowestPriceNumber1.40
currencyString"GBP"
ratingNumber4.7
reviewCountNumber720
imageUrlStringProduct image URL
categoryString"milks"
retailerCountNumber6
retailersArrayOne entry per retailer, see below

Each entry in retailers:

FieldTypeDescription
nameStringRetailer name, e.g. "Asda", "Tesco", "Waitrose"
priceNumberCurrent price at this retailer, in GBP
originalPriceNumberStruck-through "was" price, when the retailer shows a discount
pricePerUnitStringUnit price, e.g. "£0.14 per 100ml"
promoTextStringPromotion text, e.g. "£1.40 CLUBCARD"
outboundUrlStringOutbound redirect link to the retailer's own product page

Example output

{
"productName": "Cravendale Pure Filtered Fresh Semi Skimmed Milk Fresher for Longer (1 Litre)",
"brand": "Cravendale",
"packSize": "1 Litre",
"sku": "MNJ299",
"url": "https://www.trolley.co.uk/product/cravendale-filtered-fresh-semi-skimmed-milk-fresher-for-longer/MNJ299",
"scrapedAt": "2026-08-10T19:49:01.798Z",
"lowestPrice": 1.40,
"currency": "GBP",
"rating": 4.7,
"reviewCount": 720,
"imageUrl": "https://www.trolley.co.uk/img/product/MNJ299",
"category": "milks",
"retailerCount": 6,
"retailers": [
{
"name": "Waitrose",
"price": 1.40,
"originalPrice": 2.10,
"pricePerUnit": "£0.14 per 100ml",
"promoText": null,
"outboundUrl": "https://redirect.trolley.co.uk/open_store.php?i=35606712&p=MNJ299&sp=11"
},
{
"name": "Tesco",
"price": 1.75,
"originalPrice": null,
"pricePerUnit": "£0.18 per 100ml",
"promoText": "£1.40 CLUBCARD",
"outboundUrl": "https://redirect.trolley.co.uk/open_store.php?i=34250363&p=MNJ299&sp=2"
}
]
}

FAQ

Does this actor scrape the retailer sites (Tesco, Asda, etc.) directly? No. It scrapes trolley.co.uk, which has already matched the same product across retailers and published each one's current price on one page. That matching is Trolley's own work — this actor just turns it into structured data.

Why does one product only show one retailer? Trolley's own retailer coverage varies per product — not every item is tracked at every chain. retailerCount tells you how many retailers were matched for that specific product, so you can filter out thin comparisons.

How is discovery done, since /search/ is disallowed by robots.txt? The actor browses trolley.co.uk/explore/{category} listing pages instead, which are not disallowed, and follows each product link found there.

Can I scrape a fixed list of products instead of browsing a category? Yes, use productUrls with direct Trolley product page links. This overrides category.

Cost estimate

This actor uses roughly 1-2 requests per returned product (one category listing page shared across ~20 products, plus one product-detail page per result). At standard Apify STANDARD tier pricing, that works out to a fraction of a cent per product for typical runs.

Limitations

  • Only products Trolley.co.uk has itself matched across retailers are covered — this actor does not independently discover products at each supermarket.
  • retailerCount and which retailers appear varies per product and can change as Trolley updates its own matching.
  • Prices reflect Trolley's most recently indexed price per retailer, which may lag the live price on the retailer's own site by up to a few hours.
  • Data is scraped from the public website and may change without notice.
  • Trolley.co.uk's Terms of Service state a general restriction on automated access; this actor only requests publicly served, non-authenticated pages and does not access the disallowed /search/ endpoint.

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.