# Walmart Category Scraper (`apt_marble/walmart-category-scraper`) Actor

Browse any Walmart category, best-seller or aisle link and collect every product with title, USD price, rating, review count, image, seller, rank and sponsored flag. Paste /browse, /cp or search links — or just a name like toys.

- **URL**: https://apify.com/apt\_marble/walmart-category-scraper.md
- **Developed by:** [Hamza](https://apify.com/apt_marble) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.70 / 1,000 category products

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Category Scraper

Browse any Walmart category or best-seller list and get every product back as clean, structured data. Paste one or more Walmart category links — `browse`, `cp`, search or best-seller pages — or just type a category name, and receive a row for each product with its title, price in USD, rating, review count, image, seller, fulfillment badge, sponsored flag, category name, rank and the page it was found on. Page through a whole department or scrape a single aisle — the actor handles paging, deduping and ranking so you get distinct products with a true served order.

Built for resellers mapping an aisle, brands tracking shelf position, analysts sizing a category, and sourcing teams building product lists — anyone who needs Walmart's category listings as data.

### What you can do with it

- **Turn a category into a dataset** — paste `https://www.walmart.com/browse/electronics/laptops/3944` and get back hundreds of live products with price, rating and rank, ready to filter and pivot.
- **Browse by name when you don't have a link** — type `toys`, `home`, `grocery` or `beauty` and the actor finds the matching aisle automatically.
- **Map price bands across an aisle** — sort by price low-to-high or high-to-low and set how many products to pull per category.
- **Track best sellers and top-rated** — sort by Best Sellers, Newest, or Customer Rating to surface what's moving and what's loved.
- **Run many categories in one job** — scrape up to 50 categories per run, each independently paged and ranked, with one combined dataset at the end.
- **Re-run on a schedule** — schedule it daily or weekly and compare each fresh dataset to the last to spot new listings, price moves and rank shifts.

### What you get

One row per product. Abridged sample of a single result:

```json
{
  "categoryUrl": "https://www.walmart.com/browse/electronics/3944",
  "categoryName": "Electronics",
  "itemId": "12345678",
  "title": "onn. 24\" Full HD Monitor, 75Hz, HDMI & VGA, Black",
  "price": { "amount": 79.99, "currency": "USD" },
  "originalPrice": 99.99,
  "rating": 4.3,
  "reviewCount": 1847,
  "imageUrl": "https://i5.walmartimages.com/seo/onn-24-monitor_1234.jpeg",
  "productUrl": "https://www.walmart.com/ip/onn-24-Full-HD-Monitor/12345678",
  "sellerName": "Walmart.com",
  "fulfillmentBadge": "Free shipping",
  "sponsored": false,
  "rank": 1,
  "organicRank": 1,
  "page": 1,
  "scrapedAt": "2026-08-28T12:00:00.000Z"
}
```

A sponsored placement keeps its `rank` but `organicRank` is `null` so you can see which spots were paid and where the first earned result truly sits.

### Input reference

| Setting | Type | Default | What it does |
| --- | --- | --- | --- |
| Category links or names | list of text | `https://www.walmart.com/browse/electronics/3944` | One or more Walmart category links (`/browse/`, `/cp/`, `/search` or best-seller URLs) or plain category names like `electronics` or `toys`, mixed in the same list. Each entry is scraped as a separate category. **Required.** |
| Results per category | whole number | `100` | How many products to collect for each category. Walmart serves about 40 per page and the actor pages through automatically until this number is reached or the category runs out. Maximum 2,000. |
| Sort products by | choice | `Best Match` | Best Match, Price low to high, Price high to low, Best Sellers, Newest, or Customer Rating. |
| Parallel work | whole number | `5` | How many categories to work on at the same time. Higher is faster but Walmart serves fewer complete pages when pushed hard. Maximum 10. |

### Output fields

| Field | Type | Description |
| --- | --- | --- |
| `categoryUrl` | text | The category link this row was collected from. |
| `categoryName` | text | Human-readable category name (from the page or derived from the link). |
| `itemId` | text | Walmart's item number for the product. |
| `title` | text | Product title as shown to shoppers. |
| `price` | object | The price as `{ amount, currency }` in USD. `amount` is `null` when Walmart shows no fixed price on the tile. |
| `originalPrice` | number | The struck-through was-price, when a discount is shown. |
| `rating` | number | Average customer rating from 0 to 5, when shown. |
| `reviewCount` | number | Number of customer reviews, when shown. |
| `imageUrl` | text | The product's main image. |
| `productUrl` | text | Clean link to the product page. |
| `sellerName` | text | The seller shown on the tile (often `Walmart.com`), when present. |
| `fulfillmentBadge` | text | Fulfillment label such as `Free shipping` or `Free pickup`, when shown. |
| `sponsored` | true/false | Whether Walmart marked this placement as sponsored. |
| `rank` | number | Position in the category exactly as Walmart served it, ads included. |
| `organicRank` | number | Position counting only unpaid results; empty on sponsored rows. |
| `page` | number | Which category page the product was first found on. |
| `scrapedAt` | text | When the row was collected (ISO timestamp). |

### Pricing

You pay per product, with no monthly minimum.

| What you are charged for | Price |
| --- | --- |
| Category product — one product added to your dataset | **$0.70 per 1,000** |

**Worked example.** A run that collects 1,000 products costs 1,000 × $0.0007 = **$0.70**. Collecting 500 products across two categories is about $0.35. A daily run of 200 products is roughly $0.14 per run, about $4 a month.

### Limits & what this actor cannot do

- Prices, ratings, availability and ranking are a snapshot at the moment of collection and keep changing afterwards; Walmart's ranking is not identical from one moment to the next.
- Only distinct products are returned — when Walmart repeats the same item across nearby pages it is returned once, with the rank of its first appearance.
- There is a practical ceiling of roughly 2,000 products per category in one run. To go deeper, split a broad category into subcategories or narrower searches.
- Seller name and fulfillment badge are shown on most tiles but not all layouts; where a tile does not carry them, those fields come back empty rather than guessed.
- All prices are in USD. Walmart US is a single-currency storefront, so no currency conversion is applied.
- Speed depends on the size of the job and on Walmart's own response times; no fixed throughput is promised.
- Walmart's terms govern automated access. You are responsible for using the data lawfully and in line with the source site's terms, and for handling any personal data in line with applicable privacy law.

### FAQ

**Do I need a Walmart account?**
No. The actor reads only what Walmart shows the public in its category listings.

**Does it need my login or password?**
No. There is nothing to connect and nothing to configure — paste a category link or type a name and press start.

**What counts as a category link?**
Any Walmart aisle link: `https://www.walmart.com/browse/...`, `https://www.walmart.com/cp/...`, `https://www.walmart.com/search?q=...`, or best-seller pages. You can also just type a name like `toys` or `grocery`.

**Can I paste best-seller or search links?**
Yes. The actor treats any Walmart product-listing link the same way — it reads the products shown on that listing page and pages through it.

**How many products can I get per category?**
Up to 2,000 per category in one run. Most aisles are well under that; the actor stops automatically when the aisle runs out.

**How is sponsored detection done?**
From Walmart's own placement data on each tile, not from on-screen labels. Each row reports both its overall rank and its ad-free organic rank.

**Can I schedule it?**
Yes. Schedule it hourly, daily or weekly from the Apify console, and each run writes a fresh dataset you can compare against the last — ideal for tracking price and ranking over time.

**Is the data complete?**
It is complete for everything Walmart shows openly on its category tiles. Where a tile omits a field, such as review count on a brand-new product, the actor leaves it empty rather than guessing.

# Actor input Schema

## `categories` (type: `array`):

What to browse. Paste one or more Walmart category links (for example https://www.walmart.com/browse/electronics/laptops/3944 or https://www.walmart.com/cp/electronics/3944), or type a category name like "electronics" or "toys". Each entry is treated as a separate category to scrape. At least one is required.

## `maxItemsPerCategory` (type: `integer`):

How many products to collect for each category. Walmart serves about 40 products per page and the actor pages through automatically until this number is reached or the category runs out.

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

The order Walmart returns products in. Best Match is Walmart's default relevance. Other options sort by price, best sellers, newest arrivals, or customer rating.

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

How many categories to work on at the same time. Higher is faster but Walmart serves fewer complete pages when pushed hard. Leave at 5 unless you have a reason.

## Actor input object example

```json
{
  "categories": [
    "https://www.walmart.com/browse/electronics/3944"
  ],
  "maxItemsPerCategory": 40,
  "sort": "best_match",
  "maxConcurrency": 5
}
```

# Actor output Schema

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

Every category product this run collected.

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

What this run collected per category, and anything it could not read.

# 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 = {
    "categories": [
        "https://www.walmart.com/browse/electronics/3944"
    ],
    "maxItemsPerCategory": 40,
    "sort": "best_match",
    "maxConcurrency": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("apt_marble/walmart-category-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 = {
    "categories": ["https://www.walmart.com/browse/electronics/3944"],
    "maxItemsPerCategory": 40,
    "sort": "best_match",
    "maxConcurrency": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("apt_marble/walmart-category-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 '{
  "categories": [
    "https://www.walmart.com/browse/electronics/3944"
  ],
  "maxItemsPerCategory": 40,
  "sort": "best_match",
  "maxConcurrency": 5
}' |
apify call apt_marble/walmart-category-scraper --silent --output-dataset

```

## MCP server setup

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