# Walmart Scraper – Product Prices, Ratings & Stock API (`scrapeworkshq/walmart-scraper`) Actor

Walmart scraper & Walmart product API: scrape Walmart.com products by keyword or URL. Get current price, was-price, savings, rating, review count, seller, stock availability, brand, image and URL. Price tracking with change alerts. No login, no personal data.

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

## Pricing

Pay per event

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Walmart Scraper & Price Tracker API – Product Prices, Was-Price, Ratings, Seller & Stock

Scrape **public Walmart.com product data** by **search keyword** or **product URL / item ID**. For every product you get the **name, current price, was-price (list price), savings, rating, review count, seller (Walmart.com or marketplace seller), availability / in-stock status, brand, image, product URL** and a scrape timestamp.

Fast, HTTP-only (no browser), **no login, no Walmart API key, no personal data**. Export to JSON, CSV, Excel or use the Apify API.

### 🚀 Quick start (60 seconds)

1. Click **Try for free** – the input is prefilled with a working example.
2. Press **Start**. A small run finishes in seconds and costs fractions of a cent.
3. Open the **Output** tab (table view) and export **CSV, Excel, JSON** or connect Google Sheets.

```json
{
  "searchKeywords": [
    "air fryer"
  ],
  "maxResultsPerSearch": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

#### Sample output

| name | price | wasPrice | rating | reviewCount | seller | inStock |
|---|---|---|---|---|---|---|
| LEGO DC Batman Batmobile | 25.49 | 29.99 | 4.8 | 197 | Walmart.com | true |
| Ninja 4-qt Air Fryer | 79.00 | 99.00 | 4.7 | 12,034 | Walmart.com | true |

### Why this Walmart product scraper / price tracker?

| | This Actor | Typical Walmart scrapers |
|---|---|---|
| Keyword search + product URLs / item IDs | ✅ | often only one |
| Price **and was-price + savings** | ✅ | price only, or was-price as text |
| Seller name + in-stock flag | ✅ | partial |
| Sort & min/max price filters | ✅ | rarely |
| Sponsored results flagged (or excluded) | ✅ | ❌ mixed in silently |
| Automatic de-duplication across keywords/URLs | ✅ | ❌ |
| Polite rate limiting, retries, residential proxy support | ✅ | varies |
| Reviewer names or customer data | ❌ never collected (privacy) | sometimes |
| Price | **$2.17 / 1,000 products** | $2.90+ / 1,000 (most popular Walmart scraper) |

### Use cases – Walmart price monitoring, price checks & product data

- 📈 **Price monitoring** – schedule daily runs, track price drops and was-price discounts.
- 🛒 **Competitor & MAP tracking** – watch your SKUs and competitor listings, marketplace sellers vs Walmart.com.
- 📦 **Stock alerts** – detect out-of-stock / back-in-stock items.
- 📊 **Market research** – rating and review counts across a category.
- 🤖 **Feeds for apps & spreadsheets** – Google Sheets, Make, Zapier, n8n, API.

### Input

| Field | Description |
|---|---|
| `searchKeywords` | Keywords, e.g. `air fryer`, `lego star wars` |
| `productUrls` | `https://www.walmart.com/ip/<slug>/<itemId>` or bare item IDs |
| `sortBy` | best match, price low→high, price high→low, best selling, highest rating, newest |
| `minPrice` / `maxPrice` | Search price filters (USD) |
| `includeSponsored` | Keep or drop sponsored listings (default keep, flagged) |
| `maxResultsPerSearch` / `maxResultsTotal` | Limits (Walmart shows ~40 items/page, max 25 pages) |
| `maxConcurrency` / `maxRequestsPerMinute` | Politeness controls (defaults 3 / 30) |
| `proxyConfiguration` | Default: Apify **RESIDENTIAL, US**. Strongly recommended – Walmart blocks many datacenter IPs. |

```json
{
  "searchKeywords": ["air fryer"],
  "productUrls": ["https://www.walmart.com/ip/LEGO-Super-Heroes-DC-76332/17096552309"],
  "sortBy": "best_match",
  "maxResultsPerSearch": 100,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}
```

### Output

