Walmart scraping is easiest with a ready-made Actor: type a keyword or paste a Walmart search, category or product URL, and export one row per product with price, was-price, rating, review count, seller and stock status. On Scrape.ly you can do it in the browser or with one API call.
This guide shows which fields you get, the no-code steps, and the same job in curl, Python, JavaScript and through an AI agent. Then it walks through a real run from 22 October 2026: ten laptops between $300 and $1,000, cheapest first, with the log and the exact cost.
What data you can get from Walmart
The Actor returns one row per product. With Open every product page on (the default) a row holds Walmart's full product record. With it off you get the lighter fields from the search results, which is what our run used.
| Field | What it holds |
|---|---|
name | Product title |
usItemId | Walmart's item number |
url | Product page URL |
price, wasPrice, currency | Current price, the earlier price when there is a discount, and the currency |
rating, reviewCount | Average rating and number of reviews |
brand | Brand name (filled from product pages) |
seller, sellerId | Who sells the item: Walmart or a marketplace seller |
availability, fulfillmentType | Stock status (In stock) and fulfillment type (MARKETPLACE) |
categoryPath | Category path, for example Electronics / Computers, Laptops and Tablets / Laptops |
mainImage, images | Image URLs |
isSponsored, position | Whether the result is an ad, and its position in the results |
specifications, description, variantOptions | Product pages only: specs, long description, and every variant with its price and stock |
upc, model, manufacturerProductId | Product pages only: identifiers for catalog matching |
reviews.customerReviews | Customer reviews, when you turn on includeReviews |
What you won't get: prices for a ZIP code or store you choose (rows reflect Walmart's default location for the request), Walmart Canada or Mexico, or seller storefront and brand pages.
How to scrape Walmart without code
- Open the Walmart Scraper in the Scrape.ly Store.
- Pick the Laptops $300 to $1,000, 10 results preset. It fills in this input:
{
"search": "laptop",
"minPrice": 300,
"maxPrice": 1000,
"sort": "price_low",
"scrapeProductDetails": false,
"maxItems": 10
}- Click Start. Our run finished in about 7 seconds.
- Open the dataset and export it as JSON, CSV or Excel.
The input fields that matter most:
searchorstartUrls: keywords as you'd type them into Walmart's search box (each one is searched separately), or Walmart search, category (/browse/,/cp/), shop or product (/ip/) URLs. Filters you set on walmart.com stay in the URL and are kept.maxItems: total results across all keywords and URLs. Default 20; 0 means no limit.sort,minPrice,maxPrice: the order and price range for search and category results. The preset sorts byprice_low.scrapeProductDetails: on by default. Turn it off, as the preset does, when the search-result fields are enough.includeReviews,onlyReviews,maxReviews: add reviews to each product, or save one row per review instead.endPage: the last results page per search or category, at 40 products per page.
How to scrape Walmart with the API
Create a token under Settings → API & Integrations in the dashboard and store it as SCRAPELY_TOKEN. This preset runs in a few seconds, so the synchronous endpoint can start it and return the items in one call:
curl -X POST "https://api.scrape.ly/v2/actors/shelfbright~walmart-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $SCRAPELY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"search": "laptop", "minPrice": 300, "maxPrice": 1000, "sort": "price_low", "scrapeProductDetails": false, "maxItems": 10}'The call waits up to 45 seconds and returns a JSON array. Add ?format=csv for CSV. A large job with product pages on can run longer. Then the call answers 408 while the run keeps going, and calling again would start a second run. For those, start the run with POST /v2/actors/shelfbright~walmart-scraper/runs, poll /v2/actor-runs/RUN_ID?waitForFinish=60 until the status is SUCCEEDED, and read /v2/actor-runs/RUN_ID/dataset/items. The API docs show the full flow.
In Python, install the client with pip install scrapely-client-python. call() waits for the run however long it takes:
import os
from scrapely_client import ScrapelyClient
client = ScrapelyClient(os.environ["SCRAPELY_TOKEN"], api_url="https://api.scrape.ly")
run = client.actor("shelfbright/walmart-scraper").call(
run_input={
"search": "laptop",
"minPrice": 300,
"maxPrice": 1000,
"sort": "price_low",
"scrapeProductDetails": False,
"maxItems": 10,
}
)
print(run.status) # SUCCEEDED, FAILED, ABORTED or TIMED-OUT
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item["price"], item.get("seller"), item["name"])In JavaScript or Node.js, install it with npm install scrapely-client:
import { ScrapelyClient } from 'scrapely-client';
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN, baseUrl: 'https://api.scrape.ly' });
const run = await client.actor('shelfbright/walmart-scraper').call({
search: 'laptop',
minPrice: 300,
maxPrice: 1000,
sort: 'price_low',
scrapeProductDetails: false,
maxItems: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);The Python client, JavaScript client and dataset API docs cover paging through large datasets.
With an AI agent (MCP)
Scrape.ly runs a hosted MCP server at https://api.scrape.ly/mcp. In Cursor, add it to ~/.cursor/mcp.json:
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp",
"headers": { "Authorization": "Bearer YOUR_TOKEN" }
}
}
}In Claude Code, run claude mcp add --transport http scrapely https://api.scrape.ly/mcp, then /mcp to sign in with OAuth. The agent uses search-actors, fetch-actor-details, call-actor and get-actor-output. Try a prompt like: "Use scrapely to run shelfbright/walmart-scraper for laptops between $300 and $1,000, cheapest first, 10 results without product pages, and give me a CSV of name, price, rating and seller." The MCP docs list the other clients.
A real run: Laptops $300 to $1,000
We ran the preset on 22 October 2026. It saved 10 results, the run took 7.1 seconds, and it was charged $0.0204 in total. Here are the first five rows:
| name | price | rating | reviewCount | seller | availability |
|---|---|---|---|---|---|
| HP Laptop 15-dy1032ms - Intel Core i3 - 1005G1 / up to 3.4 GHz - Win … | 305.97 | 0 | 1 | RAYDES | In stock |
| HP 15.6 inch HD Windows 11 Laptop Intel Processor N200 4GB RAM 128GB … | 305.99 | 4.1 | 1,176 | milky tech | In stock |
| Restored 14" Dell Latitude 5000 Business Laptop Computer, Intel Core … | 306.24 | 0 | 0 | Blair Technology Group | In stock |
| Restored Dell Inspirion 5520 Laptop PC \ | 15.6" Laptop \ | Intel Core … | 308 | 0 | 0 | Discount Computer Depot | In stock |
| ACEMAGIC Laptop 15.6 FHD 16GB 512GB Intel Quad-Core 12th Alder Lake N… | 308.79 | 4.5 | 1,900 | Kamrui Official Store | In stock |
2026-10-22T15:23:12.639Z [scrapely.actor] INFO [Scrapely] Initializing API storage for run 7a6c1e758245425fb
2026-10-22T15:23:12.785Z [scrapely.proxy_configuration] INFO Platform proxy access check succeeded.
2026-10-22T15:23:12.785Z [scrapely.actor] INFO Scraping 1 input(s), up to 10 results, search results only, network: datacenter.
2026-10-22T15:23:16.945Z [scrapely.actor] INFO Done. Saved 10 results. Requests: 1, bot checks: 0, browser pages: 0, proxy: datacenter.
2026-10-22T15:23:17.154Z [scrapely.actor] INFO [Status message]: Saved 10 results.
2026-10-22T15:23:17.669Z [Scrapely] Container state: status=exited exitCode=0 oomKilled=falseThe price filter and sort worked as set: the five cheapest laptops sat between $305.97 and $308.79, just above the $300 floor. Two are "Restored" listings. Three had a rating of 0 with at most one review, so filter on reviewCount before you compare ratings. All five come from marketplace sellers, not Walmart itself. brand and wasPrice were empty on all five: brand is filled from product pages, which this preset skips, and wasPrice stays empty when there is no discount. The log shows the whole job took one request with no bot checks.
What it costs
The Actor has one charge event: result-item, at $0.002 for each product saved (or each review, in reviews-only mode). Products that fail to load or no longer exist aren't charged.
This run: 10 results × $0.002 = $0.02 in event fees. The run was charged $0.0204 in total, because platform usage added $0.000238 of compute, $0.000098 of datacenter proxy traffic and $0.0001 of storage writes.
At 1,000 results: 1,000 × $0.002 = $2.00 in event fees, plus platform usage. Usage grows with what you ask for: search-only runs like ours are faster and use less traffic than runs that open every product page. If you want a hard cap, set a maximum charge on the run; the Actor stops cleanly when it's reached.
Limits and common problems
- 25 pages per search. Walmart shows at most 25 result pages (about 1,000 products) per search or category. Split big jobs into narrower keywords, categories or price ranges; duplicates across them are removed.
- No ZIP code or store. Walmart prices and stock can depend on the store and ZIP code. This Actor can't choose one, so prices reflect Walmart's default location for the request. It covers walmart.com (United States) only.
- Storefront and brand pages. These aren't supported. Use a search URL with the brand or seller filter instead.
- Bot checks. Walmart's bot check is strict. The run uses US datacenter addresses and switches to residential ones by itself if the check keeps appearing. If every address is blocked, the run stops with a clear message and keeps what it saved.
- Reviews on product rows. Reviews attached to a product row stop at 2,000 per product. Use
onlyReviewsfor more; review rows have no cap. - Sync timeouts. This run took 7.1 seconds, but the synchronous endpoint stops waiting at 45 seconds. Use the asynchronous flow for large jobs.
Is it legal to scrape Walmart?
The Actor reads public product pages that anyone can open without an account, and it doesn't log in. Walmart's Terms of Use (last updated September 21, 2026) are explicit, though. They say you may not use "any robot, spider, site search/retrieval application or other manual or automatic device to retrieve, index, 'scrape,' 'data mine' or otherwise gather any Materials" without Walmart's express prior written consent. The same clause bars using that material to train AI or machine learning models. Product data rarely includes personal data, but reviews and reviewer names can. Then privacy laws such as the GDPR and the CCPA apply. This is not legal advice. Before you use Walmart data commercially, get advice from a lawyer for your case.
Alternatives
- Walmart's own APIs. The Walmart developer portal offers Marketplace APIs for sellers to manage their items, prices and orders, plus Supplier and advertising APIs. If you sell on Walmart and need your own listing data, use these. Affiliates should also look at Walmart I/O, Walmart's developer portal for building apps with Walmart APIs.
- Your own Python scraper. Scrapfly's guide reads the JSON Walmart embeds in each page (
__NEXT_DATA__) with httpx and parsel. Oxylabs' guide uses requests and BeautifulSoup and shows the CAPTCHA page you'll meet first. Both then recommend their paid services for handling blocks. - A headless browser. Playwright or Selenium gives you full control over the page. It's the better choice when you need interactions a ready-made tool doesn't cover, at the cost of running browsers and proxies yourself.
FAQ
Can you scrape Walmart prices by ZIP code?
Not with this Actor. Walmart can price by store and ZIP code, but the Actor sees the default online location Walmart picks for each request. If you need store-level prices, this Actor isn't the right tool for that part of the job.
How many products can you scrape from one Walmart search?
Walmart shows up to 25 pages of 40 products, so about 1,000 per search or category. To go beyond that, run several narrower searches in one input, for example by price range. The Actor removes duplicates across them.
Can you scrape Walmart reviews?
Yes. Turn on includeReviews to add up to maxReviews reviews to each product row, or onlyReviews to save one row per review. The Reviews for one product preset shows the second mode. Each review row costs $0.002, and review text can contain personal data, so mind privacy law.
Do you need a proxy to scrape Walmart?
Not your own. US datacenter addresses are included, and the run moves to residential addresses by itself if Walmart's bot check keeps appearing. You don't need a Walmart account either.
How do you track Walmart prices over time?
Save the input as a task and run it on a schedule. Compare price and wasPrice per usItemId between runs, and read the results from the dataset API or send them to a webhook.




