# Walmart.com Product Search & Price Filter Scraper (`vexaloom-labs/walmart-com-product-search-and-price-filter`) Actor

Search Walmart.com by keyword and filter results by price, rating, review count, free shipping, stock status, brand or seller, with sponsored placements flagged apart from organic results.

- **URL**: https://apify.com/vexaloom-labs/walmart-com-product-search-and-price-filter.md
- **Developed by:** [vexaloom-labs](https://apify.com/vexaloom-labs) (community)
- **Categories:** E-commerce, Automation, Lead generation
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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.com Product Search & Price Filter Scraper

Walmart mixes sponsored placements into its search results and hides useful filters behind click-by-click pages. This actor reads Walmart.com directly and returns clean, structured records from four surfaces: keyword search, category shelves, full product pages and customer reviews. No account, cookies or proxy setup is needed.

### What you can scrape

| Mode | What it returns |
|---|---|
| **Search by keyword** | Products from Walmart's own search, page by page, for one or many keywords |
| **Browse a category URL** | Products from any `/browse/` or `/cp/` category shelf, with the same filters and sort orders |
| **Product details** | The full item document for URLs, numeric item IDs or alphanumeric product IDs |
| **Customer reviews** | Paginated review rows with rating, text, author, date, verified-purchase flag and photos |

### Filters that actually apply

- **Price band** — Walmart's own `min_price` / `max_price` filter, plus a client-side safety check
- **Minimum rating and review count** — keep only products proven by shoppers
- **Brands** — exact Walmart brand facet (pass several brands at once)
- **Retailer facet** — Walmart-fulfilled, Pro Sellers, marketplace sellers, or any other facet Walmart exposes
- **Any Walmart facet** — pass `type:value`, such as `special_offers:Rollback`, `customer_rating_range_facet_new_filter_v0:4 - 5 Stars`, or `exclude_oos:Show available items only`
- **Free shipping** — search rows are enriched from product pages so the flag is real
- **In stock / out of stock** — drop unavailable items
- **Sponsored placements** — kept and flagged, or excluded so only organic results remain
- **Seller name** — substring match, case-insensitive

Sort orders: best match, price low-to-high, price high-to-low, best seller, highly rated, newest.

### What a product record contains

Search and browse rows:

`productId`, `productUrl`, `name`, `brand`, `price`, `priceDisplay`, `wasPrice`,
`minPrice`, `savingsAmount`, `currency`, `unitPrice`, `rating`, `reviewCount`,
`imageUrl`, `images[]`, `availability`, `availabilityDisplay`, `inStock`,
`freeShippingEligible`, `sellerName`, `sellerId`, `sellerType`, `isSponsored`,
`badges[]`, `categoryPath`, `categoryPathId`, `fulfillmentTypes[]`,
`deliveryDate`, `pickupDate`, `storeId`, `storePostalCode`, `storeCity`,
`storeState`, `variants[]`, `variantCount`, `shortDescription`, `position`,
`organicRank`, `searchQuery`, `sourcePage`, `categoryUrl`, `recordType`,
`scrapedAt`.

Product-detail rows add:

`brandUrl`, `upc`, `model`, `manufacturerProductId`, `longDescription`,
`specifications`, `highlights[]`, `fulfillmentOptions[]`, `shippingPrice`,
`deliveryAvailable`, `pickupAvailable`, `returnPolicy`, `returnWindowDays`,
`returnable`, `freeReturns`, `reviewDistribution`, `recommendedPercent`,
`reviewsWithTextCount`.

Review rows:

`reviewId`, `productId`, `productUrl`, `productName`, `rating`, `title`,
`reviewText`, `author`, `reviewDate`, `verifiedPurchase`, `positiveFeedback`,
`negativeFeedback`, `photos[]`, `fulfilledBy`, `externalSource`, `recordType`,
`scrapedAt`.

Empty values are omitted at every depth: no `null`, blank strings, empty lists
or empty objects.

### Input reference

| Field | Default | Purpose |
|---|---|---|
| `mode` | `search` | `search`, `browse`, `products` or `reviews` |
| `searchQueries` | `["iphone case"]` | One or more keywords (search mode) |
| `categoryUrls` | `[]` | Walmart `/browse/` or `/cp/` category links |
| `productUrls` | `[]` | Walmart `/ip/` links (products/reviews modes) |
| `itemIds` | `[]` | Numeric item IDs or alphanumeric product IDs |
| `maxItems` | `50` | Hard row cap for the run |
| `maxPages` | `5` | Maximum result pages per query/category (Walmart caps at 25) |
| `sortBy` | `best_match` | Listing order |
| `minPrice` / `maxPrice` | – | Price band in USD |
| `minRating` | – | Minimum average rating (0-5) |
| `minReviewCount` | – | Minimum number of reviews |
| `freeShippingOnly` | `false` | Only free-shipping products (auto-enriches cards) |
| `excludeOutOfStock` | `true` | Drop out-of-stock products |
| `excludeSponsored` | `false` | Drop sponsored placements |
| `brands` | `[]` | Exact brand names, e.g. `DEWALT` |
| `sellerContains` | – | Seller-name substring |
| `facet` | – | Any Walmart facet as `type:value` |
| `enrichDetails` | `false` | Open each search row's product page for brand/UPC/specs |
| `maxConcurrency` | `4` | Parallel product/review requests (1-10) |
| `maxReviews` | `10` | Reviews per product (reviews mode) |
| `reviewSort` | `relevancy` | Review order |

### Example inputs

Top-rated coffee makers under $60, no sponsored rows:

```json
{
  "mode": "search",
  "searchQueries": ["coffee maker"],
  "maxItems": 100,
  "minPrice": 20,
  "maxPrice": 60,
  "minRating": 4,
  "excludeSponsored": true,
  "sortBy": "rating_high"
}
```

Cheapest in-stock electronics from a category shelf:

```json
{
  "mode": "browse",
  "categoryUrls": ["https://www.walmart.com/browse/electronics/3944"],
  "maxItems": 50,
  "sortBy": "price_low",
  "excludeOutOfStock": true
}
```

Full details for a list of products:

```json
{
  "mode": "products",
  "productUrls": [
    "https://www.walmart.com/ip/20042402979",
    "https://www.walmart.com/ip/16864710228"
  ],
  "maxItems": 2
}
```

Newest reviews for a product:

```json
{
  "mode": "reviews",
  "itemIds": ["20042402979"],
  "maxReviews": 50,
  "reviewSort": "submission-desc"
}
```

Brand-only search with enrichment:

```json
{
  "mode": "search",
  "searchQueries": ["cordless drill"],
  "brands": ["DEWALT", "Makita"],
  "enrichDetails": true,
  "maxItems": 20
}
```

### Typical uses

- **Price monitoring** — schedule a daily search and compare `price` across runs
- **MAP / reseller checks** — see which marketplace sellers undercut a brand
- **Product research** — collect ratings, review counts and badges for a niche
- **Catalog enrichment** — feed names, images, UPCs, specs and prices downstream
- **Review mining** — export text reviews with ratings and verified-purchase flags
- **Sponsored-share analysis** — compare `isSponsored` rows with `organicRank`

### FAQ

**Do I need an Apify proxy or any credentials?** No. The actor reads Walmart
without an account. It chooses its network path automatically and only changes
it if Walmart returns a bot challenge.

**Why does my search return fewer rows than Walmart shows?** Walmart caps
listing pagination at 10-25 pages per query. Split the query by brand, facet,
price band or sort order to go deeper.

**Why is brand or UPC missing from some search rows?** Walmart's search cards
omit brand/UPC for many categories. Turn on `enrichDetails` or use product mode
to read the full item page.

**Why does free shipping require extra time?** Search cards no longer publish
shipping badges, so the actor opens each product page to check Walmart's real
free-shipping flag. `freeShippingOnly` enables this automatically.

**How many reviews can I get?** Walmart only lists reviews that contain text,
usually 10-20 per product even when the total review count is much higher.
`maxReviews` controls how many of those the actor reads.

**Are prices store-specific?** Prices and availability reflect the store and
ZIP Walmart resolves for the request; search and browse rows expose that
location as `storeId`, `storePostalCode`, `storeCity` and `storeState`.
There is no input to pin a different store or ZIP.

**Does it support Walmart Canada or Mexico?** No, this actor targets
walmart.com in the United States. The regional sites use different page data.

**What happens when every filter rejects every row?** The run ends cleanly with
a status message and an empty dataset, never placeholder or sentinel rows.

**What do the transient warnings in the log mean?** Walmart sometimes drops or
throttles a proxy connection (HTTP 444/456). The actor retries, rotates its
proxy session and continues; a run can still return fewer rows during a
Walmart bot wave.

**Can I paste an old task input?** Yes. Legacy keys such as `searchQuery`,
`query`, `maxResults`, `maxPage`, `sort`, `brandContains`, `useApifyProxy`,
`inStockOnly`, `includeSponsored`, `fetchDetails` and `maxReviewsPerProduct`
are still honoured in code even though the input form now shows the new names.

### Limitations

- Walmart review pages expose only reviews with text; the total review count
  can be much larger.
- Category shelves can be empty if Walmart retired the category; paste the
  current `/browse/` or `/cp/` link from the site.
- Listing depth is capped by Walmart's own pagination.
- Search-card brand/UPC/specs require `enrichDetails`; without it those fields
  appear only when Walmart includes them.
- A few store-restricted product pages return 404 from some proxy locations.
  Product mode retries the item's reviews page, which can recover a leaner
  record (name, price, stock, image, category). If that page is also 404 at
  the same location, the item is skipped; retry the run or use review mode.
- US walmart.com only.
- Prices follow Walmart's default location for the request; the actor cannot
  pin a different store or ZIP.

### Data source

Records come from Walmart.com's server-rendered pages and the JSON embedded in
them. No external API, account or paid data source is used.

# Actor input Schema

## `mode` (type: `string`):

What to scrape: keyword search, a category shelf, full product pages, or customer reviews.

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

One or more keywords to search on walmart.com (mode = search). Each query is walked page by page.

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

Walmart category links starting with /browse/ or /cp/ (mode = browse), e.g. https://www.walmart.com/browse/electronics/3944.

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

Walmart product links (mode = products or reviews), e.g. https://www.walmart.com/ip/20042402979. Short /ip/ links and alphanumeric product IDs also work.

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

Walmart numeric item IDs (the number at the end of a product link), one per line (mode = products or reviews).

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

Hard cap on emitted records for the whole run. In review mode this caps review rows.

## `maxPages` (type: `integer`):

Maximum search or category pages to walk per query/URL (about 40 products per page). Walmart caps its own listing at 25 pages.

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

Walmart listing order for search and browse modes.

## `minPrice` (type: `number`):

Only keep products at or above this price. Applied by Walmart's own price filter.

## `maxPrice` (type: `number`):

Only keep products at or below this price. Applied by Walmart's own price filter.

## `minRating` (type: `number`):

Only keep products rated at least this (0-5). Products with no rating yet are kept.

## `minReviewCount` (type: `integer`):

Only keep products with at least this many reviews. Products with no review count are kept.

## `freeShippingOnly` (type: `boolean`):

Only keep products with free shipping. Search/browse rows are automatically enriched from product pages so this filter is accurate.

## `excludeOutOfStock` (type: `boolean`):

Drop products Walmart marks out of stock.

## `excludeSponsored` (type: `boolean`):

Drop paid/sponsored placements and keep organic search results only.

## `brands` (type: `array`):

Only keep these brands, using Walmart's own brand filter. Enter names exactly as Walmart shows them, e.g. DEWALT.

## `sellerContains` (type: `string`):

Only keep products whose seller name contains this text (case-insensitive), e.g. Walmart, Pro Seller.

## `facet` (type: `string`):

Any Walmart listing facet as type:value, e.g. retailer_type:Walmart, special_offers:Rollback, customer_rating_range_facet_new_filter_v0:4 - 5 Stars, exclude_oos:Show available items only.

## `enrichDetails` (type: `boolean`):

Open each search/browse product page to add brand, UPC, model, description, specifications, images, return policy and review breakdown. Slower and uses more requests.

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

How many product or review pages to fetch at the same time (1-10). Higher is faster but more aggressive.

## `maxReviews` (type: `integer`):

Maximum customer reviews to read per product in review mode. Walmart only publishes reviews that contain text.

## `reviewSort` (type: `string`):

How Walmart should order customer reviews.

## Actor input object example

```json
{
  "mode": "search",
  "searchQueries": [
    "iphone case"
  ],
  "categoryUrls": [],
  "productUrls": [],
  "itemIds": [],
  "maxItems": 3,
  "maxPages": 1,
  "sortBy": "best_match",
  "freeShippingOnly": false,
  "excludeOutOfStock": true,
  "excludeSponsored": false,
  "brands": [],
  "enrichDetails": false,
  "maxConcurrency": 4,
  "maxReviews": 5,
  "reviewSort": "relevancy"
}
```

# Actor output Schema

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

Dataset view containing search, category and product-detail records.

## `reviews` (type: `string`):

Dataset view containing customer review records (recordType = review).

# 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 = {
    "mode": "search",
    "searchQueries": [
        "iphone case"
    ],
    "maxItems": 3,
    "maxPages": 1,
    "sortBy": "best_match",
    "freeShippingOnly": false,
    "excludeOutOfStock": true,
    "excludeSponsored": false,
    "enrichDetails": false,
    "maxConcurrency": 4,
    "maxReviews": 5,
    "reviewSort": "relevancy"
};

