John Lewis Scraper
Scrape Prices and Availability from John Lewis
Extract product pricing, stock status, and ratings from one of the UK's largest department-store retailers. John Lewis sits behind Akamai and blocks bots and datacenter proxies. Scrape.do handles it automatically.
Start scraping today with 1000 free credits. No Credit Card Required

25.3M Monthly Visits. Every Department. One API.
John Lewis is a premium British department-store retailer and the flagship of the employee-owned John Lewis Partnership, drawing over 25 million monthly visits across fashion, home, electricals, and beauty. Its wide branded and own-label catalog carries prices, promotions, energy labels, and ratings that price-comparison and assortment scrapers watch across the UK market.
With Scrape.do you can track UK retail pricing and promotions, compare against Currys, Argos, and Amazon UK, monitor brand and own-label assortment, and capture stock and delivery availability. All through a single API call.

Akamai. Access Denied. Handled.
John Lewis sits behind Akamai, which refuses requests from Python requests, cURL, and datacenter proxies, dropping the connection or returning an Access Denied reference page from errors.edgesuite.net. Product and category pages are also JavaScript-rendered, so even past the block a raw fetch returns an incomplete page with no prices.
Scrape.do rotates high-quality residential IPs with full browser fingerprints, passes Akamai’s bot detection, and renders the JavaScript so you receive fully populated product and category HTML. You get clean pricing and availability data without maintaining proxy pools or headless browsers.

How to Scrape John Lewis
Select a Target

Send API Request
import requests
import urllib.parse
token = "<SDO-token>"
targetUrl = "https://www.johnlewis.com/p-e-nation-glide-oversized-cotton-t-shirt-coffee/p115141038"
render = "false" # set to "true" to enable JavaScript rendering
super = "false" # set to "true" to enable residential proxies
geoCode = "gb"
encodedUrl = urllib.parse.quote(targetUrl)
url = f"https://api.scrape.do/?token={token}&url={encodedUrl}&render={render}&super={super}&geoCode={geoCode}"
response = requests.get(url)
print(response.text)Get HTML
<!DOCTYPE html>
<html lang="en-GB">
<head>
<meta charset="utf-8">
<title>P.E Nation Glide Oversized Cotton T-Shirt, Coffee | John Lewis & Partners</title>
</head>
<body>
<nav class="breadcrumb">Homepage / Women / Women's Shirts & Tops</nav>
<h1 class="product-name">P.E Nation Glide Oversized Cotton T-Shirt, Coffee</h1>
<div class="price"><span>£70.00</span><span class="promise">Price promise</span></div>
<div class="size-selector">
<button>XS</button><button>S</button><button>M</button><button>L</button>
</div>
<button class="add-to-basket">Add to basket</button>
<div class="fulfilment">Collect from your nearest Waitrose from 3pm tomorrow</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. johnlewis.com sits behind Akamai, which refuses requests from Python requests, cURL, and datacenter proxies, either dropping the connection or returning an Access Denied reference page from errors.edgesuite.net. Scrape.do rotates real residential IPs with full browser fingerprints, passes Akamai bot detection, and renders JavaScript to return fully populated product and category HTML. Success rates exceed 95% on product and category pages.
You can extract product names and brands, prices and promotions, size and colour variants, stock and delivery availability, energy labels, customer ratings and review counts, and full category listings with filters across fashion, home, electricals, and beauty.
John Lewis product and category pages render key details client-side, so a plain request can return an incomplete page. If prices or variants are missing, add render=true so Scrape.do executes the page JavaScript in a real browser, and set geoCode=gb for UK pricing and availability.


