# Walmart Product Scraper 2026 (`devcake/walmart-product-scraper`) Actor

Walmart product scraper to extract product data by keyword, item ID, URL, or category. Collect prices, stock, sellers, ratings, UPCs, images, variants, and specs in JSON, CSV, or Excel.

- **URL**: https://apify.com/devcake/walmart-product-scraper.md
- **Developed by:** [devcake](https://apify.com/devcake) (community)
- **Stats:** 1 total users, 0 monthly users, 81.5% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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 for Prices and Stock Data

This Walmart data scraper collects prices, stock status, sellers, ratings, images, specifications, variants, and other product data from Walmart's public US storefront. Search by keyword or provide an item ID, product URL, search URL, or category URL.

For the quickest test, enter `wireless mouse`, keep the default settings, and click **Start**. Each matching product is saved as a structured row in the run's default dataset.

🔎 Search by keyword or look up an exact item ID or URL\
💰 Collect prices, savings, and stock status\
🏪 Compare sellers, ratings, and product details\
📊 Save one structured dataset row per product

### 🎯 What can you use this Walmart scraper for?

- **Price monitoring** — compare Walmart prices over time.
- **Stock monitoring** — track public product availability.
- **Competitor research** — compare prices, brands, sellers, ratings, and discounts.
- **Catalog enrichment** — collect item IDs, UPCs, models, descriptions, images, variants, and specifications.
- **Product discovery** — search by keyword or browse a category.

The Actor runs on Apify with automatic US residential proxy rotation and bounded retries. You can run it manually, call it through the API, save configurations as tasks, schedule recurring runs, and connect the resulting dataset to other tools.

### 🚀 How to scrape Walmart products

1. Open the Actor's **Input** tab and add at least one product name, Walmart item ID, product URL, search URL, browse URL, or category URL.
2. Choose the maximum number of products for each search or listing, select a product order, and decide whether search results should include full product details.
3. Click **Start**. The Actor searches Walmart, retries temporary request failures with fresh US residential proxy sessions, and saves each successful product separately.
4. Open **Output → Products** to view or export the dataset. Open **Output → Run summary** to inspect target totals, retry counts, detail statistics, and any errors.

### 📥 Walmart scraper input examples

Add up to 50 search terms, item IDs, or Walmart URLs in one run. You can use one type of input or mix several types together.

| Input | Description | Default and limits |
| --- | --- | --- |
| `targets` | Product names, item IDs, or Walmart product, search, browse, and category URLs | Required; 1–50 unique targets |
| `maxResults` | Maximum products saved for each search term or listing URL | Form prefill: `30`; API default when omitted: `10`; range: `1`–`500` |
| `sort` | Product order for search terms and listing URLs | Default: `best_match` |
| `includeDetails` | Adds descriptions, specifications, images, fulfillment, returns, and embedded reviews to search and listing results | Default: `false`; item IDs and product URLs always include details |

#### 🔀 Example input

Use a mixed input when you want search results and exact product details in the same dataset.

```json
{
  "targets": [
    "wireless mouse",
    "18315401919",
    "https://www.walmart.com/ip/example/18315401919",
    "https://www.walmart.com/browse/electronics/bose-headphones/3944_133251_1095191_1231498_1260924"
  ],
  "maxResults": 30,
  "sort": "rating_high",
  "includeDetails": true
}
```

This example combines a keyword, item ID, product URL, and category URL. You can submit any one supported type or mix them. Available product orders are best match, best sellers, lowest price, highest price, highest rated, and newest. The product limit applies separately to each search or listing target.

Category URLs must display a product listing. Department landing pages such as `/cp/electronics/3944` contain navigation and promotions instead of a searchable product grid. For these pages, open a product grid and use its `/browse/` URL, or enter a search term. The Actor reports `CATEGORY_LANDING_PAGE` when no listing is available. Collection stops at the requested product limit, the end of the listing, or 25 pages.

### 📤 Walmart product data output examples

Each product is saved as a separate dataset row. These shortened examples show the difference between a basic listing result and a result enriched from its product page.

#### Basic product result

Search and category targets return this type of result when `includeDetails` is `false`.

```json
{
  "target": "wireless mouse",
  "targetType": "SEARCH",
  "targetIndex": 0,
  "searchQuery": "wireless mouse",
  "status": "SUCCEEDED",
  "scrapeStatus": "SUCCEEDED",
  "dataCompleteness": "LISTING",
  "detailsIncluded": false,
  "scrapedAt": "2026-09-08T12:00:00Z",
  "attempts": 1,
  "position": 1,
  "page": 1,
  "productId": "123456789",
  "name": "Example Wireless Mouse",
  "productUrl": "https://www.walmart.com/ip/123456789",
  "brand": "Example",
  "price": 19.78,
  "currency": "USD",
  "priceDisplay": "$19.78",
  "availability": "IN_STOCK",
  "rating": 4.5,
  "reviewCount": 932,
  "sellerName": "Walmart.com",
  "isSoldByWalmart": true,
  "image": "https://i5.walmartimages.com/example.jpeg",
  "detailStatus": "NOT_REQUESTED",
  "requestedSort": "rating_high"
}
```

#### Product result with details

This result is produced when enrichment succeeds. Item IDs and product URLs always request product details.

```json
{
  "target": "wireless mouse",
  "targetType": "SEARCH",
  "targetIndex": 0,
  "status": "SUCCEEDED",
  "scrapeStatus": "SUCCEEDED",
  "dataCompleteness": "PRODUCT_DETAIL",
  "detailsIncluded": true,
  "scrapedAt": "2026-09-08T12:00:00Z",
  "attempts": 1,
  "productId": "123456789",
  "name": "Example Wireless Mouse",
  "productUrl": "https://www.walmart.com/ip/123456789",
  "brand": "Example",
  "price": 19.78,
  "currency": "USD",
  "availability": "IN_STOCK",
  "model": "WM-100",
  "upc": "012345678905",
  "condition": "New",
  "shortDescription": "A quiet wireless mouse.",
  "images": [
    "https://i5.walmartimages.com/example-front.jpeg",
    "https://i5.walmartimages.com/example-side.jpeg"
  ],
  "highlights": [
    {"name": "Color", "value": "Black"}
  ],
  "specifications": [
    {"name": "Connectivity", "value": "Wireless"}
  ],
  "fulfillment": [
    {"type": "SHIPPING", "availability": "IN_STOCK", "selected": true}
  ],
  "returns": {
    "returnable": true,
    "free_returns": true,
    "window_value": 30,
    "window_unit": "Day"
  },
  "reviews": {
    "average_rating": 4.5,
    "total_count": 932,
    "items": [
      {"rating": 5, "title": "Great", "text": "Very quiet"}
    ]
  },
  "detailStatus": "SUCCEEDED",
  "detailAttempts": 1
}
```

Other fields can include price ranges, offers, badges, variants, warnings, warranty, categories, rating distribution, and store location.

Prices, availability, fulfillment, and seller information reflect Walmart's public, logged-out US storefront at the time of the run. Walmart may show different results depending on location and inventory.

### 🔌 Automate and export Walmart data

Download the default dataset as JSON, CSV, Excel, XML, HTML, RSS, or JSONL, or read it through the dataset API.

- Use the Actor's **API** tab to generate REST API requests or client examples.
- Create an [Apify schedule](https://docs.apify.com/platform/actors/running/schedules) for recurring price and stock snapshots.
- Add webhooks or integrations to process completed runs.
- See [Apify dataset exports](https://docs.apify.com/platform/storage/dataset).

### 💳 How pricing works

This Actor uses Apify's pay-per-event pricing. Each saved product uses one dataset-item event; a successfully enriched product also uses one product-detail event. Failed or unsaved products are not charged. Search results without details use only the dataset-item event, while item IDs and product URLs normally use both.

Use this formula to estimate a run before starting it:

`estimated event cost = (saved products × dataset-item price) + (detailed products × product-detail price)`

Ten basic products use 10 dataset-item events. If all 10 are enriched, the run also uses 10 product-detail events. Check the **Pricing** tab for current prices, plan discounts, and included usage. Set a maximum charge per run to control spending.

### 🔗 Related e-commerce Actors

| Actor | Best for |
| --- | --- |
| [Amazon Listings Scraper 2026](https://apify.com/devcake/amazon-listings-scraper) | Amazon listings with ASINs, prices, ratings, Prime, and badges. |
| [eBay Listings Scraper](https://apify.com/devcake/ebay-listings-scraper) | eBay listings with prices, demand signals, and seller locations. |
| [Scraper by Image — Amazon & eBay](https://apify.com/devcake/amazon-ebay-scraper) | Visually similar Amazon and eBay products from a photo. |
| [Google Shopping Scraper](https://apify.com/devcake/google-shopping) | Google Shopping products, prices, sellers, and ratings across countries. |

### ❓ Walmart product scraper FAQ

#### Does this Walmart scraper collect reviews?

Product details can include the overall rating, review count, rating distribution, and up to five reviews embedded in the public product page. It is not intended to collect complete review histories.

#### Which Walmart storefront does it cover?

The scraper covers Walmart's public US storefront. It does not sign in to customer accounts, select a custom store, or complete purchases.

#### Why are some fields empty or different from the Walmart page I see?

Walmart varies prices, availability, fulfillment options, and sellers by location and inventory. The Actor uses Walmart's public, logged-out US storefront through US residential proxy sessions. A field can also be unavailable when Walmart omits it from the page or when detail enrichment only partially succeeds.

#### What should I do if a target fails or returns partial details?

Open **Output → Run summary** and check the target-level error and retry counts. Confirm that the URL is a public HTTPS `walmart.com` product, search, browse, or category page, then try the target again. If the problem continues, open the Actor's **Issues** tab and include a shareable run so the failure can be investigated.

#### Is scraping Walmart legal?

This Actor accesses pages available on Walmart's public, logged-out US storefront and does not sign in or complete purchases. You are responsible for ensuring that your use of the collected data complies with applicable laws, Walmart's terms and policies, and any contractual obligations relevant to your project.

#### How can I get support?

Open the Actor's **Issues** tab to ask a question, report a problem, request a feature, or provide feedback. For troubleshooting, include the input you used, the expected result, and a shareable failed run when possible. Never post account credentials, API tokens, cookies, or other secrets.

### Diagnosing incomplete or failed runs

Open **Output → Run summary** for the failure stage (`TARGET`, `PAGE`, or `DETAIL`), error code, affected target, and available attempt counts. Terminal target failures are also printed in the run log, and an all-failed run includes its causes in the final status message. The summary is saved at startup, after each completed target, and on Apify's persist-state event.

- `INVALID_INPUT`: correct the input using the validation message.
- `BLOCKED`: Walmart returned a verification page or refused the requests after bounded session rotation.
- `NETWORK_ERROR`: the proxy or upstream request exhausted its retries.
- `NOT_FOUND`: the product or page returned HTTP 404 or 410.
- `CATEGORY_LANDING_PAGE`: use a product listing URL or keyword instead of a department landing page.
- `SCHEMA_CHANGED`: Walmart returned structured content that the parser could not recognize.
- `PAGINATION_ENDED_EARLY`: Walmart advertised more results but returned an empty later page. Earlier products are retained; try a narrower search if you need additional coverage.

If a later listing page fails, products collected from earlier pages are saved with `scrapeStatus: "PARTIAL"` and `pageErrors`. Failed enrichment keeps the listing data and records the detail error. The summary reports `SUCCEEDED_WITH_ERRORS` for these cases, with `targetsPartial`, `pagesFailed`, `detailsFailed`, and `errorCounts`. It retains up to 50 error examples and counts further examples in `errorsOmitted`. `targetsPartial` is a subset of `targetsSucceeded`.

A hard timeout or process termination can leave the latest summary at `RUNNING`; check the platform's run status as well. Products for a target are saved after its listing and optional enrichment finish, so unfinished target data may not yet be in the dataset.

#### Developer verification

Run the offline regressions with `uv run pytest -q` and lint with `uv run ruff check src tests tools`.

For a small live check through US residential proxies, set `APIFY_TOKEN` in the environment and run:

```bash
uv run python tools/live_probe.py 'wireless mouse' '18315401919' \
  --limit 30 --apify-proxy --output output/live-probe.json
```

The probe uses the same target normalization and runner as the Actor, supports `--details` and `--sort`, and exits with code 1 for failed or partial targets. It makes live proxy requests and reports counts and field completeness; it does not start a cloud Actor run or charge product events.

# Actor input Schema

## `targets` (type: `array`):

Enter one per line: a product name such as 'wireless mouse' (up to 200 characters), an item ID such as '18315401919', or a Walmart product, search, browse, or category URL. Category pages must contain a product grid; department landing pages are not supported. You can mix formats in one run.

## `maxResults` (type: `integer`):

Set the maximum number of products to save for each search term or product listing URL. Item IDs and product URLs always return one product. Keep 30 for a quick first run.

## `sort` (type: `string`):

Choose how products from search terms, search URLs, browse URLs, and category URLs are ordered. Item IDs and product URLs are not affected.

## `includeDetails` (type: `boolean`):

Turn on to collect descriptions, specifications, extra images, fulfillment, returns, and reviews for products found through searches, browse pages, or category pages. Runs take longer when this is enabled. Item IDs and product URLs always include these details.

## Actor input object example

```json
{
  "targets": [
    "wireless mouse"
  ],
  "maxResults": 30,
  "sort": "best_match",
  "includeDetails": false
}
```

# Actor output Schema

## `results` (type: `string`):

Open the scraped Walmart products, prices, availability, sellers, ratings, images, and optional details.

## `summary` (type: `string`):

Open run totals, retry counts, detail statistics, and target-level errors.

# 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 = {
    "targets": [
        "wireless mouse"
    ],
    "maxResults": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("devcake/walmart-product-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 = {
    "targets": ["wireless mouse"],
    "maxResults": 30,
}

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

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

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

```

## CLI example

```bash
echo '{
  "targets": [
    "wireless mouse"
  ],
  "maxResults": 30
}' |
apify call devcake/walmart-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,devcake/walmart-product-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/bHJ9tbG6PpxmyfcPc/builds/WjlDNaWOkjQSDhXzX/openapi.json
