# Walmart Data Scraper (Cheap) (`data_api/walmart-data-scraper-cheap`) Actor

Walmart product scraper that extracts pricing, ratings, and seller data from search results and product pages, so you can track competitors and make data-driven decisions without manual research.

- **URL**: https://apify.com/data\_api/walmart-data-scraper-cheap.md
- **Developed by:** [Data API](https://apify.com/data_api) (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.99 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

![Walmart Product Scraper](cover.jpg)

Copying prices and specs off Walmart by hand falls apart the moment you need more than a handful of products. Pages paginate, listings shuffle, and a price you noted this morning is stale by lunch. This scraper does the legwork: give it a few search terms or a list of product URLs and it returns clean, structured rows — name, current price, was-price, star rating, review count, brand, seller, stock status, and more. Feed it one keyword or a thousand product links and export the lot to JSON, CSV, or Excel.

### What you get

Each product comes back as one flat row with the same columns every time. When a value is missing on Walmart it comes back as `null` rather than disappearing, so your sheet or database stays rectangular. Two groups of data per item:

- **Pricing and ratings** — `currentPrice`, `listPrice`, `currencyCode`, `starRating`, `reviewsTotal`, `stockStatus`
- **Product details** — `productName`, `brandName`, `sellerName`, `categoryPath`, `description`, `imageLink`, `itemUrl`, `sku`, plus the `searchTerm` that surfaced it and a `collectedAt` timestamp

### Quick start

1. Hit **Try for free** and open the input form.
2. Add keywords under **Search terms**, paste item links into **Product URLs**, or do both.
3. Set a **Results limit** to cap how many products each term returns.
4. Press **Start**, then download the results as JSON, CSV, Excel, or XML once the run finishes.

![How it works](how-it-works.jpg)

### Use cases

- **Price tracking** — watch how prices and was-prices move across a category week to week
- **Competitor research** — see how rival products are priced, rated, and which sellers carry them
- **Catalog enrichment** — turn a raw list of Walmart URLs into a full product database with images and specs
- **Repricing tools** — feed live price and stock signals into your own pricing engine
- **Market research** — gather product data across a category to spot trends and gaps
- **Stock monitoring** — flag when key SKUs flip to Out of stock

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchTerms` | array of strings | One of `searchTerms` or `targetUrls` | Keywords to look up on Walmart. The scraper walks the result pages for each one. |
| `targetUrls` | array of strings | One of `searchTerms` or `targetUrls` | Direct Walmart item-page URLs. A search-results URL pasted here is detected and run as a keyword search. |
| `resultsLimit` | integer | No | Products to gather per search term; direct URLs are scraped on top of this. Default `50` (max 1000). |
| `timeoutSeconds` | integer | No | Seconds to wait on each page before giving up. Default `45`. |

You must supply at least one `searchTerms` entry or one `targetUrls` entry.

#### Example input

```json
{
    "searchTerms": ["4k monitor", "cordless vacuum"],
    "targetUrls": [
        "https://www.walmart.com/ip/Keurig-K-Mini-Single-Serve-Coffee-Maker/473522318"
    ],
    "resultsLimit": 50,
    "timeoutSeconds": 45
}
````

### Output

Every search result and every product URL becomes one row, and each field is always present — values Walmart does not show come back as `null` so the dataset stays consistent.

#### Example output

```json
{
    "productName": "Keurig K-Mini Single Serve K-Cup Pod Coffee Maker, Black",
    "currentPrice": 79.0,
    "listPrice": 99.99,
    "currencyCode": "USD",
    "starRating": 4.6,
    "reviewsTotal": 18243,
    "brandName": "Keurig",
    "sellerName": "Walmart.com",
    "imageLink": "https://i5.walmartimages.com/seo/Keurig-K-Mini.jpeg",
    "itemUrl": "https://www.walmart.com/ip/Keurig-K-Mini-Single-Serve-Coffee-Maker/473522318",
    "sku": "473522318",
    "stockStatus": "In stock",
    "categoryPath": "Home > Kitchen & Dining > Coffee Makers",
    "description": "Brews a single cup in minutes and fits almost anywhere on the counter.",
    "searchTerm": "coffee maker",
    "collectedAt": "2026-06-29T12:00:00+00:00",
    "errorMessage": null
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `productName` | string | Product name exactly as it appears on Walmart |
| `currentPrice` | number | Price the product sells for right now, in USD |
| `listPrice` | number | Was-price before any markdown, when one is shown |
| `currencyCode` | string | Three-letter currency code, always USD |
| `starRating` | number | Mean shopper rating on a zero-to-five scale |
| `reviewsTotal` | integer | How many shopper reviews the product has |
| `brandName` | string | Brand the product is sold under |
| `sellerName` | string | Seller or fulfillment partner behind the listing |
| `imageLink` | string | Direct link to the main product photo |
| `itemUrl` | string | Canonical walmart.com page for the product |
| `sku` | string | Walmart item identifier unique to the product |
| `stockStatus` | string | Whether the item is In stock or Out of stock |
| `categoryPath` | string | Category trail the product sits under |
| `description` | string | Brief blurb describing the product |
| `searchTerm` | string | Keyword that surfaced this result; `null` for direct URLs |
| `collectedAt` | string | ISO 8601 timestamp of when the row was captured |
| `errorMessage` | string | Why a URL could not be parsed; `null` on success |

### Tips for best results

- **Be specific with keywords.** "stainless steel kettle" returns tighter, more useful rows than "kettle".
- **Use `resultsLimit` to control spend.** Keep it low while you confirm the columns fit your pipeline, then raise it for the full pull.
- **Mix terms and URLs in one run.** Search terms respect the limit; direct product URLs are always scraped regardless.
- **Raise `timeoutSeconds`** toward 60–90 if you see repeated timeout errors on large runs.
- **Failed URLs do not stop the run.** A page that cannot be parsed is written with an `errorMessage` and the run keeps going, so partial results are always available.

### How can I use Walmart product data?

**How can I use the Walmart Product Scraper to track prices across a category?**
Add the keywords you care about under `searchTerms`, set a `resultsLimit`, and run it on a schedule. Each row carries `currentPrice`, `listPrice`, and `collectedAt`, so stacking daily runs gives you a price history you can chart or pipe into a repricing tool.

**How can I pull Walmart product details for a list of links I already have?**
Drop your links into `targetUrls`. Each one returns a single row with `productName`, `brandName`, `sellerName`, `categoryPath`, `imageLink`, rating, and stock — turning a plain list of URLs into a full Walmart product dataset ready for export.

**How can I compare competitor products and sellers on Walmart?**
Search the product type you want to study and read the `brandName`, `sellerName`, `currentPrice`, `starRating`, and `reviewsTotal` columns side by side. It is a quick way to see who sells what, how it is priced, and how shoppers rate it.

**How can I monitor stock on key Walmart SKUs?**
Feed the product URLs you watch into `targetUrls` and check the `stockStatus` field on each run. Pair it with `sku` and `collectedAt` to log exactly when an item flipped to Out of stock.

### Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Support

Questions, feature requests, or a field you'd like added? Reach out at <data.apify@proton.me> and we'll get back to you.

# Actor input Schema

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

Keywords to look up on Walmart, one per line (for example "4k monitor" or "cordless vacuum"). The scraper walks the result pages for each term.

## `targetUrls` (type: `array`):

Direct links to Walmart item pages you want scraped. Paste a search-results URL here too and it is detected and run as a keyword search.

## `resultsLimit` (type: `integer`):

How many products to gather for each search term. Direct product URLs are always scraped on top of this cap.

## `timeoutSeconds` (type: `integer`):

How long to wait on each page before giving up. Raise it if you hit frequent timeouts.

## Actor input object example

```json
{
  "searchTerms": [
    "coffee maker",
    "garden hose"
  ],
  "targetUrls": [
    "https://www.walmart.com/ip/Keurig-K-Mini-Single-Serve-Coffee-Maker/473522318"
  ],
  "resultsLimit": 50,
  "timeoutSeconds": 45
}
```

# 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": [
        "4k monitor",
        "cordless vacuum"
    ],
    "targetUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_api/walmart-data-scraper-cheap").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": [
        "4k monitor",
        "cordless vacuum",
    ],
    "targetUrls": [],
}

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

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "4k monitor",
    "cordless vacuum"
  ],
  "targetUrls": []
}' |
apify call data_api/walmart-data-scraper-cheap --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=data_api/walmart-data-scraper-cheap",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Walmart Data Scraper (Cheap)",
        "description": "Walmart product scraper that extracts pricing, ratings, and seller data from search results and product pages, so you can track competitors and make data-driven decisions without manual research.",
        "version": "0.0",
        "x-build-id": "KCWp08wPNyWSFEn3D"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/data_api~walmart-data-scraper-cheap/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-data_api-walmart-data-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/data_api~walmart-data-scraper-cheap/runs": {
            "post": {
                "operationId": "runs-sync-data_api-walmart-data-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/data_api~walmart-data-scraper-cheap/run-sync": {
            "post": {
                "operationId": "run-sync-data_api-walmart-data-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchTerms": {
                        "title": "Search terms",
                        "type": "array",
                        "description": "Keywords to look up on Walmart, one per line (for example \"4k monitor\" or \"cordless vacuum\"). The scraper walks the result pages for each term.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "targetUrls": {
                        "title": "Product URLs",
                        "type": "array",
                        "description": "Direct links to Walmart item pages you want scraped. Paste a search-results URL here too and it is detected and run as a keyword search.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "resultsLimit": {
                        "title": "Results limit",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "How many products to gather for each search term. Direct product URLs are always scraped on top of this cap.",
                        "default": 50
                    },
                    "timeoutSeconds": {
                        "title": "Request timeout (seconds)",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "How long to wait on each page before giving up. Raise it if you hit frequent timeouts.",
                        "default": 45
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
