Walmart Scraper - Products, Prices & Reviews
Pricing
from $2.20 / 1,000 results
Walmart Scraper - Products, Prices & Reviews
Extract Walmart product prices, ratings, availability and categories in the US, Canada and Mexico, plus US sellers and reviews. Pay per delivered row, with a separate start fee.
Pricing
from $2.20 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
43
Total users
14
Monthly active users
2 hours ago
Last modified
Categories
Security
Limited permissionsShare
Walmart Scraper
Extract Walmart product prices, categories, sellers and reviews from the US, Canada and Mexico as rows you can export.
- Product names, prices, ratings, availability and Walmart links.
- Keyword searches, category listings and product details.
- US seller contacts and customer reviews where published.
- Optional variant and review rows, with a row limit for each input.
- $3.00 per 1,000 rows on the Free plan, plus a $0.005 start fee.
What does Walmart Scraper do?
Walmart Scraper collects publicly visible data from walmart.com, walmart.ca and walmart.com.mx. Use it for price monitoring, assortment comparisons and review analysis. Each run uses one market and one mode.
search,browseandcatalogreturn product listings.productreturns details for product URLs or item IDs.departmentsandcategoryHubreturn categories.sellersandreviewsreturn US seller and review rows.enrichDetailsadds product details to search or browse rows; it is off by default.expandVariantsis off by default. Product-page review previews are off withmaxReviews: 0. Available secondary offers become separate rows without an extra switch. Products, offers, variants and reviews share the input's row limit; each delivered row has the same price.
What data can you extract from Walmart?
Fields depend on the mode and what Walmart publishes. rowType identifies the entity; entityKey identifies its row. Where present, parentUsItemId links a child row to its product; paginated review rows use itemId.
Product rows
| Field | Description | Example |
|---|---|---|
rowType | Entity type | product |
entityKey | Row identity | product:14628565544 |
usItemId | Walmart item ID | 14628565544 |
name | Product name | Paper towels |
productUrl | Walmart product link | https://www.walmart.com/ip/14628565544 |
price | Current displayed price | 27.66 |
currency | Price currency | USD |
averageRating | Average customer rating | 4.7 |
availabilityStatus | Published stock status | IN_STOCK |
sellerName | Seller name | Walmart.com |
pricedForPostalCode | Postal code used for the displayed price, when confirmed | 72712 |
locationStatus | applied when the page agreed on the requested location, else walmartDefaultStore:<storeId> | applied |
Variant rows
| Field | Description | Example |
|---|---|---|
parentUsItemId | Parent product ID | 604342441 |
variantId | Variant ID | 123456789 |
variantOptions | Size, color or other options | {"color":"White"} |
Offer rows
| Field | Description | Example |
|---|---|---|
offerId | Seller's offer ID | example-offer-id |
sellerName | Seller making this offer | Example Store |
price | Offer price, when shown | 29.99 |
Review rows
| Field | Description | Example |
|---|---|---|
reviewId | Review ID | example-review-id |
itemId | Product ID in paginated reviews | 604342441 |
rating | Customer's score | 5 |
reviewText | Review text | Fits as expected. |
verifiedPurchase | Purchase verification, when shown; empty when the review shows no badges | true |
reviewSource | Which surface produced the row (see below) | ssr_reviews_paginator |
Reviews come from two surfaces that share field names but cover different
amounts. reviewSource says which produced the row: ssr_reviews_paginator
is the reviews mode, which walks review pages to the full set;
app_pdp_first_page is the first review page bundled in a product
collection — treat it as a sample sized by maxReviews.
Category rows
| Field | Description | Example |
|---|---|---|
categoryId | Category ID | 3944 |
categorySlug | Category URL name | electronics |
name | Category name | Electronics |
Seller rows
| Field | Description | Example |
|---|---|---|
catalogSellerId | Numeric storefront ID | 101174524 |
sellerDisplayName | Storefront name | Example Store |
phones | Published seller phone entries | [{"value":"+1 555 0100","type":"seller"}] |
emails | Published seller email entries | [{"value":"name@example.com","type":"seller"}] |
leadAbsences | Reasons contact fields are empty | {"person":"Not on this site (no contact person)"} |
Full field surface and App-only fields
Product and search rows carry two objects beyond the named columns above:
appOnly— values the App returns that the server-rendered page never populated.appSurface— the research report's field catalogue projected onto the row, keyed by entity and report JSON path, for exampleappSurface.item["data.contentLayout.pageMetadata.location.city"].
The App channel answers four sibling frames inside one response. A product
response is {product, contentLayout, idml, reviews}: contentLayout carries
layout modules and page metadata, idml carries descriptions, specifications
and nutrition facts, and reviews carries the review summary and aspects. A
search response is {search, contentLayout}. All four are projected. Paths
under __NEXT_DATA__ belong to the server-rendered page and never appear on
these rows.
Array paths arrive as a bounded digest (count, plus a sample when it is light).
Heavy nested samples and oversized container paths collapse to a shape marker
(oversized with a key or entry count), because each leaf is already delivered
as its own path. Nothing is dropped silently: if a row would exceed the
delivery cap, whole entities are trimmed and every trim is recorded in the run
diagnostics.
appSurface is deliberately wide. Ignore it when the named columns are enough;
use it when auditing coverage against a field report. It honours the same
sub-entity switches as the named columns: maxReviews: 0 collapses
review-shaped paths to {"count": N, "dropped": "reviews_disabled"};
expandVariants: false collapses variant paths to
{"count": N, "dropped": "variants_disabled"}. appSurfaceDiag records
requested / present / absent plus dropped, so nothing is silently lost.
How to scrape Walmart
- Open Walmart Scraper in Apify Console.
- Enter one target, such as
keyword, and choosemarket. - Set
maxResultsto3for a small first run. - Click Start and wait for completion.
- Download the dataset or read it through the API.
Empty input starts the form's example search for wireless earbuds, limited to 3 rows. Normal start and row charges apply. With mode: "auto", filling one target selects its mode. If you mix target types, product URLs take priority over item IDs, seller URLs, seller IDs, keywords, categories and seller shards. Check INPUT_REPORT for ignored fields.
Search
Fill keyword or keywords. Use separate runs for different markets. Choose sort, price bounds or excludeSponsored to narrow listing rows.
Browse
Fill categoryId; categorySlug is optional. This returns products, not category rows.
Catalog
Choose mode: "catalog" and supply categoryId. facetCrawl adds category filter slices; it does not guarantee every product in a category.
Departments
Choose mode: "departments". No target is needed, and this does not become the example search.
Category hub
Choose mode: "categoryHub" with categoryId or categorySlug to collect category links. A slug alone also selects this mode automatically.
Product
Fill productUrls or usItemIds. productUrls takes walmart.com, walmart.ca or walmart.com.mx product page links (/ip/.../<item id>) and {"url": "<link>"} objects; requestsFromUrl remote lists and walmrt.us short links are not fetched — open them and paste the full product link. Separate links in one entry with whitespace or a comma directly before the next http(s):// link; commas in query parameters stay. Optional variants, secondary offers and review previews consume the same row allowance as the product.
Sellers
Use catalogSellerIds, sellerUrls, or slpShard with mode: "sellers". This mode is US-only. slpOffset skips entries within a chosen seller sitemap shard.
Reviews
Choose mode: "reviews" with product URLs or item IDs and market: "US". It reads review pages rather than just the product-page preview. Here, maxReviews: 0 uses the remaining maxResults allowance; it does not disable reviews.
Home
Choose mode: "home" with market: "US" and no target field. It reads the App home layout: the merchandised shelves and their items. Each row names its shelf (shelfModuleId, shelfModuleType, shelfZone) and carries shelfScope: "home_layout_not_catalogue". A home page is mostly banners, so a run can fill rows from one shelf; modulesRead, modulesWithItems and emptyZones separate an empty shelf from an unread one. The layout does not paginate.
What to fill in
| Field | What to enter | Default |
|---|---|---|
mode | A mode described above | auto |
keyword / keywords | One term or up to 10 terms; use one field | Empty; form example wireless earbuds |
productUrls / usItemIds | Product page links or numeric item IDs; {"url": ...} objects OK | Empty |
catalogSellerIds / sellerUrls | Numeric seller IDs or US storefront links | Empty |
categoryId / categorySlug | Category number and optional URL name | Empty |
market | US, CA or MX | US |
maxResults | Rows per input, from 1 to 500 | 70; form prefill 3 |
postalCode / storeId | Requested postal code or store number | Empty |
sort | best_match, price_low, price_high, best_seller, highest_rated, new | best_match |
facet | Listing filter such as brand:Apple | Empty |
minPrice / maxPrice | Nonnegative price bounds | Empty |
excludeSponsored | Exclude sponsored listing rows | false |
enrichDetails / enrichLimit | Add search/browse details; limit 1–50 products | false / 5 |
facetCrawl / facetCrawlMaxFacets | Add catalog filter slices; limit 1–100 slices | false / 15 |
expandVariants | Return available variants as separate rows | false |
maxReviews | Review cap, 0–500; see the reviews mode above | 0 |
reviewSort | Review order, for example newest | relevancy |
slpShard / slpOffset | Seller shard 1–4 and starting offset | Empty / 0 |
Search input
{"keyword": "wireless earbuds","maxResults": 3}
Browse input
{"categoryId": "3944","maxResults": 3}
Catalog input
{"mode": "catalog","categoryId": "3944","facetCrawl": true,"facetCrawlMaxFacets": 2,"maxResults": 5}
Departments input
{"mode": "departments","maxResults": 3}
Category hub input
{"mode": "categoryHub","categoryId": "3944","categorySlug": "electronics","maxResults": 3}
Product input
{"usItemIds": ["604342441"],"expandVariants": true,"maxResults": 3}
Sellers input
{"catalogSellerIds": ["101174524"],"maxResults": 1}
Reviews input
{"mode": "reviews","usItemIds": ["604342441"],"maxReviews": 3,"maxResults": 3}
maxItems and limit alias maxResults. Misspelled fields are corrected, unknown ones ignored, bad filter choices dropped. productUrls takes {"url": ...} objects and mobile, review or affiliate links, skipping non-product ones. Without mode, search, category or seller links run in their mode. Unusable targets stop the run before rows are charged (INVALID_INPUT: ... names the entry position and problem category); the start fee can still apply. The INPUT_REPORT record shows how the input was read.
Output example
Illustrative product row; prices and ratings are not a current quote.
{"source": "walmart","type": "product","rowType": "product","entityKey": "product:14628565544","mode": "search","market": "US","usItemId": "14628565544","name": "Paper towels","price": 27.66,"currency": "USD","averageRating": 4.7,"availabilityStatus": "IN_STOCK","sellerName": "Walmart.com","productUrl": "https://www.walmart.com/ip/14628565544"}
Export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table. RUN_SUMMARY contains row counts and warnings; failed runs can also write ERROR_SUMMARY.
Why use this Walmart scraper?
- Pay per delivered row. Pages tried are not result charges; the start fee is separate.
- Keep delivered results. Rows already written remain in the dataset after a stop or timeout. Unfinished collection is not guaranteed to be delivered.
- Understand failures. Input errors identify the field to fix.
- See missing data. Unavailable fields remain empty; contact fields include absence reasons.
- Use several inputs. Collect multiple keywords, product URLs or seller IDs in one run.
- No proxy setup. You do not need to set up proxies or supply a Walmart login.
How much does it cost to scrape Walmart?
Pay-per-event pricing includes a $0.005 start event plus delivered rows. Start billing is one event per allocated GB, with a minimum of one; the default memory uses one event. Platform usage is included.
| Apify plan | Price per row | Price per 1,000 rows |
|---|---|---|
| Free | $0.003 | $3.00 |
| Starter | $0.003 | $3.00 |
| Scale | $0.0026 | $2.60 |
| Business | $0.0022 | $2.20 |
| Platinum | $0.002 | $2.00 |
| Diamond | $0.0016 | $1.60 |
maxResults applies to each keyword, product URL/item ID or seller URL/ID. Browse, catalog, departments, category hub and seller-shard runs each count as one input. The default is 70; larger limits are collected in parts of 70, up to the input maximum of 500. All row types share the applicable limit.
Free Apify plan users have a 200-row cap per run and 10 runs of this Actor, set by the Actor developer. The whole run is limited by Maximum cost per run (maxTotalChargeUsd in the API), including the start charge.
Example: 3 keywords × 50 delivered rows = 150 rows. On the Free plan, 150 × $0.003 + $0.005 = $0.455, assuming one start event. Fewer delivered rows cost less.
What happens when the run timeout is too short
With automatic resume, a long collection can pause: the run shows ABORTED
with a "Queued on the collection backend" message and resumes once results
are ready, finishing SUCCEEDED. Rows already written are not delivered
twice. The pause can occur up to 3 times per run; the default 3600-second
timeout reduces the need for it. Synchronous API endpoints wait at most 300
seconds and can return an empty dataset during a pause — for larger requests,
start asynchronously and read the dataset after SUCCEEDED.
Use with AI agents and the API
Apify MCP server
Add https://mcp.apify.com?tools=lentic_clockss/walmart-scraper to a client
with remote MCP support. Sign in via OAuth or
Authorization: Bearer <YOUR_APIFY_TOKEN>get-dataset-items. Example prompt: "Find 3 Walmart US products for
wireless earbuds and return their names, prices and product links."
Apify API
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/walmart-scraper").call(run_input={"keyword": "wireless earbuds", "maxResults": 3})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
For async HTTP, POST the input to
https://api.apify.com/v2/acts/lentic_clockss~walmart-scraper/runs with
Authorization: Bearer, then
GET https://api.apify.com/v2/datasets/<datasetId>/items?format=jsonFAQ
Is it legal to scrape Walmart?
Only collect data you have a lawful right to access. You are responsible for Walmart's terms and applicable data-protection law. Publicly visible personal data still needs a lawful basis for collection and use.
Why did my run end as ABORTED?
It may be waiting for automatic resume. Check for the queued-and-resume status message above; not every ABORTED run is a resumable pause.
How many results can I get?
Request 1–500 rows per input. Availability, filters, the run's cost limit and Free-plan limits can reduce delivery. A row limit is not a promise of that many matches.
Why are some fields empty?
Walmart may omit a field, hide seller contacts or show different details by market. leadAbsences explains missing contact data. Missing business values are not invented.
Can I get prices for my postal code?
Canada supports nearest-store selection. US prices may reflect a nearby or default Walmart location rather than the exact ZIP code. Check pricedForPostalCode; postalCode is included only when confirmed. Mexico does not apply postal-code selection. Check RUN_SUMMARY for location warnings. When the code did not take, rows still deliver and carry locationStatus: walmartDefaultStore:<storeId> naming Walmart's chosen store.
Can I collect seller contacts outside the US?
No. Seller collection is US-only. Published contacts can appear on US seller rows and enriched product rows; visibility exemptions can leave them empty. Ordinary listing rows do not provide full seller contacts.
Does product mode collect every review?
No. Product mode and search/browse enrichment provide only available product-page previews when maxReviews is positive. Use US reviews mode for pagination, within your row limits.
Is this Walmart's official API?
No. This Actor collects public storefront data. It does not access accounts, carts or order history.
Limitations
- Only
US,CAandMXmarkets are supported;sellersandreviewsmodes are US-only. - Listings, stock, prices and fields vary by location and collection time.
- Category slices and pagination do not guarantee a complete catalog.
- Variant and offer availability depends on the product page; child rows reduce the number of parent products within a row limit.
- Seller contact people, coordinates and external websites are not supplied; a Walmart storefront link is not a seller-owned website.
- An interrupted run may have no dataset rows if delivery has not started.
Related scrapers
More e-commerce and marketplace scrapers from the same publisher:
- Temu Product Scraper
- Allegro Scraper
- TikTok Shop Product Scraper
- Amazon Search, Category & Best Sellers Scraper
- Coupang Product Scraper
- MercadoLibre Scraper
- Rakuten Japan Scraper
- SHEIN Product Scraper
Browse all of our scrapers at apify.com/lentic_clockss.
Support
Report problems or request fields through the Issues tab of this Actor's page. Include the run ID and the input you used.