```json
{
  "itemId": "17096552309",
  "name": "LEGO DC Batman: The Batman Batmobile Building Toy ... 76332",
  "brand": null,
  "price": 25.49,
  "wasPrice": 29.99,
  "savings": 4.5,
  "currency": "USD",
  "rating": 4.8,
  "reviewCount": 197,
  "seller": "Walmart.com",
  "availability": "In stock",
  "availabilityStatus": "IN_STOCK",
  "inStock": true,
  "isSponsored": false,
  "image": "https://i5.walmartimages.com/seo/LEGO-Super-Heroes-DC-76332_....jpeg",
  "url": "https://www.walmart.com/ip/LEGO-Super-Heroes-DC-76332/17096552309",
  "searchKeyword": null,
  "position": null,
  "scrapedAt": "2026-10-21T21:05:49.964Z"
}
```

Also: `priceRange` (variant items), `unitPrice`, `sellerType`. See `sample-output.json`.

### ⭐ Unique: Monitor mode, CSV-ready output & webhook summary

**Price & stock monitoring**: run on a schedule with `monitorMode: "changes"` – you get only products whose price, was-price, stock status, rating or review count changed, with `previousPrice`, `priceChange`, `priceChangePct`. Unchanged products are not output and not charged. `summaryWebhookUrl` can ping Slack/Zapier with the number of price drops.

- **Monitor mode** (`monitorMode`: `all` | `changes` | `onlyNew`, plus `monitorKey`) – cross-run dedupe and field-level diffs (`changeType`, `changedFields`, `changes`, `firstSeenAt`). Skipped items cost **$0**.
- **Flat / CSV-ready output** (`outputFormat: "flat"`) – one column per field, perfect for Excel and Google Sheets.
- **Run summary** – a free `SUMMARY` record in the run's key-value store (also linked in the Output tab) and optionally POSTed to `summaryWebhookUrl`.
- **Changes** dataset view – see what's new/changed at a glance.

### 💰 Pricing (pay per result)

| Event | Price |
|---|---|
| Run start | $0.00005 |
| Product | **$2.17 / 1,000** |

≥25% below the most-used Walmart Actors ($2.90+ / 1,000). Residential proxy usage is included in the price.

🎁 **Sweetener:** in Monitor mode you only pay for new/changed items, and duplicates within a run are never charged. Run summary + webhook are free.

### Notes & limitations

- Data is what Walmart.com shows publicly to an anonymous US visitor (no store/ZIP selection); prices can differ by location and change frequently.
- Product URLs are resolved via Walmart's public search for the item ID; items that are no longer listed are reported in the log (`notFound` in `RUN_STATS`).
- Walmart uses bot protection; the Actor retries with fresh proxy sessions. Use residential proxy for reliability.
- Scrapes only public product information. You are responsible for complying with Walmart's terms and applicable law.

### FAQ

**Do I need a Walmart account or API key?** No.
**Does it collect personal data?** No – no reviewer names, buyer or seller contact details.
**How fast is it?** ~40 products per request; default 30 requests/minute.

### 🔌 Integrations & API

Works with Zapier, Make, n8n, Google Sheets, Slack, Airbyte, LangChain/LlamaIndex and the Apify MCP server (AI agents).

