# Walmart Product Scraper · Fast Go HTTP (`santamaria-automations/walmart-scraper`) Actor

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.

- **URL**: https://apify.com/santamaria-automations/walmart-scraper.md
- **Developed by:** [NanoScrape](https://apify.com/santamaria-automations) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.30 / 1,000 product scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 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

```json
{
  "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-scraper` to 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

```json
{
  "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 as `itemId`).
- `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`, or `LIMITED_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 is `1P` (sold by Walmart), `3P` (marketplace seller), or empty.
- `sellerType` (string). `"1P"` or `"3P"`. Duplicated from `seller.type` for 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`, and `isRollback` daily for a SKU catalog.
- Stock monitoring. Track `inStock`, `availabilityStatus`, `pickup.available`, and `delivery.available` for restock alerts.
- Catalog enrichment. Pull `features`, `specifications`, and `highResolutionImages` for product feeds.
- Competitive intelligence. Compare `stars`, `reviewsCount`, `starsBreakdown`, and `seller` across competing item IDs.
- 1P vs 3P monitoring. Watch `sellerType` and `seller.id` to detect when Walmart hands a listing to a marketplace seller, which often signals a price change.
- Rollback tracking. Filter by `isRollback: true` and the ratio `listPrice / price` to discover live promotions.
- Variant discovery. Use `variantDetails` to enumerate all sibling SKUs of a parent listing.
- Review analytics. Pull `topReviews` for 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.

- `listPrice` only when the product is on sale.
- `unitPrice` only on consumables and bulk goods.
- `warranty` and `returnPolicy` only when the PDP surfaces them.
- `variantAttributes` and `variantDetails` only on parent listings with variants.
- `isBestSeller`, `isRollback`, `isClearance`, `isFlashDeal`, `isSponsored` populate only when Walmart shows the badge.
- `answeredQuestions` only on items with a Q\&A section.
- `videosCount` only 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](https://apify.com/santamaria-automations/amazon-product-scraper). The same architecture applied to Amazon across 20 marketplaces.
- [eBay Product Scraper](https://apify.com/santamaria-automations/ebay-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](https://apify.com/santamaria-automations/walmart-scraper/issues) of this actor. We typically respond within 24 hours.

Contact: contact@nanoscrape.com

# Actor input Schema

## `startUrls` (type: `array`):

Walmart product page URLs. Any of these formats works: `/ip/12345678`, `/ip/product-slug/12345678`, or the full share URL. Item ID is auto-detected from the URL. Combine with the Item IDs field below. Both are merged into one queue.

## `itemIds` (type: `array`):

Bare Walmart item IDs (numeric, 5 to 12 digits). Each is expanded to `https://www.walmart.com/ip/{itemId}` and scraped. Combine with Product URLs above. Both fields can be used together.

## `language` (type: `string`):

Accept-Language preference sent to Walmart. `en-US` is the default. `es-US` returns Spanish copy for the same catalog.

## `maxItems` (type: `integer`):

Cap the total number of products scraped across this run. Set to `0` for unlimited (scrape every URL and item ID you provided).

## `scrapeReviewSample` (type: `boolean`):

Return up to 8 top reviews per product (stars, title, author, date, body) when the PDP embeds them. Adds minimal cost. For the full review stream, chain a dedicated Walmart reviews scraper.

## `scrapeVariants` (type: `boolean`):

Include the list of sibling variants (sizes, colors, packs) with their item IDs, prices, and availability. Variant detail pages are not separately fetched in v1. Pass those IDs in a follow-up run to enrich them.

## `zipCode` (type: `string`):

Optional. Sets the delivery ZIP shown on the product page. Affects displayed price (regional promos), pickup availability, and delivery estimate. Leave empty to use Walmart's default (usually Bentonville, AR, 72716).

## `concurrency` (type: `integer`):

Products fetched in parallel. 5 to 10 is reliable for most workloads. Higher (up to 50) is faster but increases the chance of transient blocks that force retries.

## Actor input object example

```json
{
  "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"
  ],
  "language": "en-US",
  "maxItems": 0,
  "scrapeReviewSample": true,
  "scrapeVariants": true,
  "zipCode": "94103",
  "concurrency": 10
}
```

# Actor output Schema

## `products` (type: `string`):

Dataset containing scraped Walmart product items

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const 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"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("santamaria-automations/walmart-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_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"],
}

# Run the Actor and wait for it to finish
run = client.actor("santamaria-automations/walmart-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "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"
  ]
}' |
apify call santamaria-automations/walmart-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=santamaria-automations/walmart-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/Jb9wgpgFL1J7gjCnt/builds/jtLnbSKbRIGgtVpFD/openapi.json
