Walmart Scraper
Pricing
Pay per event
Walmart Scraper
Scrape Walmart products by keyword or URL. Get prices, deal badges, seller info, variants, ratings, and descriptions.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
8 hours ago
Last modified
Categories
Share

Extract product data from Walmart.com, Walmart.ca, and Walmart.com.mx — with price change tracking, MAP violation detection, bulk item ID mode, and customer reviews. Supports keyword search, direct URLs, ZIP-code geo pricing, and scheduled monitoring. No API key required.
Why this scraper?
🔍 Three discovery modes
Search — keyword-based product discovery across all three Walmart markets. Bulk — supply a list of item IDs directly for the fastest possible fetches, no search overhead. Monitor — track a fixed set of products and get only the items that changed since last run.
📉 Price change tracking
Every run compares current price and availability against last-known values. Each item gets a changeStatus field: NEW, PRICE_DROP, PRICE_RISE, RESTOCKED, OUT_OF_STOCK, or UNCHANGED. Enable outputOnlyChanges to emit only changed items — perfect for daily monitoring schedules.
⚠️ MAP violation detection
Supply a mapPrices object ({ "itemId": 49.99 }) and every product below its Minimum Advertised Price is flagged with mapViolation: true, mapPrice, and belowMapBy — ready to feed into MAP enforcement workflows.
📍 ZIP code geo-targeted pricing
Walmart prices and availability vary by location. Enter any US ZIP code to scrape exactly what a buyer in that area sees.
🎨 Variant pricing
Sizes, colours, and configurations — each variant's price, availability, and stock status extracted separately.
⭐ Customer reviews (add-on)
Enable includeReviews for per-product reviews: rating, text, verified-purchase flag, helpful votes. Billed at $0.50/1,000 reviews.
🌎 Three Walmart markets
walmart.com (USD), walmart.ca (CAD), walmart.com.mx (MXN) from one actor.
Input parameters
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | "search" | search (keyword), bulk (item ID list), or monitor (change tracking) |
keywords | array | [] | Search terms. Each runs independently. |
startUrls | array | [] | Specific Walmart product or search page URLs. |
itemIds | array | [] | Walmart numeric item IDs for bulk/monitor mode. Fastest input method. |
domain | string | "walmart.com" | walmart.com, walmart.ca, or walmart.com.mx |
maxResults | integer | 100 | Maximum products to return. |
fetchDetails | boolean | true | Fetch detail page for variants, UPC, description, full images. |
zipCode | string | "" | US ZIP for geo-targeted pricing (e.g. "10001", "90210"). |
outputOnlyChanges | boolean | false | Emit only changed items. Requires history from previous runs. |
mapPrices | object | {} | MAP per item ID: { "1004249195": 49.99 }. Items below trigger mapViolation: true. |
includeReviews | boolean | false | Fetch customer reviews (billed at $0.50/1,000). |
maxReviews | integer | 20 | Max reviews per product when includeReviews is true. |
skipReposts | boolean | false | Skip products seen in previous runs (new-product feed dedup). |
Output schema
Product items (always present)
| 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 restricted) |
listPrice | number|null | Original "was" price before discount |
currency | string | "USD", "CAD", or "MXN" |
domain | string | Walmart domain scraped |
zipCode | string|null | ZIP used for geo pricing |
availability | string|null | "IN_STOCK", "OUT_OF_STOCK", etc. |
inStock | boolean | True if 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 thumbnail URL |
sellerName | string|null | Seller display name |
sellerId | string|null | Walmart seller ID |
isFirstParty | boolean | True when sold directly by Walmart |
fulfillment | string|null | Fulfillment type |
dealBadge | string|null | Badge text (Rollback, Clearance, Special Buy) |
isRollback | boolean | Rollback badge present |
isClearance | boolean | Clearance badge present |
isSpecialBuy | boolean | Special Buy badge present |
changeStatus | string | NEW | PRICE_DROP | PRICE_RISE | RESTOCKED | OUT_OF_STOCK | UNCHANGED |
prevPrice | number|null | Price from previous run (null on first run) |
prevAvailability | string|null | Availability from previous run |
priceChange | number|null | Absolute price change vs previous run (negative = drop) |
priceChangePct | number|null | Percentage price change vs previous run |
mapViolation | boolean | True when price is below the supplied MAP |
mapPrice | number|null | The MAP price 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-char MD5 for change detection |
With fetchDetails: true (default)
| Field | Type | Description |
|---|---|---|
model | string|null | Model number |
upc | string|null | UPC barcode |
pricePerUnit | string|null | Unit price label (e.g. "$0.14 /oz") |
categories | array | Full breadcrumb path |
descriptionHtml | string|null | Raw HTML description |
descriptionText | string|null | Plain text description |
variants | array|null | Each variant: type, name, itemId, price, listPrice, availability, inStock, image, currency |
images | array | All product image URLs |
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 name |
isVerifiedPurchase | boolean | Verified Purchaser badge |
helpfulVotes | integer | Helpful vote count |
submissionDate | string|null | Submission timestamp |
Example product (monitor mode, second run)
{"itemId": "1004249195","title": "Keurig K-Mini Single Serve Coffee Maker, Black","price": 49.00,"listPrice": 59.99,"currency": "USD","domain": "walmart.com","zipCode": "10001","changeStatus": "PRICE_DROP","prevPrice": 59.99,"prevAvailability": "IN_STOCK","priceChange": -10.99,"priceChangePct": -18.32,"mapViolation": false,"mapPrice": null,"belowMapBy": null,"isRollback": true,"dealBadge": "Rollback","inStock": true,"rating": 4.6,"reviewCount": 18432,"isFirstParty": true,"variants": [{ "type": "Color", "name": "Black", "itemId": "1004249195", "price": 49.00, "inStock": true },{ "type": "Color", "name": "Dusty Rose", "itemId": "3698274018", "price": 54.00, "inStock": true }],"scrapedAt": "2026-06-03T18:00:00.000Z","contentHash": "a3f8b21c9d4e7f01"}
Examples
Keyword search with geo pricing:
{ "keywords": ["coffee maker"], "maxResults": 50, "fetchDetails": true, "zipCode": "10001" }
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,"zipCode": "90210"}
MAP enforcement monitoring:
{"itemIds": ["1004249195", "846561863"],"fetchDetails": true,"mapPrices": { "1004249195": 49.99, "846561863": 29.99 }}
💰 Pricing
$3.00 per 1,000 products — you only pay for successfully scraped items.
Reviews add-on: $0.50 per 1,000 reviews when includeReviews is enabled.
| Results | Product 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. This scraper charges only for what you retrieve.
Performance
| Run | 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
outputOnlyChangesoutputs zero items on the first run (all items are NEW, which counts as changed). Useful from the second run onwards.- Price history is stored in the default KV store per run — it is shared within the same scheduled task but not across separate actor runs without a scheduler.
- ZIP targeting is US-only;
.caruns ignorezipCode. - walmart.com.mx is accepted as input but currently returns limited data — the
.mxsite serves a different page structure that the scraper does not yet fully support. Usewalmart.comorwalmart.cafor reliable results..mxsupport is planned for a future release. - Review text is extracted from the product detail page — requires
fetchDetails: truewhen usingincludeReviews.
Technical details
- Sources: walmart.com, walmart.ca, walmart.com.mx
- Memory: 512 MB
- Price history store: KeyValueStore
walmart-price-history(up to 200K items tracked) - Dedup store: KeyValueStore
walmart-scraper-dedup(50K item rolling cap) - Retry: Exponential backoff, 3 attempts per request
Additional services
Need a custom actor, additional filters, scheduled runs, or integration support?.nl](mailto:info@unfencedgroup.nl) — we build on request.
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