H&M Scraper
Scrape Products and Prices from H&M
Extract product prices, markdowns, color and size variant availability, product codes, and ratings from the world's second-largest fashion retailer. H&M sits behind Akamai, which returns a 403 Access Denied reference page to any non-browser request. Scrape.do handles it automatically.
Start scraping today with 1000 free credits. No Credit Card Required

109.1M Monthly Visits. Zara's Biggest Rival. One API.
hm.com is the retail storefront of H&M (H & M Hennes & Mauritz AB), the world's second-largest clothing retailer after Inditex, with 4,338 stores across 75 markets and ~171,000 employees. The site ranks #20 in the US Fashion and Apparel category on SimilarWeb with around 109.1 million monthly visits, covering women's, men's, and kids' apparel, footwear, accessories, and H&M Home, plus the group's COS, & Other Stories, Weekday, Monki, and ARKET labels.
With Scrape.do you can track prices, markdowns, and 40%-off sale drops across a massive fast-fashion catalog, monitor color and size variant availability by article number, feed LLMs and AI agents with live apparel pricing, and benchmark H&M against Zara, Shein, Uniqlo, and Mango at SKU and category level. All through a single API call.

Akamai WAF. 403 Access Denied. Handled.
hm.com runs behind Akamai, whose edge network fingerprints every request and returns a hard 403 Access Denied reference page served from errors.edgesuite.net to any request that does not look like a real browser. A plain Python requests, cURL, or datacenter-proxy call to a product page comes back blocked with an Akamai Reference # and no product data, and the x-akamai-transformed response header gives the protection away.
Scrape.do rotates real residential IPs with full browser fingerprints, passes Akamai's bot detection automatically, and returns the fully populated product HTML with title, price, list price, availability, color and size variants, article number, and the embedded JSON-LD ProductGroup schema intact. No Akamai sensor spoofing, no proxy lists, no maintenance.

How to Scrape H&M
Select a Target

Send API Request
import requests
import urllib.parse
token = "<SDO-token>"
targetUrl = "https://www2.hm.com/en_us/productpage.1357622001.html"
render = "true" # set to "false" to disable JavaScript rendering
super = "false" # set to "true" to enable residential proxies
encodedUrl = urllib.parse.quote(targetUrl)
url = f"https://api.scrape.do/?token={token}&url={encodedUrl}&render={render}&super={super}"
response = requests.get(url)
print(response.text)Get HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Short-Sleeved Shirt Dress - Green - Ladies | H&M US</title>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ProductGroup",
"name": "Short-Sleeved Shirt Dress",
"brand": { "@type": "Brand", "name": "H&M" },
"productGroupID": "1357622",
"material": "Cotton",
"variesBy": ["https://schema.org/color", "https://schema.org/size"],
"hasVariant": [
{
"@type": "Product",
"sku": "1357622001003",
"name": "Short-Sleeved Shirt Dress - Green",
"color": "Green",
"size": "S",
"offers": {
"@type": "Offer",
"priceCurrency": "USD",
"price": 20.99,
"priceSpecification": {
"@type": "UnitPriceSpecification",
"priceType": "https://schema.org/ListPrice",
"price": 34.99
},
"availability": "https://schema.org/InStock"
}
}
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.4",
"reviewCount": "10"
}
}
</script>
</head>
<body>
<h1 data-testid="product-name">Short-Sleeved Shirt Dress</h1>
<div class="product-price">
<span data-testid="red-price">$20.99</span>
<span data-testid="line-through-white-price">$34.99</span>
</div>
<ul class="color-swatches">
<li data-color="Green" class="selected">Green</li>
<li data-color="Blue/white striped">Blue/white striped</li>
<li data-color="Blue/lemons">Blue/lemons</li>
</ul>
<div class="sizes">
<button>XXS</button><button>XS</button><button>S</button>
<button>M</button><button>L</button><button>XL</button><button>XXL</button>
</div>
<button data-testid="pdp_add_to_cart_button">Add to bag</button>
<button data-testid="find-in-store-button">Find in store</button>
<div class="reviews">
<span>Reviews [10]</span>
<span class="rating">4.4</span>
</div>
<dl class="product-description">
<dt data-testid="description-article-number">Article number</dt>
<dd>1357622001</dd>
<dt data-testid="description-garmentLength">Length</dt>
<dd>Calf length</dd>
<dt data-testid="description-fits">Fit</dt>
<dd>Regular fit</dd>
</dl>
<div data-testid="grid-gallery">
<img data-testid="grid-image-1357622001_0"
src="https://image.hm.com/assets/hm/81/04/81041fed7ff928bf6f7b878907f09b2b6f2bf15c.jpg?imwidth=768">
</div>
<!-- ... remaining page content ... -->
</body>
</html>
Scrape.do has been a game-changer with powerful scraping tools, but what truly sets them apart is their excellent customer support.

CTO
Average Response Time
No tickets connect with expert engineers.
Success rate
Proxies
Faster gateway than the closest competitor.
Reliable, Scalable,Unstoppable Web Scraping
Sounds great, but I have a few questions..
Yes. hm.com sits behind Akamai, which returns a 403 Access Denied reference page from errors.edgesuite.net to any request that is not a real browser, including Python requests, cURL, and datacenter proxies. Scrape.do rotates real residential IPs with full browser fingerprints, passes Akamai's bot detection automatically, and returns fully rendered product and category HTML. Success rates exceed 95% on product, category, and collection pages.
You can extract product titles, sale prices and struck-through list prices, discount percentages, color and size variants with their SKU codes, availability and in-stock status, article numbers, material and care details, customer ratings and review counts, product images, category breadcrumbs, and the full JSON-LD ProductGroup schema with its hasVariant array of colored and sized offers.
H&M product pages embed a full JSON-LD ProductGroup with prices, variants, availability, and ratings in the server HTML, but a plain request is blocked by Akamai with a 403. A Scrape.do call with render=true routes through a real browser to clear Akamai and returns the fully populated page. Category pages like Women's Dresses are lighter and can often be fetched with super=true alone.