**JavaScript**

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('scrapeworkshq/walmart-scraper').call({"searchKeywords": ["air fryer"], "maxResultsPerSearch": 10, "proxyConfiguration": {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US"}});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

**Python**

```python
from apify_client import ApifyClient
client = ApifyClient('<APIFY_TOKEN>')
run = client.actor('scrapeworkshq/walmart-scraper').call(run_input={"searchKeywords": ["air fryer"], "maxResultsPerSearch": 10, "proxyConfiguration": {"useApifyProxy": True, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US"}})
items = client.dataset(run['defaultDatasetId']).list_items().items
```

**cURL (sync, returns items)**

```bash
curl -X POST 'https://api.apify.com/v2/acts/scrapeworkshq~walmart-scraper/run-sync-get-dataset-items?token=<APIFY_TOKEN>&format=csv' \
  -H 'content-type: application/json' -d '{"searchKeywords": ["air fryer"], "maxResultsPerSearch": 10, "proxyConfiguration": {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US"}}'
```

### ❓ More FAQ

**Why do I see slightly different products than in my browser?**\
Walmart personalizes ranking. Use product URLs for a fixed watchlist.

**Do I need my own proxy?**\
No. The default US residential Apify Proxy is already set and included in the price.

**How does Monitor mode work?**\
The Actor remembers the IDs and key fields of items it returned before (in a named key-value store in *your* account, keyed by `monitorKey`). Next run, each item gets `changeType` = `new` / `changed` / `unchanged` plus a `changes` diff. In *Only new* / *Only new or changed* modes, the rest is skipped **and not charged**.

**How do I get a clean CSV / Excel / Google Sheet?**\
Set **Output format → Flat / CSV-ready**. Nested objects become `dot.columns` and lists are joined with `|`, so every export is one row per item with no JSON blobs.

**Can I get notified when a run finishes?**\
Set **Summary webhook URL** (Zapier/Make/n8n catch hook, Slack workflow, your API). You receive one compact JSON: counts, new/changed, price drops/rises, dataset ID. Or use Apify's native webhooks/integrations.

**How do I limit cost?**\
Use the max-results inputs and Apify's *Maximum cost per run*. The Actor stops cleanly when the limit is reached.

Found a bug or need a field? Open an issue on the **Issues** tab – we usually reply within 24 h.

### Changelog

- **2026-10-21** – Monitor mode (new/changed only, free skips), flat CSV-ready output, SUMMARY record + webhook, Changes view.

# Actor input Schema

## `searchKeywords` (type: `array`):

Keywords to search on Walmart.com, e.g. "lego", "air fryer".

## `productUrls` (type: `array`):

Walmart product pages (https://www.walmart.com/ip/.../17096552309) or bare item IDs.

## `sortBy` (type: `string`):

Sort order of search results.

## `minPrice` (type: `integer`):

Optional search price filter.

## `maxPrice` (type: `integer`):

Optional search price filter.

## `includeSponsored` (type: `boolean`):

Keep sponsored (ad) products in search results. They are flagged with isSponsored.

## `maxResultsPerSearch` (type: `integer`):

Per keyword. Walmart shows ~40 products per page and at most 25 pages.

## `maxResultsTotal` (type: `integer`):

0 = no overall limit.

## `maxConcurrency` (type: `integer`):

Parallel requests.

## `maxRequestsPerMinute` (type: `integer`):

Global polite rate limit.

## `proxyConfiguration` (type: `object`):

Walmart blocks many datacenter IPs. Residential US proxy is recommended for reliable runs.

## `monitorMode` (type: `string`):

Remembers items from previous runs (per Monitor key) and adds changeType = new/changed/unchanged plus a field-level diff. In the two 'only' modes, unchanged/old items are not output and not charged.

## `monitorKey` (type: `string`):

Name of the memory used by Monitor mode. Use a different key per schedule/task (e.g. 'daily-pokemon'), so separate watchlists don't mix.

## `outputFormat` (type: `string`):

Flat makes CSV/Excel/Google Sheets exports one clean column per field.

## `summaryWebhookUrl` (type: `string`):

At the end of the run, POST a compact JSON summary (counts, new/changed, price drops, dataset ID) to this URL – e.g. Zapier/Make/n8n catch hook or Slack workflow. Free.

## Actor input object example

```json
{
  "searchKeywords": [
    "air fryer"
  ],
  "productUrls": [
    "https://www.walmart.com/ip/17096552309"
  ],
  "sortBy": "best_match",
  "includeSponsored": true,
  "maxResultsPerSearch": 10,
  "maxResultsTotal": 0,
  "maxConcurrency": 3,
  "maxRequestsPerMinute": 30,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  },
  "monitorMode": "off",
  "monitorKey": "default",
  "outputFormat": "full"
}
```

# Actor output Schema

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

All scraped items in the default dataset

## `overview` (type: `string`):

No description

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

No description

# 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 = {
    "searchKeywords": [
        "air fryer"
    ],
    "productUrls": [
        "https://www.walmart.com/ip/17096552309"
    ],
    "maxResultsPerSearch": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapeworkshq/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 = {
    "searchKeywords": ["air fryer"],
    "productUrls": ["https://www.walmart.com/ip/17096552309"],
    "maxResultsPerSearch": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapeworkshq/walmart-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 '{
  "searchKeywords": [
    "air fryer"
  ],
  "productUrls": [
    "https://www.walmart.com/ip/17096552309"
  ],
  "maxResultsPerSearch": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call scrapeworkshq/walmart-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapeworkshq/walmart-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/bpZIEehuRr1lqdbI0/builds/9vKLw18bLyl0XMzzF/openapi.json
