Best Web Scraping APIs for Walmart: July 2026 Benchmark
Benchmarks run by the Scrapeway team Β·
Last updated: August 14, 2026 Β·
How we benchmark
Scrapfly is the best web scraping API for Walmart, with a
99% success rate across 8 web scraping APIs
benchmarked against live Walmart pages in July 2026.
3 of the 8 cleared Walmart reliably enough to recommend.
Walmart is protected by PerimeterX (HUMAN), so most
scraping APIs either fail it or pay for it in speed and cost. The benchmark is refreshed twice a month, with no
affiliate links and no sponsors.
Ranking history: web scraping APIs for Walmart over time
Walmart target ranking history
The 7 web scraping APIs for Walmart, reviewed
1. Scrapfly: 99% success on Walmart
On Walmart
Speed
Cost/1k
Overall
From
99%
6.3s
$3.89
#1 of 7
$30/mo
Walmart puts PerimeterX in front of its product, search, and store pages, and the data itself is tucked into a
__NEXT_DATA__ JSON blob rather than the visible HTML. Scrapfly cleared
99% here by generating a genuine browser fingerprint and passing
PerimeterX's sensor and cookie checks, so it reaches the rendered page and the embedded JSON instead of a
challenge screen. Because it only bills for successful requests, the "Press & Hold" and block pages
Walmart returns as a 200 don't quietly run up the cost.
At $3.89 per 1,000 successful requests and
6.3s average response time, the figures are strong for an API capable of
clearing PerimeterX. The 99% success rate is the headline, and the ranking history
above shows how that rate has held across previous runs.
Pros:
Highest success rate in the test, clearing PerimeterX's sensor and cookie checks
Only charges for successful scrapes, so challenge pages returned as 200s cost nothing
One asp flag plus residential proxies handles Walmart with little tuning
First class SDKs for Python, TypeScript, Go, and Rust, plus a Scrapy extension
Cons:
Credit cost per request rises once ASP, JavaScript rendering, or residential proxies are enabled
The entry (Discovery) plan caps concurrency at 5, so high volume catalog crawls need a higher tier
The free tier is a single batch of 1,000 credits, enough to prototype but not to benchmark at volume
2. Scraperapi: 91% success on Walmart
On Walmart
Speed
Cost/1k
Overall
From
91%
7.1s
$2.45
#2 of 7
$49/mo
Scraperapi is built around a fast request path. When it clears a request it tends to return quickly, which
suits latency sensitive lookups that can absorb retries. It also ships a dedicated Walmart structured data
endpoint. Walmart's PerimeterX layer has to be cleared before the __NEXT_DATA__ payload is
reachable, and the scorecard carries how it did on that this run. On Walmart it cleared 91% this
run.
Pros:
Fast when it clears, with a dedicated Walmart structured data endpoint
Broad language SDK support and simple integration
Cons:
Login required flows and form filling are off limits
Geotargeting is gated by plan (US and EU only until the Business tier)
3. Firecrawl: 91% success on Walmart
On Walmart
Speed
Cost/1k
Overall
From
91%
4.9s
$7.21
#3 of 7
$16/mo
Firecrawl's draw on Walmart is its output format. It returns structured markdown rather than raw HTML, so a
pipeline feeding an LLM or RAG system skips the parsing step on Walmart's page markup. Rendering a full
browser on every page and generating that markdown carries a cost and latency premium over lighter, HTTP based
options, so that saving has to be worth the premium for your use case. On Walmart it cleared 91%
this run.
Pros:
Returns markdown built for LLM pipelines, saving a parsing step for AI and RAG pipelines
Runs a real browser, which covers pages that need JavaScript execution
Cons:
Cost is the top user complaint in reviews
Renders a full browser on every page, which adds latency
4. WebScrapingAPI: 90% success on Walmart
On Walmart
Speed
Cost/1k
Overall
From
90%
16.8s
$2.71
#4 of 7
$19/mo
WebScrapingAPI covers a broad range of language SDKs behind a simple REST interface, so it drops into most
stacks without a client library, and it supports async and batch submission for queued jobs. The scorecard
carries this run's speed and cost. On Walmart it cleared 90% this run.
Pros:
Broad language SDK range behind a simple REST interface
Async and batch submission for queued jobs
Cons:
PerimeterX's block pages return as 200s, so it's easy to keep paying unless you check content
Support tickets often go unanswered for days, per user reviews
5. Scrapingant: 89% success on Walmart
On Walmart
Speed
Cost/1k
Overall
From
89%
45.2s
$1.90
#5 of 7
$19/mo
Scrapingant bundles JavaScript rendering and session support at a low entry price, with a smaller feature
surface than the larger providers. On Walmart it cleared 89% this run.
Pros:
Low sticker price
JavaScript rendering included
Cons:
Smaller feature surface and fewer integration options than the larger providers
Billing covers requests that return block or challenge pages, so failures still cost credits
Small provider with a thin public track record
6. Scrapingdog: 87% success on Walmart
On Walmart
Speed
Cost/1k
Overall
From
87%
6.7s
$1.00
#6 of 7
$40/mo
Scrapingdog offers low entry pricing and a simple API, without first party SDKs. PerimeterX scores each
request against its sensor and cookie signals before returning the page. On Walmart it cleared
87% this run.
Pros:
Low entry pricing
Simple API
Cons:
No first party SDKs
Reviewers frequently cite slow, email only support with no live chat option
7. Zenrows: 73% success on Walmart
On Walmart
Speed
Cost/1k
Overall
From
73%
10.9s
$6.90
#7 of 7
$69/mo
Zenrows is a general purpose scraping API with JavaScript rendering and session support, positioned as a
generalist rather than a specialist on any single axis. It renders a real browser and supports sessions, and
on Walmart it cleared 73% this run. It fits when you want one general purpose tool for Walmart
plus other targets rather than optimizing hard for cost, speed, or maximum reliability.
Pros:
Real browser rendering and session support for targets that need JavaScript execution
One general purpose tool spans Walmart and other targets
Cons:
Cost climbs on heavy or large scale usage, the recurring user complaint
Premium proxy geographic coverage is unclear
COMPARISON
About scraping Walmart
Walmart.com is one of the largest US retail catalogs, and the data people scrape from it is mostly commercial.
That means product titles, prices, availability and stock status, seller and fulfillment info, ratings and review
counts, and search result and category rankings. Most of this lives on product detail pages (the
/ip/{id} URLs), search pages, and store/aisle listings.
Walmart is a Next.js site, so the visible HTML is only part of the story. The reliable place to read data is the
__NEXT_DATA__ JSON blob embedded in the page, which holds the structured product and search state in
one object and arrives in the server response. Clearing the antibot layer matters more here than rendering, and
once you have the HTML, the JSON is cleaner to parse than scraping individual DOM nodes. Our Walmart benchmark
covers product pages, and search and store or aisle endpoints may behave differently.
HTTP ANALYSIS
Walmart is protected by PerimeterX (now HUMAN). See the
PerimeterX benchmark page for how PerimeterX detects
bots. The practical detail for scraping Walmart is that its blocks and "Press & Hold" challenges come back as
a 200 rather than a hard error, so success has to be measured on response content, not status codes.
walmart_scraper.py
importjsonfromparselimportSelector# install using `pip install scrapfly-sdk`fromscrapflyimportScrapflyClient,ScrapeConfig,ScrapeApiResponse# create an API client instanceclient=ScrapflyClient(key="YOUR API KEY")# create scrape function that returns HTML parser for a given URLdefscrape(url:str,country:str="",render_js=False,headers:dict=None)->Selector:api_result=client.scrape(ScrapeConfig(url=url,headers=headers,asp=True,render_js=render_jsorFalse,cache=False,cache_ttl=900,method='GET',))returnapi_result.selectorurl="https://www.walmart.com/ip/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage/609040889"selector=scrape(url)# Walmart is using NextJS framework so the product data is stored in a JSON variabledata=selector.xpath('//script[@id="__NEXT_DATA__"]/text()').get()data=json.loads(data)product=data["props"]["pageProps"]["initialData"]["data"]["product"]# the resulting dataset is pretty big but here are some example fields:frompprintimportpprintpprint(product)
Output$ python walmart_scraper.py
{
"id": "4SZSM8SXAAJT",
"name": "Apple MacBook Air 13.3 inch Laptop - Space Gray, M1 Chip, 8GB RAM, 256GB storage",
"shortDescription": "Introducing The 13-inch MacBook Air with the Apple M1 chip is incredibly thin and light with a silent fanless design. It delivers remarkable performance and up to 18 hours of battery life. And it has a beautiful Retina display for super sharp text and vibrant colors. Amazing performance, Unbeatable price. It's a laptop youβre going to love!",
"additionalOfferCount": 2,
"availabilityStatus": "IN_STOCK",
"averageRating": 4.7,
"associatedBundleId": null,
"suppressReviews": false,
"brand": "Apple",
"productTypeId": "710",
"model": "MGN63LL/A",
"buyNowEligible": true,
"fulfillmentType": "FC",
"fulfillmentBadge": "Tomorrow",
"checkStoreAvailabilityATC": false,
"checkAvailabilityGlobalDFS": false,
"hasSellerBadge": null,
"hasCarePlans": true,
"hasHomeServices": null,
"itemType": null,
"primaryUsItemId": "609040889",
"conditionType": "New",
"imageInfo": {
"allImages": [
{
"id": "0D4F1BA24DB24A7F89FA742D2A069922",
"url": "https://i5.walmartimages.com/seo/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage_af1d4133-6de9-4bdc-b1c6-1ca8bd0af7a0.c0eb74c31b2cb05df4ed11124d0e255b.jpeg",
"zoomable": true
},
"...truncated...",
],
},
"priceInfo": {
"currentPrice": {
"price": 699,
"priceString": "$699.00",
"variantPriceString": "$699.00",
"currencyUnit": "USD",
"bestValue": null,
"priceDisplay": "$699.00"
},
"...truncated..."
import json
from parsel import Selector
# install using `pip install scrapfly-sdk`
from scrapfly import ScrapflyClient, ScrapeConfig, ScrapeApiResponse
# create an API client instance
client = ScrapflyClient(key="YOUR API KEY")
# create scrape function that returns HTML parser for a given URL
def scrape(url: str, country: str="", render_js=False, headers: dict=None) -> Selector:
api_result = client.scrape(ScrapeConfig(
url=url,
headers=headers,
asp=True,
render_js=render_js or False,
cache=False,
cache_ttl=900,
method='GET',
))
return api_result.selector
url = "https://www.walmart.com/ip/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage/609040889"
selector = scrape(url)
# Walmart is using NextJS framework so the product data is stored in a JSON variable
data = selector.xpath('//script[@id="__NEXT_DATA__"]/text()').get()
data = json.loads(data)
product = data["props"]["pageProps"]["initialData"]["data"]["product"]
# the resulting dataset is pretty big but here are some example fields:
from pprint import pprint
pprint(product)
importjsonfromparselimportSelector# install using `pip install scraperapi-sdk`fromscraperapi_sdkimportScraperAPIClient# create an API client instanceclient=ScraperAPIClient(api_key="YOUR API KEY")# create scrape function that returns HTML parser for a given URLdefscrape(url:str,country:str="",render_js=False,headers:dict=None)->Selector:api_result=client.make_request(url=url,headers=headers,params={"render":False,},method='GET',)assertapi_result.ok,api_result.textreturnSelector(api_result.text)url="https://www.walmart.com/ip/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage/609040889"selector=scrape(url)# Walmart is using NextJS framework so the product data is stored in a JSON variabledata=selector.xpath('//script[@id="__NEXT_DATA__"]/text()').get()data=json.loads(data)product=data["props"]["pageProps"]["initialData"]["data"]["product"]# the resulting dataset is pretty big but here are some example fields:frompprintimportpprintpprint(product)
Output$ python walmart_scraper.py
{
"id": "4SZSM8SXAAJT",
"name": "Apple MacBook Air 13.3 inch Laptop - Space Gray, M1 Chip, 8GB RAM, 256GB storage",
"shortDescription": "Introducing The 13-inch MacBook Air with the Apple M1 chip is incredibly thin and light with a silent fanless design. It delivers remarkable performance and up to 18 hours of battery life. And it has a beautiful Retina display for super sharp text and vibrant colors. Amazing performance, Unbeatable price. It's a laptop youβre going to love!",
"additionalOfferCount": 2,
"availabilityStatus": "IN_STOCK",
"averageRating": 4.7,
"associatedBundleId": null,
"suppressReviews": false,
"brand": "Apple",
"productTypeId": "710",
"model": "MGN63LL/A",
"buyNowEligible": true,
"fulfillmentType": "FC",
"fulfillmentBadge": "Tomorrow",
"checkStoreAvailabilityATC": false,
"checkAvailabilityGlobalDFS": false,
"hasSellerBadge": null,
"hasCarePlans": true,
"hasHomeServices": null,
"itemType": null,
"primaryUsItemId": "609040889",
"conditionType": "New",
"imageInfo": {
"allImages": [
{
"id": "0D4F1BA24DB24A7F89FA742D2A069922",
"url": "https://i5.walmartimages.com/seo/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage_af1d4133-6de9-4bdc-b1c6-1ca8bd0af7a0.c0eb74c31b2cb05df4ed11124d0e255b.jpeg",
"zoomable": true
},
"...truncated...",
],
},
"priceInfo": {
"currentPrice": {
"price": 699,
"priceString": "$699.00",
"variantPriceString": "$699.00",
"currencyUnit": "USD",
"bestValue": null,
"priceDisplay": "$699.00"
},
"...truncated..."
import json
from parsel import Selector
# install using `pip install scraperapi-sdk`
from scraperapi_sdk import ScraperAPIClient
# create an API client instance
client = ScraperAPIClient(api_key="YOUR API KEY")
# create scrape function that returns HTML parser for a given URL
def scrape(url: str, country: str="", render_js=False, headers: dict=None) -> Selector:
api_result = client.make_request(
url=url,
headers=headers,
params={
"render": False,
},
method='GET',
)
assert api_result.ok, api_result.text
return Selector(api_result.text)
url = "https://www.walmart.com/ip/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage/609040889"
selector = scrape(url)
# Walmart is using NextJS framework so the product data is stored in a JSON variable
data = selector.xpath('//script[@id="__NEXT_DATA__"]/text()').get()
data = json.loads(data)
product = data["props"]["pageProps"]["initialData"]["data"]["product"]
# the resulting dataset is pretty big but here are some example fields:
from pprint import pprint
pprint(product)
importjsonfromparselimportSelector# install using `pip install firecrawl-py`fromfirecrawlimportFirecrawl# create an API client instanceclient=Firecrawl(api_key="YOUR API KEY")# create scrape function that returns HTML parser for a given URLdefscrape(url:str,country:str="",render_js=False,headers:dict=None)->Selector:api_result=client.scrape(url=url,headers=headersor{},formats=['rawHtml'],only_main_content=False,skip_tls_verification=False,timeout=150000,store_in_cache=False,max_age=900,)assertapi_result.raw_html,"firecrawl returned no html for this page"returnSelector(api_result.raw_html)url="https://www.walmart.com/ip/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage/609040889"selector=scrape(url)# Walmart is using NextJS framework so the product data is stored in a JSON variabledata=selector.xpath('//script[@id="__NEXT_DATA__"]/text()').get()data=json.loads(data)product=data["props"]["pageProps"]["initialData"]["data"]["product"]# the resulting dataset is pretty big but here are some example fields:frompprintimportpprintpprint(product)
Output$ python walmart_scraper.py
{
"id": "4SZSM8SXAAJT",
"name": "Apple MacBook Air 13.3 inch Laptop - Space Gray, M1 Chip, 8GB RAM, 256GB storage",
"shortDescription": "Introducing The 13-inch MacBook Air with the Apple M1 chip is incredibly thin and light with a silent fanless design. It delivers remarkable performance and up to 18 hours of battery life. And it has a beautiful Retina display for super sharp text and vibrant colors. Amazing performance, Unbeatable price. It's a laptop youβre going to love!",
"additionalOfferCount": 2,
"availabilityStatus": "IN_STOCK",
"averageRating": 4.7,
"associatedBundleId": null,
"suppressReviews": false,
"brand": "Apple",
"productTypeId": "710",
"model": "MGN63LL/A",
"buyNowEligible": true,
"fulfillmentType": "FC",
"fulfillmentBadge": "Tomorrow",
"checkStoreAvailabilityATC": false,
"checkAvailabilityGlobalDFS": false,
"hasSellerBadge": null,
"hasCarePlans": true,
"hasHomeServices": null,
"itemType": null,
"primaryUsItemId": "609040889",
"conditionType": "New",
"imageInfo": {
"allImages": [
{
"id": "0D4F1BA24DB24A7F89FA742D2A069922",
"url": "https://i5.walmartimages.com/seo/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage_af1d4133-6de9-4bdc-b1c6-1ca8bd0af7a0.c0eb74c31b2cb05df4ed11124d0e255b.jpeg",
"zoomable": true
},
"...truncated...",
],
},
"priceInfo": {
"currentPrice": {
"price": 699,
"priceString": "$699.00",
"variantPriceString": "$699.00",
"currencyUnit": "USD",
"bestValue": null,
"priceDisplay": "$699.00"
},
"...truncated..."
import json
from parsel import Selector
# install using `pip install firecrawl-py`
from firecrawl import Firecrawl
# create an API client instance
client = Firecrawl(api_key="YOUR API KEY")
# create scrape function that returns HTML parser for a given URL
def scrape(url: str, country: str="", render_js=False, headers: dict=None) -> Selector:
api_result = client.scrape(
url=url,
headers=headers or {},
formats=['rawHtml'],
only_main_content=False,
skip_tls_verification=False,
timeout=150000,
store_in_cache=False,
max_age=900,
)
assert api_result.raw_html, "firecrawl returned no html for this page"
return Selector(api_result.raw_html)
url = "https://www.walmart.com/ip/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage/609040889"
selector = scrape(url)
# Walmart is using NextJS framework so the product data is stored in a JSON variable
data = selector.xpath('//script[@id="__NEXT_DATA__"]/text()').get()
data = json.loads(data)
product = data["props"]["pageProps"]["initialData"]["data"]["product"]
# the resulting dataset is pretty big but here are some example fields:
from pprint import pprint
pprint(product)
importjsonfromparselimportSelector# webscrapingapi has a Python SDK but it's not great, use httpx instead:# `pip install httpx`importhttpx# create an API client instanceclient=httpx.Client(timeout=180)# create scrape function that returns HTML parser for a given URLdefscrape(url:str,country:str="",render_js=False,headers:dict=None)->Selector:api_result=client.get("https://api.webscrapingapi.com/v2",# the target url is passed as a parameter belowheaders=headers,params={"url":url,"api_key":"YOUR API KEY",# NOTE: add your API KEY here!"timeout":60_000,"render_js":render_jsorFalse,"method":'GET',},)assertapi_result.status_code==200,api_result.reason_phrasereturnSelector(api_result.text)url="https://www.walmart.com/ip/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage/609040889"selector=scrape(url)# Walmart is using NextJS framework so the product data is stored in a JSON variabledata=selector.xpath('//script[@id="__NEXT_DATA__"]/text()').get()data=json.loads(data)product=data["props"]["pageProps"]["initialData"]["data"]["product"]# the resulting dataset is pretty big but here are some example fields:frompprintimportpprintpprint(product)
Output$ python walmart_scraper.py
{
"id": "4SZSM8SXAAJT",
"name": "Apple MacBook Air 13.3 inch Laptop - Space Gray, M1 Chip, 8GB RAM, 256GB storage",
"shortDescription": "Introducing The 13-inch MacBook Air with the Apple M1 chip is incredibly thin and light with a silent fanless design. It delivers remarkable performance and up to 18 hours of battery life. And it has a beautiful Retina display for super sharp text and vibrant colors. Amazing performance, Unbeatable price. It's a laptop youβre going to love!",
"additionalOfferCount": 2,
"availabilityStatus": "IN_STOCK",
"averageRating": 4.7,
"associatedBundleId": null,
"suppressReviews": false,
"brand": "Apple",
"productTypeId": "710",
"model": "MGN63LL/A",
"buyNowEligible": true,
"fulfillmentType": "FC",
"fulfillmentBadge": "Tomorrow",
"checkStoreAvailabilityATC": false,
"checkAvailabilityGlobalDFS": false,
"hasSellerBadge": null,
"hasCarePlans": true,
"hasHomeServices": null,
"itemType": null,
"primaryUsItemId": "609040889",
"conditionType": "New",
"imageInfo": {
"allImages": [
{
"id": "0D4F1BA24DB24A7F89FA742D2A069922",
"url": "https://i5.walmartimages.com/seo/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage_af1d4133-6de9-4bdc-b1c6-1ca8bd0af7a0.c0eb74c31b2cb05df4ed11124d0e255b.jpeg",
"zoomable": true
},
"...truncated...",
],
},
"priceInfo": {
"currentPrice": {
"price": 699,
"priceString": "$699.00",
"variantPriceString": "$699.00",
"currencyUnit": "USD",
"bestValue": null,
"priceDisplay": "$699.00"
},
"...truncated..."
import json
from parsel import Selector
# webscrapingapi has a Python SDK but it's not great, use httpx instead:
# `pip install httpx`
import httpx
# create an API client instance
client = httpx.Client(timeout=180)
# create scrape function that returns HTML parser for a given URL
def scrape(url: str, country: str="", render_js=False, headers: dict=None) -> Selector:
api_result = client.get(
"https://api.webscrapingapi.com/v2", # the target url is passed as a parameter below
headers=headers,
params={
"url": url,
"api_key": "YOUR API KEY", # NOTE: add your API KEY here!
"timeout": 60_000,
"render_js": render_js or False,
"method": 'GET',
},
)
assert api_result.status_code == 200, api_result.reason_phrase
return Selector(api_result.text)
url = "https://www.walmart.com/ip/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage/609040889"
selector = scrape(url)
# Walmart is using NextJS framework so the product data is stored in a JSON variable
data = selector.xpath('//script[@id="__NEXT_DATA__"]/text()').get()
data = json.loads(data)
product = data["props"]["pageProps"]["initialData"]["data"]["product"]
# the resulting dataset is pretty big but here are some example fields:
from pprint import pprint
pprint(product)
importjsonfromparselimportSelector# install using `pip install scrapingant-client`fromscrapingant_clientimportScrapingAntClient# create an API client instanceclient=ScrapingAntClient(token="YOUR API KEY")# create scrape function that returns HTML parser for a given URLdefscrape(url:str,country:str="",render_js=False,headers:dict=None)->Selector:api_result=client.general_request(url,json=True,method='GET',)# the scrapingant client returns its own Response object: content holds the pageassertapi_result.status_code==200,api_result.textreturnSelector(api_result.content)url="https://www.walmart.com/ip/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage/609040889"selector=scrape(url)# Walmart is using NextJS framework so the product data is stored in a JSON variabledata=selector.xpath('//script[@id="__NEXT_DATA__"]/text()').get()data=json.loads(data)product=data["props"]["pageProps"]["initialData"]["data"]["product"]# the resulting dataset is pretty big but here are some example fields:frompprintimportpprintpprint(product)
Output$ python walmart_scraper.py
{
"id": "4SZSM8SXAAJT",
"name": "Apple MacBook Air 13.3 inch Laptop - Space Gray, M1 Chip, 8GB RAM, 256GB storage",
"shortDescription": "Introducing The 13-inch MacBook Air with the Apple M1 chip is incredibly thin and light with a silent fanless design. It delivers remarkable performance and up to 18 hours of battery life. And it has a beautiful Retina display for super sharp text and vibrant colors. Amazing performance, Unbeatable price. It's a laptop youβre going to love!",
"additionalOfferCount": 2,
"availabilityStatus": "IN_STOCK",
"averageRating": 4.7,
"associatedBundleId": null,
"suppressReviews": false,
"brand": "Apple",
"productTypeId": "710",
"model": "MGN63LL/A",
"buyNowEligible": true,
"fulfillmentType": "FC",
"fulfillmentBadge": "Tomorrow",
"checkStoreAvailabilityATC": false,
"checkAvailabilityGlobalDFS": false,
"hasSellerBadge": null,
"hasCarePlans": true,
"hasHomeServices": null,
"itemType": null,
"primaryUsItemId": "609040889",
"conditionType": "New",
"imageInfo": {
"allImages": [
{
"id": "0D4F1BA24DB24A7F89FA742D2A069922",
"url": "https://i5.walmartimages.com/seo/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage_af1d4133-6de9-4bdc-b1c6-1ca8bd0af7a0.c0eb74c31b2cb05df4ed11124d0e255b.jpeg",
"zoomable": true
},
"...truncated...",
],
},
"priceInfo": {
"currentPrice": {
"price": 699,
"priceString": "$699.00",
"variantPriceString": "$699.00",
"currencyUnit": "USD",
"bestValue": null,
"priceDisplay": "$699.00"
},
"...truncated..."
import json
from parsel import Selector
# install using `pip install scrapingant-client`
from scrapingant_client import ScrapingAntClient
# create an API client instance
client = ScrapingAntClient(token="YOUR API KEY")
# create scrape function that returns HTML parser for a given URL
def scrape(url: str, country: str="", render_js=False, headers: dict=None) -> Selector:
api_result = client.general_request(
url,
json=True,
method='GET',
)
# the scrapingant client returns its own Response object: content holds the page
assert api_result.status_code == 200, api_result.text
return Selector(api_result.content)
url = "https://www.walmart.com/ip/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage/609040889"
selector = scrape(url)
# Walmart is using NextJS framework so the product data is stored in a JSON variable
data = selector.xpath('//script[@id="__NEXT_DATA__"]/text()').get()
data = json.loads(data)
product = data["props"]["pageProps"]["initialData"]["data"]["product"]
# the resulting dataset is pretty big but here are some example fields:
from pprint import pprint
pprint(product)
importjsonfromparselimportSelector# scrapingdog has no integration but we can use httpx# install using `pip install httpx`importhttpx# create an API client instanceclient=httpx.Client(timeout=180)# create scrape function that returns HTML parser for a given URLdefscrape(url:str,country:str="",render_js=False,headers:dict=None)->Selector:params={"api_key":"YOUR API KEY","url":url,}api_result=client.get('https://api.scrapingdog.com/walmart/product',params=params,)assertapi_result.status_code==200,api_result.text# this dedicated endpoint answers with structured JSON rather than page HTML,# so read the fields straight off api_result.json() instead of the selector belowreturnSelector(api_result.text,type="html")url="https://www.walmart.com/ip/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage/609040889"selector=scrape(url)# Walmart is using NextJS framework so the product data is stored in a JSON variabledata=selector.xpath('//script[@id="__NEXT_DATA__"]/text()').get()data=json.loads(data)product=data["props"]["pageProps"]["initialData"]["data"]["product"]# the resulting dataset is pretty big but here are some example fields:frompprintimportpprintpprint(product)
Output$ python walmart_scraper.py
{
"id": "4SZSM8SXAAJT",
"name": "Apple MacBook Air 13.3 inch Laptop - Space Gray, M1 Chip, 8GB RAM, 256GB storage",
"shortDescription": "Introducing The 13-inch MacBook Air with the Apple M1 chip is incredibly thin and light with a silent fanless design. It delivers remarkable performance and up to 18 hours of battery life. And it has a beautiful Retina display for super sharp text and vibrant colors. Amazing performance, Unbeatable price. It's a laptop youβre going to love!",
"additionalOfferCount": 2,
"availabilityStatus": "IN_STOCK",
"averageRating": 4.7,
"associatedBundleId": null,
"suppressReviews": false,
"brand": "Apple",
"productTypeId": "710",
"model": "MGN63LL/A",
"buyNowEligible": true,
"fulfillmentType": "FC",
"fulfillmentBadge": "Tomorrow",
"checkStoreAvailabilityATC": false,
"checkAvailabilityGlobalDFS": false,
"hasSellerBadge": null,
"hasCarePlans": true,
"hasHomeServices": null,
"itemType": null,
"primaryUsItemId": "609040889",
"conditionType": "New",
"imageInfo": {
"allImages": [
{
"id": "0D4F1BA24DB24A7F89FA742D2A069922",
"url": "https://i5.walmartimages.com/seo/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage_af1d4133-6de9-4bdc-b1c6-1ca8bd0af7a0.c0eb74c31b2cb05df4ed11124d0e255b.jpeg",
"zoomable": true
},
"...truncated...",
],
},
"priceInfo": {
"currentPrice": {
"price": 699,
"priceString": "$699.00",
"variantPriceString": "$699.00",
"currencyUnit": "USD",
"bestValue": null,
"priceDisplay": "$699.00"
},
"...truncated..."
import json
from parsel import Selector
# scrapingdog has no integration but we can use httpx
# install using `pip install httpx`
import httpx
# create an API client instance
client = httpx.Client(timeout=180)
# create scrape function that returns HTML parser for a given URL
def scrape(url: str, country: str="", render_js=False, headers: dict=None) -> Selector:
params = {
"api_key": "YOUR API KEY",
"url": url,
}
api_result = client.get(
'https://api.scrapingdog.com/walmart/product',
params=params,
)
assert api_result.status_code == 200, api_result.text
# this dedicated endpoint answers with structured JSON rather than page HTML,
# so read the fields straight off api_result.json() instead of the selector below
return Selector(api_result.text, type="html")
url = "https://www.walmart.com/ip/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage/609040889"
selector = scrape(url)
# Walmart is using NextJS framework so the product data is stored in a JSON variable
data = selector.xpath('//script[@id="__NEXT_DATA__"]/text()').get()
data = json.loads(data)
product = data["props"]["pageProps"]["initialData"]["data"]["product"]
# the resulting dataset is pretty big but here are some example fields:
from pprint import pprint
pprint(product)
importjsonfromparselimportSelector# install using `pip install zenrows`fromzenrowsimportZenRowsClient# create an API client instanceclient=ZenRowsClient(apikey="YOUR API KEY")# create scrape function that returns HTML parser for a given URLdefscrape(url:str,country:str="",render_js=False,headers:dict=None)->Selector:api_result=client.get(url,headers=headers,params={})# zenrows answers with the page HTML; "json_response" is only accepted with js_render onassertapi_result.ok,api_result.textreturnSelector(api_result.text)url="https://www.walmart.com/ip/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage/609040889"selector=scrape(url)# Walmart is using NextJS framework so the product data is stored in a JSON variabledata=selector.xpath('//script[@id="__NEXT_DATA__"]/text()').get()data=json.loads(data)product=data["props"]["pageProps"]["initialData"]["data"]["product"]# the resulting dataset is pretty big but here are some example fields:frompprintimportpprintpprint(product)
Output$ python walmart_scraper.py
{
"id": "4SZSM8SXAAJT",
"name": "Apple MacBook Air 13.3 inch Laptop - Space Gray, M1 Chip, 8GB RAM, 256GB storage",
"shortDescription": "Introducing The 13-inch MacBook Air with the Apple M1 chip is incredibly thin and light with a silent fanless design. It delivers remarkable performance and up to 18 hours of battery life. And it has a beautiful Retina display for super sharp text and vibrant colors. Amazing performance, Unbeatable price. It's a laptop youβre going to love!",
"additionalOfferCount": 2,
"availabilityStatus": "IN_STOCK",
"averageRating": 4.7,
"associatedBundleId": null,
"suppressReviews": false,
"brand": "Apple",
"productTypeId": "710",
"model": "MGN63LL/A",
"buyNowEligible": true,
"fulfillmentType": "FC",
"fulfillmentBadge": "Tomorrow",
"checkStoreAvailabilityATC": false,
"checkAvailabilityGlobalDFS": false,
"hasSellerBadge": null,
"hasCarePlans": true,
"hasHomeServices": null,
"itemType": null,
"primaryUsItemId": "609040889",
"conditionType": "New",
"imageInfo": {
"allImages": [
{
"id": "0D4F1BA24DB24A7F89FA742D2A069922",
"url": "https://i5.walmartimages.com/seo/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage_af1d4133-6de9-4bdc-b1c6-1ca8bd0af7a0.c0eb74c31b2cb05df4ed11124d0e255b.jpeg",
"zoomable": true
},
"...truncated...",
],
},
"priceInfo": {
"currentPrice": {
"price": 699,
"priceString": "$699.00",
"variantPriceString": "$699.00",
"currencyUnit": "USD",
"bestValue": null,
"priceDisplay": "$699.00"
},
"...truncated..."
import json
from parsel import Selector
# install using `pip install zenrows`
from zenrows import ZenRowsClient
# create an API client instance
client = ZenRowsClient(apikey="YOUR API KEY")
# create scrape function that returns HTML parser for a given URL
def scrape(url: str, country: str="", render_js=False, headers: dict=None) -> Selector:
api_result = client.get(
url,
headers=headers,
params={
}
)
# zenrows answers with the page HTML; "json_response" is only accepted with js_render on
assert api_result.ok, api_result.text
return Selector(api_result.text)
url = "https://www.walmart.com/ip/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage/609040889"
selector = scrape(url)
# Walmart is using NextJS framework so the product data is stored in a JSON variable
data = selector.xpath('//script[@id="__NEXT_DATA__"]/text()').get()
data = json.loads(data)
product = data["props"]["pageProps"]["initialData"]["data"]["product"]
# the resulting dataset is pretty big but here are some example fields:
from pprint import pprint
pprint(product)
importjsonfromparselimportSelector# install using `pip install scrapingbee`fromscrapingbeeimportScrapingBeeClient# create an API client instanceclient=ScrapingBeeClient(api_key="YOUR API KEY")# create scrape function that returns HTML parser for a given URLdefscrape(url:str,country:str="",render_js=False,headers:dict=None)->Selector:api_result=client.get(url,headers=headers,params={"json_response":True,"transparent_status_code":True,})assertapi_result.ok,api_result.textdata=api_result.json()returnSelector(data['body'])url="https://www.walmart.com/ip/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage/609040889"selector=scrape(url)# Walmart is using NextJS framework so the product data is stored in a JSON variabledata=selector.xpath('//script[@id="__NEXT_DATA__"]/text()').get()data=json.loads(data)product=data["props"]["pageProps"]["initialData"]["data"]["product"]# the resulting dataset is pretty big but here are some example fields:frompprintimportpprintpprint(product)
Output$ python walmart_scraper.py
{
"id": "4SZSM8SXAAJT",
"name": "Apple MacBook Air 13.3 inch Laptop - Space Gray, M1 Chip, 8GB RAM, 256GB storage",
"shortDescription": "Introducing The 13-inch MacBook Air with the Apple M1 chip is incredibly thin and light with a silent fanless design. It delivers remarkable performance and up to 18 hours of battery life. And it has a beautiful Retina display for super sharp text and vibrant colors. Amazing performance, Unbeatable price. It's a laptop youβre going to love!",
"additionalOfferCount": 2,
"availabilityStatus": "IN_STOCK",
"averageRating": 4.7,
"associatedBundleId": null,
"suppressReviews": false,
"brand": "Apple",
"productTypeId": "710",
"model": "MGN63LL/A",
"buyNowEligible": true,
"fulfillmentType": "FC",
"fulfillmentBadge": "Tomorrow",
"checkStoreAvailabilityATC": false,
"checkAvailabilityGlobalDFS": false,
"hasSellerBadge": null,
"hasCarePlans": true,
"hasHomeServices": null,
"itemType": null,
"primaryUsItemId": "609040889",
"conditionType": "New",
"imageInfo": {
"allImages": [
{
"id": "0D4F1BA24DB24A7F89FA742D2A069922",
"url": "https://i5.walmartimages.com/seo/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage_af1d4133-6de9-4bdc-b1c6-1ca8bd0af7a0.c0eb74c31b2cb05df4ed11124d0e255b.jpeg",
"zoomable": true
},
"...truncated...",
],
},
"priceInfo": {
"currentPrice": {
"price": 699,
"priceString": "$699.00",
"variantPriceString": "$699.00",
"currencyUnit": "USD",
"bestValue": null,
"priceDisplay": "$699.00"
},
"...truncated..."
import json
from parsel import Selector
# install using `pip install scrapingbee`
from scrapingbee import ScrapingBeeClient
# create an API client instance
client = ScrapingBeeClient(api_key="YOUR API KEY")
# create scrape function that returns HTML parser for a given URL
def scrape(url: str, country: str="", render_js=False, headers: dict=None) -> Selector:
api_result = client.get(
url,
headers=headers,
params={
"json_response": True,
"transparent_status_code": True,
}
)
assert api_result.ok, api_result.text
data = api_result.json()
return Selector(data['body'])
url = "https://www.walmart.com/ip/Apple-MacBook-Air-13-3-inch-Laptop-Space-Gray-M1-Chip-8GB-RAM-256GB-storage/609040889"
selector = scrape(url)
# Walmart is using NextJS framework so the product data is stored in a JSON variable
data = selector.xpath('//script[@id="__NEXT_DATA__"]/text()').get()
data = json.loads(data)
product = data["props"]["pageProps"]["initialData"]["data"]["product"]
# the resulting dataset is pretty big but here are some example fields:
from pprint import pprint
pprint(product)
How to choose a web scraping API for Walmart
Because Walmart sits behind PerimeterX, start by narrowing to the providers still clearing it this run (the top of
the ranked table), then choose within that set based on your job. Low volume product lookups give you more room on
cost. Higher volume work puts more weight on reliability and concurrency.
Reliability first.Scrapfly leads the current Walmart ranking, which makes it the
default starting point for production product page crawls. The ranking history shows its track record.
Value. Among the APIs still clearing Walmart, sort by cost per successful request. The cheapest
sticker price is rarely the cheapest per usable Walmart page.
Speed. For latency sensitive product lookups rather than bulk crawls, pick the fastest option
that still clears Walmart reliably.
The key principle is to judge on cost per successful request, not sticker price. PerimeterX returns block and
challenge pages as a 200, so a cheap API can look like it's working while delivering empty pages, which makes its
real cost per usable result far higher than the rate card suggests.
PRICING
How we benchmark web scraping APIs for Walmart
We independently benchmark 8 web scraping APIs against live Walmart pages, 1,000+ requests per
service, twice a month. Every API is tested against the same Walmart URLs at the same time, and cost is measured
per 1,000 successful requests on entry plan pricing. We pay for the plans ourselves. No affiliate links. No
sponsors. Just data.
8 APIs Β· 1,000+ requests each Β· twice a month Β· no affiliate links, no sponsors
Benchmarking Walmart has one wrinkle worth knowing about. Success is measured on response content, not HTTP status
codes. PerimeterX's "Press & Hold" and soft blocked responses return a 200, so a test that only checked for a
200 would overstate results. We verify that responses contain the expected product data before counting them as
successful. Every provider is tested against the same URLs in the same run, so the numbers stay comparable.
Latest data: Jul 31 to Aug 14, 2026.
QUALITY TESTING
Frequently asked questions about scraping Walmart
Is it legal to scrape Walmart?
Scraping publicly available Walmart data such as prices and product details is generally treated as lower risk
than scraping data behind a login, but Walmart's Terms of Service prohibit automated access, and some data can
fall under privacy laws. Legality depends on what you collect, where you operate, and how you use the data, so
treat this as general information rather than legal advice and check your own situation.
What's the cheapest API that works on Walmart?
Sort the ranked table by cost per successful request and read down to the first provider still clearing Walmart
this run. That's the cheapest option that actually delivers. Lower priced APIs further down often fail too many
requests for their sticker price to be meaningful, and PerimeterX's soft blocking hides those failures unless you
check response content.
Do I need a headless browser to scrape Walmart?
Not always. Walmart is a Next.js site, but the structured product data arrives in the server returned
__NEXT_DATA__ blob, so a request that clears the antibot layer often returns the core fields. Our own
Walmart benchmark runs without JavaScript rendering. Browser execution can help on particular endpoints or
challenge responses. The APIs at the top of the ranking handle the antibot layer for you.
Why do some APIs score 0% on Walmart?
Because PerimeterX validates its cookie against the sensor telemetry that produced it and blocks requests it can't
verify. A request based tool may return 200 responses that are actually "Press & Hold" or block pages, and
since we score on response content, those count as failures rather than successes.
How often is this benchmark updated?
Twice a month against the same live Walmart targets, 1,000+ requests per API each run. We publish after validating
the run and checking failures for configuration or detection errors.
Conclusion
Walmart sits behind PerimeterX and serves its data through an embedded JSON blob, so the right web scraping API is
one that clears the sensor challenge reliably and returns the full server rendered HTML. For production product
page crawls, start with Scrapfly, the highest success rate in the current run. For cost or speed on
lighter product page jobs, choose among the providers still clearing Walmart this run.
Whatever you pick, verify results on response content rather than status codes, because PerimeterX's challenge and
block pages both return a 200. The benchmark refreshes twice a month, so check the live Walmart results before
committing.