# Walmart Product Scraper: Prices, Was-Prices, Ratings & Sellers (`atlasdataworks/walmart-scraper`) Actor

Scrape Walmart search and category results into one flat table: price, was-price, discount, options price range, unit price, rating, review count, seller and Walmart-sold flag, stock, category path, images. No browser, no login.

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

## Pricing

from $2.25 / 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.
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?

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 Product Scraper: prices, was-prices, ratings and sellers for any keyword or category

Scrape **Walmart product data** from walmart.com keyword search and category pages into one flat
table: price, **was-price and discount**, price range across options, unit price, rating, review
count, **seller and whether Walmart itself sells it**, stock status, other-seller count and category
path. No login, no browser, no proxy setup. **$3.00 per 1,000 products**, and you pay only for
products delivered.

### What does this Walmart scraper do?

- **Searches Walmart by keyword** and returns every product tile on the pages it reads, up to 1,000
  per keyword (about 40 to 60 per page).
- **Reads category, browse and filtered search URLs** you paste from your browser
  (`/browse/...`, `/shop/...`, `/cp/...`, `/search?...`). The URL's own filters and sort order are
  kept; only the page number changes.
- **Removes duplicates.** Walmart repeats items across pages and lists some items both as an ad and
  as an organic result. The max you set counts unique products, and you are charged once per
  product.
- **Leaves ads out** by default. An item that is also an organic result is kept as organic. Include
  ads with one switch and they come flagged `sponsored: true`.
- **Tells Walmart from marketplace sellers.** Every row carries the seller name and id and a
  `soldByWalmart` flag, so you can split first-party prices from third-party ones.

### Who uses it

- **Price monitoring.** Schedule a daily run on your keywords or a category and track price,
  was-price and discount over time.
- **Brands and Walmart Marketplace sellers.** See who sells in your category, at what price, with
  what rating, and whether Walmart itself competes on the item.
- **Retail arbitrage and resellers.** Find discounted items (`discountPct`) with strong ratings and
  review counts.
- **Market and assortment research.** Pull a whole category with ratings, review counts and category
  paths to size a niche.
- **AI agents.** Call it as an MCP tool and get typed JSON back (see below).

### How much does it cost to scrape Walmart?

Pay per event: **$0.003 per product delivered** (`product-scraped`), plus Apify's platform rows
(about $0.00005 per run start and per result). You do not pay for run time, proxies or compute.

| What you scrape | Products | Cost |
|---|---|---|
| One keyword, one results page (the prefilled run) | 40 | $0.12 |
| One keyword, 500 products | 500 | $1.50 |
| **1,000 products** from any mix of keywords and categories | 1,000 | **$3.00** |
| Ten keywords, 300 products each | 3,000 | $9.00 |

The table shows the Free-plan price. On Apify's paid plans each product costs less: **$2.75 per
1,000 on Bronze, $2.50 on Silver, $2.25 on Gold and above.**

To cap a run, set **Max cost per run** in the run options: the run delivers what fits and stops,
and never charges past it.

### How to scrape Walmart products

1. Click **Try for free** (or **Start**). The input is prefilled with the keyword `air fryer` and
   40 products, so one click returns data.
2. Replace it with your own keywords or category URLs.
3. Run it, then download the results as **JSON, CSV, Excel, XML or HTML**, or read them through the
   Apify API, a schedule, or an integration (Make, Zapier, n8n, Google Sheets, webhooks).

### Input

| Field | What it does |
|---|---|
| `searchQueries` | Keywords to search on walmart.com, e.g. `air fryer`. |
| `categoryUrls` | Search, browse or shop URLs copied from your browser, e.g. `https://www.walmart.com/browse/home/air-fryers/4044_90548_90546_4824_9960466`. Product pages (`/ip/`) are not accepted here. |
| `maxItemsPerQuery` | Most unique products per keyword or URL, 1 to 1,000. |
| `includeSponsored` | Include ad tiles, always flagged `sponsored: true`. Default off. |

Example input:

```json
{
  "searchQueries": ["air fryer", "tv"],
  "categoryUrls": [{ "url": "https://www.walmart.com/browse/home/air-fryers/4044_90548_90546_4824_9960466" }],
  "maxItemsPerQuery": 200
}
```

### Output

One record per unique product (a real row from a run on 2026-10-18):

```json
{
  "itemId": "5144605607",
  "productId": "36NA6O86BHMV",
  "url": "https://www.walmart.com/ip/5144605607",
  "title": "Ninja Air Fryer Pro XL 5-Qt, 3-in-1, 400°F Air Crisp Technology, Nonstick Crisper Plate, AF140 Black",
  "brand": null,
  "imageUrl": "https://i5.walmartimages.com/seo/Ninja-Pro-XL-5-qt-Air-Fryer-Black-Automatic-Shutoff_17260726-27fd-40a6-b347-67616dc68f04.963b41a992020f3d2d638bae5d43ce7c.jpeg",
  "price": 79.97,
  "wasPrice": null,
  "discountPct": null,
  "priceMin": 79.97,
  "priceMax": 99,
  "unitPrice": null,
  "currency": "USD",
  "rating": 4.6,
  "reviewCount": 7412,
  "seller": "Walmart.com",
  "sellerId": "F55CDC31AB754BB68FE0B39041159D63",
  "soldByWalmart": true,
  "availability": "IN_STOCK",
  "sponsored": false,
  "categoryPath": ["Home", "Appliances", "Kitchen Appliances", "Fryers", "Air Fryers", "Ninja Air Fryers"],
  "additionalOfferCount": 12,
  "position": 10,
  "page": 1,
  "source": "search:air fryer",
  "scrapedAt": "2026-10-18T07:24:51.405Z"
}
```

