Harrods Scraper — Luxury Product Prices, Stock & Images avatar

Harrods Scraper — Luxury Product Prices, Stock & Images

Pricing

from $1.20 / 1,000 result scrapeds

Go to Apify Store
Harrods Scraper — Luxury Product Prices, Stock & Images

Harrods Scraper — Luxury Product Prices, Stock & Images

Scrape harrods.com, the UK's flagship luxury department store: product names, brands, prices, per-size stock, images, descriptions and breadcrumb categories from category browsing or site search, unblocked with Bright Data Web Unlocker.

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

15 hours ago

Last modified

Categories

Share

Harrods Scraper

Pull product data from harrods.com, the UK's flagship luxury department store. This scraper reads Harrods' own server-rendered category pages and product pages, so it returns clean, structured data — name, brand, price, per-size stock, images, description — for real catalogue listings, not a scraped screenshot of a page.

How to scrape Harrods data

Point the actor at a Harrods category URL (e.g. https://www.harrods.com/en-gb/women-clothing or https://www.harrods.com/en-gb/designers/gucci) and it pages through that category's own listing, 60 products per page, until it hits maxResults. Or give it a free-text searchQuery (e.g. "gucci bag") to run against Harrods' own site search instead.

Harrods sits behind Akamai Bot Manager: a plain request to any harrods.com path — including /robots.txt — comes back as a direct 403 Access Denied from Akamai's edge. This actor routes every request through Bright Data's Web Unlocker, which clears the block, so you don't need your own proxy or browser-automation setup.

Harrods runs on the SCAYLE commerce platform (Nuxt 3 frontend) with Algolia for on-site search. Category pages are fully server-rendered and embed a complete application/ld+json ItemList block — one entry per listed product, with name, SKU, URL, image, brand, price, currency and stock status already structured — so category-mode results come straight out of the page HTML with no extra requests. Harrods' /en-gb/search page, by contrast, is client-rendered (Algolia has no public key exposed in the bundle), so search mode collects the product links Harrods still renders into that page and fetches each product's own page to get its data — one extra Bright Data request per result, see the cost note below.

Every product page also carries a small embedded data blob (Nuxt's SSR payload) that includes SCAYLE's real per-size stock ladder — the actual variant IDs and stock quantities feeding the "Add to Bag" size picker, not just a size list. Turn on fetchProductDetails (or use search mode, which always fetches details) to get that per-size breakdown, plus the full description, image gallery, colour and breadcrumb category.

If you don't provide any input, it defaults to scraping Harrods' Women's Clothing category as a demo.

Input

FieldTypeDescription
categoryUrlstringA Harrods category/browse page URL. Paged automatically. Ignored when searchQuery is set (default: https://www.harrods.com/en-gb/women-clothing)
searchQuerystringA free-text search term run against Harrods' own site search. When set, replaces categoryUrl entirely and forces per-product detail fetching
maxResultsintegerCap on number of products returned (default: 20, max: 500)
fetchProductDetailsbooleanOFF by default. ON adds description, full image gallery, colour, breadcrumb category and per-size stock — at the cost of one extra Bright Data request per product. Always on in search mode.
brightDataApiKeystringYour own Bright Data API key, if you want to use your own Web Unlocker zone instead of the actor's built-in one
proxyConfigurationobjectNot used — this actor reaches harrods.com exclusively through Bright Data, which handles unblocking on its own. Kept for input-shape compatibility.

What you get back

FieldTypeExample
namestring"Agnona Cashmere Lipstick Sweater"
brandstring"Agnona" — falls back to "Harrods" for own-label items
pricenumber | null810 — current selling price in GBP
currencystring"GBP" — harrods.com is a single UK storefront
skustring | null"000000000000199415" — Harrods' internal SKU
productIdstring | nullSame value as sku
inStockboolean | nulltrue — real 3-state signal from Harrods' own availability field, never coerced to false
urlstringFull product page URL
imageUrlstring | nullPrimary product image
imageUrlsarrayAll product images (with fetchProductDetails on)
colourstring | null"BURGUNDY" — only with fetchProductDetails on
descriptionstring | nullEditorial product copy — only with fetchProductDetails on
categorystring | nullDeepest breadcrumb category — only with fetchProductDetails on
categoriesarrayFull breadcrumb path — only with fetchProductDetails on
sizesarrayPer-size stock ladder (size, sku, inStock, stockQuantity) — only with fetchProductDetails on, and only for products with size variants
scrapedAtstringISO timestamp

Sample output

{
"name": "Agnona Cashmere Lipstick Sweater",
"brand": "Agnona",
"price": 810,
"currency": "GBP",
"sku": "000000000000199415",
"productId": "000000000000199415",
"inStock": true,
"url": "https://www.harrods.com/en-gb/p/agnona-cashmere-lipstick-sweater-000000000000199415",
"imageUrl": "https://hrd-live.cdn.scayle.cloud/images/70af0731b110863c4a4cd665de0d3579.jpg?quality=75",
"imageUrls": [
"https://hrd-live.cdn.scayle.cloud/images/70af0731b110863c4a4cd665de0d3579.jpg?quality=75",
"https://hrd-live.cdn.scayle.cloud/images/98c28c1ba7eeb341c4fd9df3d3e1f79d.jpg?quality=75"
],
"colour": "L77PURPLE - BURGUNDY",
"description": "Elevate your wardrobe with Agnona's Lipstick sweater, where exquisite softness meets function...",
"category": "Womens Clothing",
"categories": ["Women New In", "Womens Clothing"],
"sizes": [
{ "size": "XS", "sku": "000000000199415001", "inStock": false, "stockQuantity": 0 },
{ "size": "S", "sku": "000000000199415002", "inStock": true, "stockQuantity": 2 }
],
"scrapedAt": "2026-09-08T09:16:13.016Z"
}

Use cases

  • Price monitoring — track Harrods' own pricing across designer brands and categories over time.
  • Assortment research — see which designers and products a category is actually carrying, and in what depth of size runs.
  • Stock intelligencesizes exposes the real per-size stock quantity behind the "Add to Bag" picker, not just a size list.
  • Market comparison — Harrods is a standard UK luxury reference point alongside NET-A-PORTER, Mytheresa and Farfetch.

Coverage

harrods.com is a single UK storefront, priced in GBP throughout. Harrods ships internationally, but there is no separate country-specific storefront the way some luxury e-tailers run — this actor covers the one live site.

Performance and cost

Category mode's listing data (name, brand, price, SKU, image, stock) comes from a single Bright Data request per 60 products — a small fraction of a cent per result. Turning on fetchProductDetails, or using search mode (which always fetches details), adds one Bright Data request per product for the richer fields (description, full gallery, colour, breadcrumb, sizes) — budget for that when sizing a run. Your run's usage cost only settles after the run reports SUCCEEDED — checking cost mid-run will undercount it.

Limitations

  • Search mode depends on Harrods still rendering product links into /en-gb/search's initial HTML even though the result data itself is client-side (Algolia); if Harrods moves to a fully client-only search page, search mode would need a different data source.
  • sizes is only populated when the product's own page carries a discoverable per-size variants structure in its embedded data — a handful of product types (e.g. some beauty/home items) may only ever offer a single "Default" variant.
  • Ratings and review counts aren't exposed on either the listing or detail pages, so they're not included in the output.
  • If Harrods restructures its category/product JSON-LD or its Nuxt payload shape, the actor will need updating.

If you're covering European luxury fashion more broadly, also check out:

Support

Found an issue or need a category that isn't resolving correctly? Open an issue on this actor's Apify Store page and we'll take a look.

Why Bright Data instead of a standard proxy

Harrods' Akamai Bot Manager layer returns a direct 403 Access Denied on every path from a plain datacenter connection, including /robots.txt itself — confirmed live. Bright Data's Web Unlocker handles that fingerprinting and challenge-solving so this actor can focus on parsing real product data instead of maintaining an anti-bot bypass.