Walmart Product Scraper · Fast Go HTTP
Pricing
from $1.30 / 1,000 product scrapeds
Walmart Product Scraper · Fast Go HTTP
Extract Walmart.com product data by URL or item ID. Returns price, list price, stock, ratings, seller (1P/3P), shipping, images, variants, specs and 30+ more fields. Go HTTP-only with Akamai-tuned TLS + datacenter proxy rotation. Pay-per-result.
Pricing
from $1.30 / 1,000 product scrapeds
Rating
0.0
(0)
Developer
NanoScrape
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Walmart Product Scraper
Extract Walmart.com product data by URL or item ID. Returns price, list price, unit price, stock, ratings, star breakdown, seller (1P or 3P), shipping, pickup, delivery, hi-res images, feature highlights, specifications, variants, top reviews, and 30 more fields per product. Pay-per-result, no login required.
What it does
You provide Walmart product URLs or bare item IDs. You get back clean, structured JSON, one row per product.
- Any URL format works:
/ip/12345678,/ip/product-slug/12345678, or the full share URL - Bare item IDs are accepted too. 5 to 12 digit numeric IDs from the URL
- Runs 1 to 50 requests in parallel (default 10)
- Returns 32 to 40 fields per product depending on what Walmart exposes on that PDP
- One row per item ID. No duplicates, no filler rows, no phantom entries for invalid IDs
Sample output
{"itemId": "5689919121","url": "https://www.walmart.com/ip/Apple-AirPods-Pro-Wireless-Earbuds-MagSafe-Case-USB-C/5689919121","title": "Apple, AirPods Pro, Wireless Earbuds with MagSafe Case (USB-C)","brand": "Apple","modelNumber": "MTJV3AM/A","upc": "195949052712","price": { "value": 199, "currency": "USD", "raw": "$199.00" },"listPrice": { "value": 249, "currency": "USD", "raw": "$249.00" },"stars": 4.4,"reviewsCount": 44416,"starsBreakdown": { "5star": 0.777, "4star": 0.073, "3star": 0.031, "2star": 0.021, "1star": 0.097 },"inStock": true,"availabilityStatus": "IN_STOCK","stockText": "In stock","seller": { "name": "Walmart.com", "id": "F55CDC31AB754BB68FE0B39041159D63", "type": "1P" },"sellerType": "1P","categoryPath": "Electronics / Wireless / Headphones"}
The full output also includes unitPrice, manufacturer, thumbnailImage, highResolutionImages, videosCount, features, description, shortDescription, breadCrumbs, isRollback, isClearance, isFlashDeal, isBestSeller, shipping, pickup, delivery, shipsFrom, returnPolicy, warranty, specifications, highlights, variantAttributes, variantDetails, isMultipack, multipackCount, gtin, wpid, usItemId, sku, answeredQuestions, and topReviews.
Pricing
$0.001 per actor start, plus $0.0013 per scraped product. $1.30 per 1,000 products.
You only pay for products that successfully return data. Failed fetches and invalid item IDs are not charged.
New to Apify? Every account gets a $5 free monthly platform credit, enough for around 3,700 results on this actor before you commit to paying anything. Plenty to test the full feature set.
Why this scraper
This actor is built in Go, not Node or Python. Every other Walmart scraper on this marketplace runs on CheerioCrawler, Playwright, or Python asyncio. This one ships as a single 14 MB static Go binary with an Akamai-tuned TLS fingerprint. Cold start is under a second, memory footprint is 128 MB, and every field is populated in the same request. No follow-up round-trips to fetch reviews or specs.
Walmart runs on Akamai Bot Manager, which rate-limits scrapers that reuse IPs. This actor rotates through fresh Apify datacenter session IDs on every retry (3 IPs before escalating to residential), and warms each with a homepage visit to set the ak_bmsc and bm_sv cookies before hitting the PDP. Residential fallback exists but is capped at 5% of the run. Most Walmart URLs succeed on datacenter, which is why the actor stays at $0.0013 per result.
Fields are extracted directly from Walmart's __NEXT_DATA__ JSON blob, so structured data comes out clean. No fragile CSS selectors, no half-parsed prices with stray currency symbols. Fields like starsBreakdown (a five-way rating histogram as fractions), unitPrice (with unit label), sellerType (1P vs 3P), and topReviews (up to 8 reviews with stars, text, author, and date) come out of the box.
Every product returns sellerType: "1P" when sold by Walmart or "3P" when the listing is fulfilled by a marketplace seller, plus the full seller identity block. Useful for competitive intelligence, marketplace monitoring, and avoiding third-party price traps.
Multipack titles like "Pack of 4" or "8-count" are flagged with isMultipack: true and multipackCount: 8 so you can filter them downstream or attribute reviews correctly to the parent product.
Invalid or delisted item IDs are detected via Walmart's soft-404 shell (the data.product node is null in __NEXT_DATA__) and rejected before pushing to the dataset. You are never billed for phantom rows.
Use with AI Agents (MCP)
Connect this actor to any MCP-compatible AI client: Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or a custom agent.
Apify MCP server URL:
https://mcp.apify.com?tools=santamaria-automations/walmart-scraper
Example prompt once connected:
Use
walmart-scraperto fetch the current price, rating, stock status, and seller type for Walmart item IDs 10450114, 5689919121, and 14566603957. Return a markdown table with columns: itemId, title, price, stars, reviewsCount, sellerType, stockText.
Clients that support dynamic tool discovery (Claude.ai, VS Code, Cursor) receive the full input schema automatically. Agents can call the actor with a JSON payload matching the input schema below.
Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
startUrls | array of {url} | no | [] | Walmart product URLs. Any of these formats works: /ip/id, /ip/slug/id, or the full share URL. |
itemIds | array of strings | no | [] | Bare numeric item IDs, 5 to 12 digits each, for example 10450114. |
language | string | no | "en-US" | Accept-Language preference. Either en-US or es-US (Spanish copy on the same catalog). |
maxItems | integer | no | 0 | Cap the total products scraped this run. 0 means unlimited. |
scrapeReviewSample | boolean | no | true | Include up to 8 top reviews per product when available. |
scrapeVariants | boolean | no | true | Include the list of variant item IDs with prices and availability. |
zipCode | string | no | "" | Set the delivery ZIP shown on the PDP. Affects displayed price, pickup, and delivery availability. |
concurrency | integer | no | 10 | Parallel requests, 1 to 50. |
At least one of startUrls or itemIds must be non-empty. Duplicate item IDs (via either input) are deduplicated automatically.
Example input
{"startUrls": [{ "url": "https://www.walmart.com/ip/Great-Value-Whole-Vitamin-D-Milk-1-Gallon-128-fl-oz/10450114" },{ "url": "https://www.walmart.com/ip/Apple-AirPods-Pro-Wireless-Earbuds-MagSafe-Case-USB-C/5689919121" }],"itemIds": ["14566603957", "2513765448"],"language": "en-US","scrapeReviewSample": true,"scrapeVariants": true,"concurrency": 10}
Output fields
Each field lists its JSON type in parentheses. Fields marked "situational" are only populated when Walmart exposes them on that PDP.
Core identity
itemId(string). The numeric Walmart item ID.url(string). Canonical product page URL.title(string). Product title.brand(string). Brand name.manufacturer(string, situational). Manufacturer name when different from brand.modelNumber(string, situational). Manufacturer model number.upc(string, situational). 12-digit Universal Product Code.gtin(string, situational). Global Trade Item Number.wpid(string, situational). Walmart Product ID (internal).usItemId(string). Walmart US Item ID (same value asitemId).sku(string, situational). SKU.
Pricing and stock
price(object). Current selling price as{value, currency, raw}.listPrice(object, situational). Original struck-through price. Populated only when on sale.unitPrice(object, situational). Unit price as{value, raw, unit}. Populated on consumables and bulk goods, for example{value: 0.029, raw: "2.9 ¢/fl oz", unit: "fl oz"}.currency(string). Currency symbol or code.inStock(boolean). True when Walmart marks the item as available.availabilityStatus(string). Machine-readable status:IN_STOCK,OUT_OF_STOCK, orLIMITED_STOCK.stockText(string). Human-readable status:"In stock","Out of stock".
Ratings and social proof
stars(number). Average star rating 0 to 5.reviewsCount(integer). Total number of reviews.starsBreakdown(object). Percentage of reviews by star, as fractions summing to ~1. Example{5star: 0.82, 4star: 0.11, 3star: 0.03, 2star: 0.01, 1star: 0.03}.answeredQuestions(integer, situational). Count of answered customer questions.topReviews(array, situational). Up to 8 top reviews per product as[{stars, title, author, date, body}].
Media
thumbnailImage(string). Primary thumbnail URL.highResolutionImages(array of strings). All high-resolution product image URLs.videosCount(integer, situational). Number of product videos.
Content
features(array of strings). Feature bullet points (aggregated from productHighlights).description(string). Long-form product description. May contain HTML markup.shortDescription(string). Short description shown above the fold.breadCrumbs(array of strings). Category breadcrumb path.categoryPath(string). Slash-joined category path, for example"Food / Dairy & Eggs / Milk".specifications(array of{key, value}). Full product specification table.highlights(array of{key, value}). Top feature badges shown above the fold.
Badges
isRollback(boolean, situational). Walmart Rollback promo.isClearance(boolean, situational). Clearance badge.isFlashDeal(boolean, situational). Flash Deal badge.isBestSeller(boolean, situational). Best Seller badge.isSponsored(boolean, situational). Sponsored placement.
Shipping and fulfillment
shipping(object).{method, price, minDays, maxDays, text}.pickup(object). In-store pickup availability as{available, storeId, storeName, text}.delivery(object). Home delivery estimate as{available, minDays, maxDays, text}.seller(object).{name, id, url, type}. Type is1P(sold by Walmart),3P(marketplace seller), or empty.sellerType(string)."1P"or"3P". Duplicated fromseller.typefor easy filtering.shipsFrom(string, situational). Ships-from entity when different from seller.returnPolicy(string, situational). Return policy summary.warranty(string, situational). Warranty text.
Variants
variantAttributes(array of strings, situational). Variant dimension labels: Color, Size, Style, Pack Size, and so on.variantDetails(array, situational). Per-variant item ID plus attributes plus price plus availability.isMultipack(boolean, situational). True when the item is a multipack.multipackCount(integer, situational). Number of units when multipack.
Run metadata
zipCode(string, situational). ZIP code the page was rendered for, when explicitly set in input.input(object). Original input parameters echoed back.scrapedAt(string). ISO 8601 timestamp of when the row was extracted.
Common use cases
- Repricing. Pull
price,listPrice,unitPrice, andisRollbackdaily for a SKU catalog. - Stock monitoring. Track
inStock,availabilityStatus,pickup.available, anddelivery.availablefor restock alerts. - Catalog enrichment. Pull
features,specifications, andhighResolutionImagesfor product feeds. - Competitive intelligence. Compare
stars,reviewsCount,starsBreakdown, andselleracross competing item IDs. - 1P vs 3P monitoring. Watch
sellerTypeandseller.idto detect when Walmart hands a listing to a marketplace seller, which often signals a price change. - Rollback tracking. Filter by
isRollback: trueand the ratiolistPrice / priceto discover live promotions. - Variant discovery. Use
variantDetailsto enumerate all sibling SKUs of a parent listing. - Review analytics. Pull
topReviewsfor sentiment analysis or product-quality signals.
Notes and limits
One row per item ID per run. If you submit the same item ID via both startUrls and itemIds, it is deduplicated.
Variant item IDs are listed inside variantDetails, but each variant's full PDP is not separately fetched in v1. To enrich them, pass the variant IDs in a follow-up run.
Reviews returned: top 8 reviews per product when scrapeReviewSample=true. For the full review stream on a single PDP, use a dedicated Walmart reviews scraper.
Localization. Language toggles between en-US and es-US on the same catalog. zipCode sets the delivery region, which affects displayed price on regional promos plus pickup and delivery availability.
Invalid or delisted item IDs are detected via Walmart's soft-404 shell (the product node in __NEXT_DATA__ is null) and rejected before pushing to the dataset. Not billed as results.
Fields that may be null
Some fields are situational. They populate when Walmart shows them and stay null otherwise. This is not an extraction bug.
listPriceonly when the product is on sale.unitPriceonly on consumables and bulk goods.warrantyandreturnPolicyonly when the PDP surfaces them.variantAttributesandvariantDetailsonly on parent listings with variants.isBestSeller,isRollback,isClearance,isFlashDeal,isSponsoredpopulate only when Walmart shows the badge.answeredQuestionsonly on items with a Q&A section.videosCountonly when the PDP has product videos.
Recommended concurrency
5 to 10 parallel requests is the sweet spot. Higher works but transient Akamai blocks become more frequent. The actor handles these via automatic retries (small extra time, no data loss). Above 20 you may start pushing residential fallback (5% cap enforced).
Retry strategy
Each item ID gets up to 3 fresh datacenter proxy IPs before escalating to residential (capped at 5% of the run). Block detection fires on HTTP 403, 412, 429, or 503, on "Robot or human?" or "Access Denied" pages, or on PDPs under 30 KB (a real Walmart PDP is 150 to 400 KB). Most runs finish with 0% residential escalation at the lowest cost tier.
Related Actors
- Amazon Product Scraper. The same architecture applied to Amazon across 20 marketplaces.
- eBay Product Scraper. Extract eBay listings by URL or item ID across 20 marketplaces.
Support
For issues, feature requests, or additional Walmart flows (search, category, reviews) not yet covered, please open an issue on the Issues tab of this actor. We typically respond within 24 hours.
Contact: contact@nanoscrape.com