- `price` is what the tile shows a signed-out shopper, the discounted price when there is one.
  `wasPrice` is the struck-through price, filled only when it is above `price` (a row from the same
  run: `44.96`, was `49.96`, `discountPct: 10`).
- `priceMin` and `priceMax` are the ends of the price range across the item's options (sizes,
  colours), when the tile shows one. `unitPrice` is as Walmart prints it, e.g. `$3.71/l`.
- `additionalOfferCount` is how many other sellers offer the same item, when Walmart reports it.
- `categoryPath` is the path Walmart attaches to the tile. Some tiles carry a merchandising path
  (for example `Services > Immersive Shopping Suite`) instead of the product taxonomy; it is reported
  as found.
- `position` and `page` are the rank as Walmart ordered the results.
- Unknown values are `null`, never `0`: a product with no rating is not a product rated 0.

Each run also writes a **summary** to the key-value store under `OUTPUT`: `priceCompleteness`
(share of products that came back with a price), `degradedSources` (any keyword or URL that failed,
so an empty result is told apart from a failed one), `rejectedUrls` (pasted URLs that are not
Walmart list pages) and counts per source.

### Why this Walmart scraper

- **Measured.** Price completeness is reported on every run. In our test runs on the platform
  (2026-10-18): `air fryer`, 40 products, 100% priced; `tv` plus a category URL, 240 unique products
  over 7 pages, 98% priced, nothing degraded.
- **Fast and light.** No browser: one request returns a whole results page. A 40-product run takes
  about 10 seconds.
- **Unique products, charged once.** Duplicates across pages, keywords and URLs, and ad copies of
  organic items, are removed before delivery and before charging.
- **First-party vs marketplace.** `seller`, `sellerId`, `soldByWalmart` and `additionalOfferCount`
  on every row, from the search page itself, with no extra request per product.
- **Same schema as our Amazon Actor.** Field names match where the two overlap, so one pipeline
  reads both.

### Use it from an AI agent (MCP) or the API

The actor is callable as an MCP tool through Apify's MCP server. Example prompts:

> "Find the 100 best-rated air fryers on Walmart under $80, and say which ones Walmart sells itself."

> "List discounted TVs on Walmart with their was-price and discount percentage."

From code, one HTTP call runs it and returns the products:

```bash
curl -X POST "https://api.apify.com/v2/acts/atlasdataworks~walmart-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries": ["air fryer"], "maxItemsPerQuery": 40}'
```

### FAQ

**Is it legal to scrape Walmart?** This actor reads only public search and category pages that
anyone can open without signing in, and collects product data, not personal data. Whether your use
is allowed depends on your jurisdiction and purpose; check with a lawyer if you are unsure.

**Does it return product detail pages, specs or reviews?** Not yet. This actor reads search and
category results, which carry price, was-price, rating, review count, seller and stock for every
tile. `brand`, specs and the full description come from the item page, which is the next feature;
until then `brand` is `null`. Review text is not collected: it carries reviewer names, and this
actor collects no personal data.

**Which Walmart site?** walmart.com (United States), prices in USD.

**Do I need a proxy, cookies or a Walmart account?** No. Access is included in the price.

**Can I monitor prices on a schedule?** Yes. Save your input as a task and add an Apify schedule;
each run is a new dataset you can compare with the last.

**Something broke or a field is missing.** Open an issue on the actor's Issues tab. Walmart changes
its pages; reports get fixed.

### Also from Atlas DataWorks

- [Amazon Product Scraper](https://apify.com/atlasdataworks/amazon-unified-extractor): search, Best
  Sellers and ASIN detail in one run, the same $3.00 per 1,000.
- [AliExpress Search Scraper](https://apify.com/atlasdataworks/aliexpress-search-scraper): prices,
  exact orders and delivery dates for any keyword, priced for your market, $3.00 per 1,000.

### Limits

- **Search and category pages only**: no item-page detail, specs, brand or reviews yet (see the FAQ).
- Up to 1,000 products per keyword or URL, and at most 25 result pages; for more, split by category
  or narrower keywords.
- walmart.com only; prices are what a signed-out US shopper sees at run time.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to search on walmart.com, e.g. "air fryer". Each keyword returns up to the max products below, about 40 to 60 per results page.

## `categoryUrls` (type: `array`):

Walmart search, browse or shop URLs copied from your browser, e.g. https://www.walmart.com/browse/home/air-fryers/4044_90548_90546_4824_9960466. Filters in the URL are kept. Product pages (/ip/) are not accepted here.

## `maxItemsPerQuery` (type: `integer`):

Upper bound on products returned per keyword or URL.

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

Ads are excluded by default; an item that is also an organic result is kept as organic. Included ads are flagged sponsored=true.

## Actor input object example

```json
{
  "searchQueries": [
    "air fryer"
  ],
  "maxItemsPerQuery": 40,
  "includeSponsored": false
}
```

# Actor output Schema

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

One record per unique Walmart item across every keyword and URL, billed once. Prices are numbers in USD; unknown values are null, never zero.

## `runSummary` (type: `string`):

Per-run counts and health: priceCompleteness, per-source counts, degradedSources, creditsSpent and chargeLimitReached.

# 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 = {
    "searchQueries": [
        "air fryer"
    ],
    "maxItemsPerQuery": 40
};

// Run the Actor and wait for it to finish
const run = await client.actor("atlasdataworks/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 = {
    "searchQueries": ["air fryer"],
    "maxItemsPerQuery": 40,
}

# Run the Actor and wait for it to finish
run = client.actor("atlasdataworks/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 '{
  "searchQueries": [
    "air fryer"
  ],
  "maxItemsPerQuery": 40
}' |
apify call atlasdataworks/walmart-scraper --silent --output-dataset

```

## MCP server setup

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