Walmart Scraper
Pricing
Pay per event
Walmart Scraper
Scrape Walmart products by keyword, URL, or item ID. Get prices, discounts, variants, ratings with full star breakdown, seller and return info, deal and sponsored flags, fulfillment options, and reviews. Price-change tracking and MAP detection built in. No API key required.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
1
Bookmarked
11
Total users
5
Monthly active users
9 days ago
Last modified
Categories
Share

Extract product data from Walmart.com and Walmart.ca at scale: prices, deal badges, sellers, variants, ratings, review distribution, return policy, fulfillment options, and full descriptions. Built-in price-change tracking, MAP violation detection, bulk item-ID mode, and customer reviews. Search by keyword, direct URL, or item ID. No API key required.
Why this scraper?
🔍 Three discovery modes
Search finds products by keyword. Bulk fetches a list of item IDs directly for the fastest possible runs. Monitor tracks a fixed set of products and returns only the ones that changed since the last run.
💵 Complete pricing
Current price, original "was" price, calculated discount and discount percentage, and per-unit price for grocery items. Sort search results by price and filter by a minimum and maximum price.
🎨 Full variant data
Every colour, size, and configuration is returned with its own item ID, price, availability, and image, plus a compact list of all available options.
⭐ Ratings and review distribution
Average rating, total review count, and the full one-to-five-star breakdown for each product. Optionally pull individual customer reviews with text, rating, verified-purchase flag, and helpful votes.
🏷️ Deal and demand signals
Rollback, Clearance, Special Buy, Best Seller, and Sponsored flags, so you can spot promotions and paid placements at a glance.
🚚 Fulfillment and seller detail
Pickup, delivery, shipping, and free-shipping availability per product. Seller name, first-party flag, and — for marketplace sellers — seller rating and review count. Return policy included.
📉 Price change tracking and MAP enforcement
Each run compares price and availability against last-known values and tags every item with a change status. Supply your MAP prices and any product priced below its minimum is flagged automatically.
📍 ZIP-code geo pricing
Walmart prices and availability vary by location. Enter a US ZIP code to scrape exactly what a buyer there sees.
Input parameters
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | "search" | search (keyword), bulk (item ID list), or monitor (change tracking). |
keywords | array | [] | Search terms. Each keyword runs independently. |
startUrls | array | [] | Specific Walmart product (/ip/...) or search page URLs. |
itemIds | array | [] | Walmart numeric item IDs for bulk mode. Fastest input method. |
domain | string | "walmart.com" | walmart.com (USD) or walmart.ca (CAD). |
maxResults | integer | 5 | Maximum products to return across all inputs. |
sort | string | "best_match" | Sort search results: best_match, price_low, price_high, best_seller, new, or rating_high. |
minPrice | integer | (empty) | Only return products priced at or above this value. |
maxPrice | integer | (empty) | Only return products priced at or below this value. |
fetchDetails | boolean | false | Fetch each product's detail page for variants, description, unit price, model, UPC, review distribution, seller rating, and return policy. Always on in bulk and monitor modes. |
zipCode | string | "" | US ZIP code for geo-targeted pricing (e.g. "10001", "90210"). |
outputOnlyChanges | boolean | false | Emit only items that changed since the last run. Requires history from previous runs. |
mapPrices | object | {} | MAP per item ID: { "1004249195": 49.99 }. Items below are flagged mapViolation: true. |
includeReviews | boolean | false | Fetch customer reviews (saved as separate items). Billed at $0.50 per 1,000 reviews. |
maxReviews | integer | 20 | Maximum reviews per product when includeReviews is on. |
skipReposts | boolean | false | Skip products already returned in previous runs (cross-run dedup). |
Output schema
Always present (every product)
| Field | Type | Description |
|---|---|---|
itemId | string | Walmart numeric item ID. |
title | string | Full product title. |
url | string | Canonical product URL. |
price | number|null | Current price (null if out of stock or not offered). |
listPrice | number|null | Original "was" price before discount. |
discount | number|null | Absolute discount from list price (null when not discounted). |
discountPct | number|null | Discount as a percentage (null when not discounted). |
currency | string | "USD" or "CAD". |
availability | string|null | Availability status as reported by Walmart. |
inStock | boolean|null | True when the item is in stock. |
brand | string|null | Product brand. |
rating | number|null | Average customer rating (0–5). |
reviewCount | integer|null | Total review count. |
image | string|null | Primary image URL. |
sellerName | string|null | Seller display name. |
sellerId | string|null | Walmart seller ID (null for first-party items). |
isFirstParty | boolean | True when sold directly by Walmart. |
fulfillment | string|null | Primary fulfillment type. |
offersPickup | boolean | Store pickup available. |
offersDelivery | boolean | Local delivery available. |
offersShipping | boolean | Shipping available. |
freeShipping | boolean | Free shipping offered. |
dealBadge | string|null | Badge text (Rollback, Clearance, etc.). |
isRollback | boolean | Rollback badge present. |
isClearance | boolean | Clearance badge present. |
isSpecialBuy | boolean | Special Buy badge present. |
isBestSeller | boolean | Best Seller badge present. |
isSponsored | boolean | Paid/sponsored placement in search results. |
domain | string | Walmart domain scraped. |
zipCode | string|null | ZIP used for geo pricing. |
changeStatus | string | NEW, PRICE_DROP, PRICE_RISE, RESTOCKED, OUT_OF_STOCK, or UNCHANGED. |
prevPrice | number|null | Price from the previous run (null on first run). |
prevAvailability | string|null | Availability from the previous run. |
priceChange | number|null | Price change versus previous run. |
priceChangePct | number|null | Percentage price change versus previous run. |
mapViolation | boolean | True when price is below the supplied MAP. |
mapPrice | number|null | The MAP you supplied for this item. |
belowMapBy | number|null | How far below MAP the current price is. |
source | string | Walmart domain. |
scrapedAt | string | ISO 8601 timestamp. |
contentHash | string | 16-character hash for change detection. |
With fetchDetails: true (and in bulk/monitor mode)
| Field | Type | Description |
|---|---|---|
model | string|null | Manufacturer model number. |
upc | string|null | UPC barcode. |
pricePerUnit | string|null | Unit price for grocery items (e.g. "44.1 ¢/oz"; null for non-grocery). |
categories | array | Full category breadcrumb path. |
descriptionHtml | string|null | Raw HTML description. |
descriptionText | string|null | Plain-text description. |
descriptionMarkdown | string|null | Description converted to Markdown. |
variants | array|null | Each variant: itemId, type, name, price, listPrice, availability, inStock, image, currency. |
variantOptions | array|null | Available options grouped by attribute, e.g. [{ "name": "Color", "values": ["Black","Blue"] }]. |
images | array | All product image URLs. |
ratingDistribution | object|null | Star breakdown: { one, two, three, four, five } counts. |
sellerAverageRating | number|null | Marketplace seller rating (null for first-party). |
sellerReviewCount | integer|null | Marketplace seller review count (null for first-party). |
returnPolicy | object|null | { returnable, freeReturns, returnWindow, text }. |
Review items (includeReviews: true)
Saved as separate items with "_type": "review".
| Field | Type | Description |
|---|---|---|
_type | string | Always "review". |
reviewId | string|null | Platform review ID. |
itemId | string | Parent product item ID. |
rating | number|null | Star rating (1–5). |
title | string|null | Review headline. |
text | string|null | Review body. |
authorName | string|null | Reviewer display name. |
isVerifiedPurchase | boolean | Verified Purchaser badge. |
helpfulVotes | integer | Helpful vote count. |
submissionDate | string|null | Submission date. |
Example product (search with fetchDetails: true)
{"itemId": "256397692","title": "Hanes Men's Beefy-T Heavyweight Cotton T-Shirt","url": "https://www.walmart.com/ip/Hanes-Mens-Beefy-T/256397692","price": 15.00,"listPrice": 20.00,"discount": 5.00,"discountPct": 25.0,"currency": "USD","availability": "IN_STOCK","inStock": true,"brand": "Hanes","model": "5180","upc": "075338110738","rating": 4.6,"reviewCount": 1240,"ratingDistribution": { "one": 5, "two": 0, "three": 4, "four": 14, "five": 102 },"sellerName": "Walmart.com","isFirstParty": true,"offersPickup": true,"offersDelivery": true,"offersShipping": true,"freeShipping": true,"isBestSeller": true,"isSponsored": false,"categories": ["Clothing", "Mens Clothing", "Mens Shirts", "Mens T-Shirts"],"variantOptions": [{ "name": "Color", "values": ["Black", "Navy", "White"] },{ "name": "Clothing Size", "values": ["S", "M", "L", "XL", "2XL"] }],"variants": [{ "itemId": "15343651004", "type": "Color / Clothing Size", "name": "Black / L", "price": 15.00, "availability": "IN_STOCK", "inStock": true }],"returnPolicy": { "returnable": true, "freeReturns": true, "returnWindow": 90, "text": "Free 90-day returns" },"changeStatus": "PRICE_DROP","prevPrice": 18.00,"priceChange": -3.00,"priceChangePct": -16.67,"mapViolation": false,"scrapedAt": "2026-07-10T08:36:00.000Z","contentHash": "a3f8b21c9d4e7f01"}
Examples
Keyword search with full detail and geo pricing:
{ "keywords": ["coffee maker"], "maxResults": 50, "fetchDetails": true, "zipCode": "10001" }
Price-sorted search with a price range:
{ "keywords": ["laptop"], "sort": "price_low", "minPrice": 300, "maxPrice": 800, "maxResults": 40 }
Bulk mode — fastest way to check known products:
{ "itemIds": ["1004249195", "846561863", "5095233663"], "fetchDetails": true, "domain": "walmart.com" }
Daily price-drop monitor (scheduled run):
{ "keywords": ["keurig", "nespresso"], "mode": "monitor", "outputOnlyChanges": true, "maxResults": 500, "fetchDetails": true }
💰 Pricing
$3.00 per 1,000 products — you only pay for products successfully returned. Failed retries are never charged.
Reviews add-on: $0.50 per 1,000 reviews when includeReviews is enabled.
| Products | Cost | Reviews (20 each) |
|---|---|---|
| 100 | ~$0.30 | +~$1.00 |
| 1,000 | ~$3.00 | +~$10.00 |
| 10,000 | ~$30.00 | +~$100.00 |
Flat-rate Walmart data services charge $49–$199/month regardless of usage. Use the Max results cap to control your spend exactly.
Performance
| Run | Typical time |
|---|---|
| 50 products, bulk mode | 2–4 min |
| 50 products, search + fetchDetails | 4–6 min |
| 200 products, search + fetchDetails | 15–20 min |
| 1,000 products, monitor + outputOnlyChanges | 20–40 min |
Known limitations
- Detail-only fields (variants, description, unit price, model, UPC, review distribution, seller rating, return policy) require
fetchDetails: true. Bulk and monitor modes always fetch details. pricePerUnitis only present for grocery and consumable items that Walmart prices per unit; it is null for everything else.sellerAverageRatingandsellerReviewCountare only present for third-party marketplace sellers, not first-party Walmart items.outputOnlyChangesreturns zero items on the first run, since every item is new. It is useful from the second run onwards.- ZIP targeting is US-only;
walmart.caignoreszipCode. walmart.com.mxis not currently supported.
Technical details
- Sources: walmart.com (USD), walmart.ca (CAD).
- Memory: 512 MB.
- Price history store: KeyValueStore
walmart-price-history(up to 200K items tracked). - Retry: automatic retry on network errors with exponential backoff.
Related scrapers
Other scrapers in our marketplaces and retail collection:
Need a custom scraper?
Unfenced Group builds Apify actors for any website — for free.
If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.
Get in touch: www.unfencedgroup.nl