# Walmart Search Scraper: Prices, Rank, Ratings & Sellers (`jaaylee/walmart-search-scraper`) Actor

Walmart search scraper for any keyword or category URL. Get search rank, item ID, price, was price, rating, reviews, seller, stock, Rollback and Best seller badges, '100+ bought since yesterday' signals and delivery dates. $1 per 1,000 results. Export CSV/JSON or use the API.

- **URL**: https://apify.com/jaaylee/walmart-search-scraper.md
- **Developed by:** [ASide Data](https://apify.com/jaaylee) (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 $0.70 / 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?

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

### What is Walmart Search Scraper?

**Walmart Search Scraper** extracts **Walmart search results** for any keyword, walmart.com search URL or category
(`/browse/...`) URL. For every result you get the **search rank (position)**, Walmart item ID, title, **price and was
price**, price range for items with options, unit price, rating, number of reviews, **seller (Walmart.com or a
marketplace seller)**, stock status, **Rollback / Best seller / Deal badges**, the **"500+ bought since yesterday"** and
**"In 100+ people's carts"** demand signals, and **delivery and pickup dates**.

Use it for **Walmart keyword rank tracking**, **product research**, **competitor and price monitoring**, **marketplace
seller research** and **market sizing**. Run it in Apify Console, on a schedule, or from Python, JavaScript, Make,
Zapier, n8n or an AI agent (MCP).

#### Why this Walmart search scraper

- 💸 **$1.00 per 1,000 results.** Results without a price are free. Blocked pages are free and retried automatically.
- 🏆 **Exact rank across pages.** Pages of one search are read in order, so `position` continues from page to page
  (1…52 on page 1, 53…102 on page 2). Carousels that Walmart mixes into the results ("Top deals", "4 stars and above")
  are left out, so the rank is the rank of the real result grid.
- 📈 **Demand signals as numbers:** whenever Walmart shows them, "500+ bought since yesterday" →
  `boughtSinceYesterdayMin: 500` and "In 100+ people's carts" → `inCartsMin: 100`.
- ♻️ **Condition of refurbished and used items:** `condition` is "Restored: Like New", "Open Box", "Pre-Owned: Good"…
  so you can separate new and second-hand offers.
- 🏪 **Seller data:** `sellerName`, `sellerId` and `soldByWalmart` show whether Walmart or a marketplace seller sells
  the item — useful for marketplace and competitor research.
- 🔎 **Filters built in:** sort by price, best sellers, rating or newest, and set a minimum and maximum price — or paste
  any walmart.com URL with the filters you already use.
- ⚡ **Fast and light:** plain HTTP, no browser. About 40–55 results per page, up to 25 pages per search.

### What Walmart search data can you extract?

| Group | Fields |
|---|---|
| Search | `searchTerm`, `page`, `position`, `positionOnPage`, `organicPositionOnPage`, `sponsored`, `totalResults`, `searchUrl` |
| Product | `usItemId`, `productId`, `url`, `title`, `image`, `category` |
| Price | `price`, `wasPrice`, `priceMin`, `priceMax`, `unitPrice`, `currency` |
| Reputation & demand | `rating`, `reviewsCount`, `boughtSinceYesterdayMin`, `inCartsMin` |
| Badges & labels | `badge` (Rollback, Best seller, Deal, Popular pick, Overall pick…), `labels` (Low stock, Save with Walmart plus…) |
| Seller & stock | `sellerName`, `sellerId`, `soldByWalmart`, `availability`, `inStock`, `condition` (Restored, Open Box, Pre-Owned) |
| Fulfillment | `fulfillment` (shipping / pickup / delivery promises), `deliveryDate`, `pickupDate`, `storeId`, `location` |
| Run | `complete`, `scrapedAt` |

### How to scrape Walmart search results

1. Click **Try for free** and open the Actor input.
2. Enter one or more **Search keywords or URLs** — e.g. `coffee maker`, a walmart.com search URL, or a category URL
   such as `walmart.com/browse/electronics/tvs/3944_1060825_447913`.
3. Choose **Pages per search** (1–25) and, optionally, **Sort by** and a **Min / Max price**.
4. Click **Start** and download the results as JSON, CSV or Excel, or read them via the API.

#### Input example

```json
{
  "searchTerms": ["lego", "https://www.walmart.com/browse/home/coffee-makers/4044_90548_90546_1115306_5438660"],
  "maxPagesPerSearch": 3,
  "sort": "bestsellers",
  "minPrice": 20,
  "maxPrice": 50
}
```

#### Output example

```json
{
  "usItemId": "41004055",
  "productId": "46HW0X8VGSHX",
  "url": "https://www.walmart.com/ip/LEGO-Classic-Medium-Creative-Brick-Box/41004055",
  "title": "LEGO Classic Medium Creative Brick Box , Toy Set with Train, Car, Tiger, Birthday Gift for Kids 4+, 10696",
  "price": 21.42,
  "wasPrice": 34.99,
  "priceMin": null,
  "priceMax": null,
  "unitPrice": null,
  "currency": "USD",
  "rating": 4.7,
  "reviewsCount": 8752,
  "sellerName": "Walmart.com",
  "sellerId": "F55CDC31AB754BB68FE0B39041159D63",
  "soldByWalmart": true,
  "availability": "IN_STOCK",
  "inStock": true,
  "badge": "500+ bought since yesterday",
  "boughtSinceYesterdayMin": 500,
  "inCartsMin": null,
  "labels": ["Save with Walmart plus", "Low stock"],
  "fulfillment": ["Express Delivery as soon as 13 mins", "Shipping, arrives tomorrow", "Pickup tomorrow"],
  "deliveryDate": "2026-10-12T13:00:00.000Z",
  "pickupDate": "2026-10-12T14:00:00.000Z",
  "sponsored": false,
  "image": "https://i5.walmartimages.com/seo/LEGO-Classic-Medium-Creative-Brick-Box-Toy-Set-with-Train-Car-Tiger-Birthday-Gift-for-Kids-4-10696_3496d60e-2f36-4d17-833f-5e7dfdf04383.3386a1f10b27ed0f7671dc9b446eee3b.jpeg",
  "category": "Toys > Building Sets & Blocks > LEGO > All LEGO Sets",
  "searchTerm": "lego",
  "page": 1,
  "position": 2,
  "positionOnPage": 2,
  "organicPositionOnPage": 2,
  "totalResults": 6184,
  "storeId": "3081",
  "location": "Sacramento, CA 95829",
  "complete": true,
  "searchUrl": "https://www.walmart.com/search?q=lego&sort=best_seller",
  "scrapedAt": "2026-10-12T09:00:00+00:00"
}
```

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

**$1.00 per 1,000 results** on the Free plan. Lower prices apply on higher Apify plans (see the pricing panel). Results
without a price (for example items that only show "Options from…" with no price yet) are saved but not charged, and
blocked pages are free. Set **Max results in total** or a maximum total charge to cap any run.

| You scrape | You pay (Free plan) |
|---|---|
| 1 keyword × 1 page (~40–55 results) | ~$0.04–$0.06 |
| 10 keywords × 5 pages | ~$2.00–$2.75 |
| 10,000 results | $10.00 |

### Walmart rank tracking, explained

Walmart mixes several blocks into a search page: the main result grid, sponsored products inside the grid, and
carousels such as "Top deals" or "4 stars and above". This Actor keeps only the **main result grid** (the products
Walmart lists as the results of your search) and numbers them in the order shoppers see them:

- `position` — overall rank across all pages of the search, including sponsored placements.
- `positionOnPage` — rank on the current page.
- `organicPositionOnPage` — rank among non-sponsored results on the page (`null` for sponsored ones).

Turn off **Include sponsored results** to save organic results only — the organic rank stays the same.

### Use cases

- **Walmart keyword rank tracking** — schedule a daily run and follow where your items rank for each keyword.
- **Product research** — sort by best sellers and compare price, rating, reviews and "bought since yesterday".
- **Competitor and price monitoring** — watch Rollbacks, was prices and new entrants (sort by newest) in your niche.
- **Marketplace seller research** — find which third-party sellers win the results for a keyword with `sellerName`
  and `soldByWalmart`.
- **Retail arbitrage and deal finding** — combine **Max price**, sort by price and `wasPrice` to spot deep discounts.
- **Cross-marketplace comparison** — run the same keywords with
  [Amazon Search Scraper](https://apify.com/jaaylee/amazon-search-scraper) and compare price and rank side by side.

### Use the Walmart search API

Python ([apify-client](https://docs.apify.com/api/client/python)):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("jaaylee/walmart-search-scraper").call(
    run_input={"searchTerms": ["coffee maker"], "maxPagesPerSearch": 2, "sort": "bestsellers"}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["position"], item["usItemId"], item["price"], item["boughtSinceYesterdayMin"])
```

Track the rank of your own Walmart items for a keyword:

```python
MY_ITEMS = {"41004055", "5254334127"}
ranks = {i["usItemId"]: i["position"] for i in client.dataset(run["defaultDatasetId"]).iterate_items()
         if i["usItemId"] in MY_ITEMS}
print(ranks)   # {'41004055': 2, ...}
```

Find the cheapest marketplace sellers for a product type:

```python
items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
third_party = sorted((i for i in items if i["soldByWalmart"] is False and i["price"]), key=lambda i: i["price"])
for i in third_party[:10]:
    print(i["price"], i["sellerName"], i["title"][:60])
```

JavaScript / Node.js ([apify-client](https://docs.apify.com/api/client/js)):

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('jaaylee/walmart-search-scraper').call({
    searchTerms: ['coffee maker'],
    maxPagesPerSearch: 2,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((i) => console.log(i.position, i.usItemId, i.price, i.sellerName));
```

cURL (synchronous run that returns the results):

```bash
curl -X POST "https://api.apify.com/v2/acts/jaaylee~walmart-search-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["coffee maker"], "maxPagesPerSearch": 1}'
```

Export to CSV from the command line:

```bash
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv&view=overview&token=<YOUR_APIFY_TOKEN>" -o walmart.csv
```

### Integrations: Google Sheets, Make, Zapier, n8n, webhooks and schedules

- **Schedules:** run daily or hourly from Apify Console → Schedules for rank and price tracking.
- **Google Sheets:** export each run to a sheet with the Apify Google Sheets integration.
- **Make, Zapier, n8n:** start runs and read results with the official Apify apps and nodes.
- **Webhooks:** get notified when a run finishes and process the results in your system.

### Use with AI agents (MCP)

This Actor works with the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp). An AI agent can find it
with a query like "Walmart search", read its input schema and call it to fetch Walmart search results, prices and ranks
for a keyword — for example to compare Walmart and Amazon prices in one conversation.

### More scrapers by the same developer

- [Amazon Search Scraper](https://apify.com/jaaylee/amazon-search-scraper) — Amazon search results with rank, price,
  "bought in past month" and delivery dates for any US ZIP code.
- [Amazon ASIN Scraper](https://apify.com/jaaylee/amazon-asin-product-details) — full Amazon product details by ASIN:
  price, BSR, stock, delivery date by ZIP, variants, specs, images.
- [Amazon Best Sellers Scraper](https://apify.com/jaaylee/amazon-bestsellers-scraper) — top 100 Best Sellers and New
  Releases for any Amazon category and subcategory.
- [AliExpress Search Scraper](https://apify.com/jaaylee/aliexpress-search-scraper) — AliExpress search results with
  rank, price, exact sold count, store and ship-from country in any currency.
- [Google Ads Transparency Scraper](https://apify.com/jaaylee/google-ads-transparency-scraper) — every ad a brand or
  retailer runs on Google Search, Shopping and YouTube, from the Google Ads Transparency Center.

### Tips for accurate Walmart search data

- **Keep the number of pages realistic.** Most shoppers never go past page 2 or 3, so `maxPagesPerSearch` 1–3 is enough
  for rank tracking; use 10–25 pages for market sizing or to collect many items for a niche.
- **Use URLs for filters.** Apply brand, department, rating or "Sold by Walmart" filters on walmart.com and paste the
  URL — the filters are kept and only the page number is set by the Actor.
- **Read `boughtSinceYesterdayMin` together with `position`.** A product that ranks low but already sells "500+ since
  yesterday" is a strong competitor; a top-ranked product without demand signals may be sponsored.
- **Compare like with like.** Prices and delivery promises can differ by location; keep the same settings between runs
  so your history stays comparable (see `location` in every result).
- **Cap the cost.** Set **Max results in total** or a maximum charge per run; the Actor stops cleanly when it is reached
  and you only pay for results saved before that.
- **Monitor with failure alerts.** For scheduled monitoring tasks, turn on **Fail run on low data quality** so that a run
  with mostly blocked pages shows up as failed and triggers your Apify notifications.

### Limitations

- **Walmart.com (US) only.**
- **Location:** results are read as a guest shopper on Walmart's default location (currently Sacramento, CA 95829,
  store 3081), shown in `location` and `storeId`. Online prices are usually national, but store-dependent items
  (groceries, pickup and delivery promises) reflect that location. Choosing a ZIP code is on the roadmap.
- Walmart shows at most 25 pages per search. Use more specific keywords or filters to reach more products.
- `brand` is not part of Walmart search results; the full product page has it.
- Demand signals ("bought since yesterday", "in people's carts") are shown by Walmart only for some items and at some
  times; the fields are `null` when Walmart does not show them.
- CAPTCHAs ("Robot or human?") are never solved; blocked pages are retried on fresh sessions and, if still blocked,
  skipped for free.

### FAQ

#### Is it legal to scrape Walmart search results?

This Actor only reads publicly visible search pages without logging in and does not collect personal data. You are
responsible for using the data in line with applicable laws and Walmart's terms. If in doubt, consult a lawyer.

#### How do I track my keyword rank on Walmart every day?

Save your keywords as a task in Apify Console and add a daily schedule. Each run returns the current `position` of every
result, so you can chart the rank of your items (`usItemId`) over time.

#### How many results do I get per page?

Walmart shows about 40 to 55 results per page and up to 25 pages per search, depending on the query.

#### What is the difference between usItemId and productId?

`usItemId` is the number in the walmart.com product URL (`/ip/.../41004055`) and the ID most tools use. `productId`
is Walmart's internal catalog ID for the product.

#### Can I scrape a Walmart category instead of a keyword?

Yes. Paste a category URL (`walmart.com/browse/...`) into **Search keywords or URLs**. Sort and price
filters work the same way.

#### Why do some results have no price?

Some items show only options or "See price in cart" without a price in the results. They are saved for completeness
but not charged.

#### Found a bug or need a field?

Open an issue on the Issues tab with the keyword and what you expected.

# Actor input Schema

## `searchTerms` (type: `array`):

Keywords to search on Walmart.com (e.g. coffee maker), or walmart.com search result or category (/browse/...) URLs with your filters. One per line. Duplicates are removed.

## `maxPagesPerSearch` (type: `integer`):

How many result pages to scrape for each search (Walmart shows about 40-55 results per page, up to 25 pages).

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

Result order, as in Walmart's 'Sort by' menu. Ignored for URLs that already contain a sort.

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

Optional. Only results priced at or above this amount in US dollars.

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

Optional. Only results priced at or below this amount in US dollars.

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

Optional. Stop after this many results across all searches (useful to cap cost).

## `maxItemsPerSearch` (type: `integer`):

Optional. Stop each search after this many results.

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

Keep results marked as Sponsored. Turn off to get organic results only (organic rank is in organicPositionOnPage either way).

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

How many searches run in parallel. Pages of one search are fetched in order so the overall rank is exact.

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

Primary proxy. The default Apify datacenter proxy works for Walmart search pages.

## `residentialFallback` (type: `boolean`):

If a page stays blocked after 3 attempts on the primary proxy, retry it up to 2 more times through US residential proxies. Off by default: on Walmart the datacenter proxy has been more reliable. Blocked pages are never charged.

## `failOnLowQuality` (type: `boolean`):

For monitoring tasks: mark the run as failed when fewer than 80% of pages succeed or key fields are missing.

## Actor input object example

```json
{
  "searchTerms": [
    "coffee maker"
  ],
  "maxPagesPerSearch": 1,
  "sort": "relevance",
  "includeSponsored": true,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "residentialFallback": false,
  "failOnLowQuality": false
}
```

# Actor output Schema

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

No description

## `files` (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 = {
    "searchTerms": [
        "coffee maker"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("jaaylee/walmart-search-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 = {
    "searchTerms": ["coffee maker"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("jaaylee/walmart-search-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 '{
  "searchTerms": [
    "coffee maker"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call jaaylee/walmart-search-scraper --silent --output-dataset

```

## MCP server setup

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