// Run the Actor and wait for it to finish
const run = await client.actor("vexaloom-labs/walmart-com-product-search-and-price-filter").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 = {
    "mode": "search",
    "searchQueries": ["iphone case"],
    "maxItems": 3,
    "maxPages": 1,
    "sortBy": "best_match",
    "freeShippingOnly": False,
    "excludeOutOfStock": True,
    "excludeSponsored": False,
    "enrichDetails": False,
    "maxConcurrency": 4,
    "maxReviews": 5,
    "reviewSort": "relevancy",
}

# Run the Actor and wait for it to finish
run = client.actor("vexaloom-labs/walmart-com-product-search-and-price-filter").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 '{
  "mode": "search",
  "searchQueries": [
    "iphone case"
  ],
  "maxItems": 3,
  "maxPages": 1,
  "sortBy": "best_match",
  "freeShippingOnly": false,
  "excludeOutOfStock": true,
  "excludeSponsored": false,
  "enrichDetails": false,
  "maxConcurrency": 4,
  "maxReviews": 5,
  "reviewSort": "relevancy"
}' |
apify call vexaloom-labs/walmart-com-product-search-and-price-filter --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vexaloom-labs/walmart-com-product-search-and-price-filter"
        }
    }
}
```

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/WkaCjcP0oFPMJYAI6/builds/3heBF67TyRgXhfrFf/openapi.json
