# Walmart Scraper — Products, Prices, Sellers & Reviews (`memo23/walmart-scraper`) Actor

Scrape Walmart.com and Walmart.ca, priced for the store or state you pick: price, was-price, deal badges, rating, seller and stock; full records with UPC, specs and variants; filtered reviews; every seller offer with email and phone. Search by URL, keyword, item id or UPC barcode.

- **URL**: https://apify.com/memo23/walmart-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** E-commerce, Lead generation
- **Features:** Limited permissions
- **Stats:** 14 total users, 11 monthly users, 93.9% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 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?

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 Scraper — Products, Prices, Sellers & Reviews

<p align="center">
  <img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/logo-walmart.png" alt="Walmart Scraper logo" width="128" />
</p>

Turn any Walmart search, category, product or seller URL into clean rows: prices with was-price and discount, every deal badge, ratings, stock, sellers, customer reviews and every marketplace seller's offer. Works on walmart.com and walmart.ca. No Walmart account, login or API key needed.

| Result type | One row per | Typical use |
|---|---|---|
| Products | product (search tile, or the full product page) | price monitoring, catalog and assortment mapping |
| Customer reviews | review | voice of customer, sentiment, complaint mining |
| Seller offers | marketplace seller offer | buy-box and marketplace seller research |
| Seller profile | seller store URL | seller contact lists, marketplace lead generation |

### Why Use This Scraper?

- **Four result types in one actor.** Products, reviews, seller offers and seller profiles share one input form and one dataset shape per type.
- **Every badge, not just one.** Rollback, Clearance, Reduced price, Best seller, Overall pick, Flash Deal and the "100+ bought since yesterday" line all come back, as text and as stable keys.
- **Full product record on demand.** UPC, model, specifications, all images, variants, number of sellers, fulfillment options, return window, star breakdown and Walmart's AI review highlights.
- **Prices for the store you pick.** Set a walmart.com store number or a state and the whole run is priced and stocked for that one store. Every product row carries the ZIP, city, state and store id Walmart priced it for, so you know which store a price and stock reading belong to.
- **Review filters that matter.** Sort by newest, oldest, rating or helpfulness, keep several star ratings at once, verified purchases only, and a since-date that stops reading at the first older review.
- **Seller contacts.** Seller offers can carry each marketplace seller's public business email, phone, address, rating and review count.
- **Paste any URL.** Search, `/browse/`, `/cp/` department pages, filtered or brand searches, product, reviews and seller store URLs are all recognised.
- **Walmart.ca too.** Products and reviews on walmart.ca, with CAD prices and Canadian store locations.

### Overview

Built for price-tracking tools, e-commerce and marketplace teams, brand managers, review analysts and agencies who need public Walmart data without an official API.

The dataset has one row per result, and the `recordType` field says what the row is: `product`, `review`, `offer` or `seller`. Nested values (specifications, variants, star breakdown) stay as JSON objects; Apify's CSV and Excel exports flatten them into columns.

Pages that fail are retried automatically. You are charged per row saved, plus the actor start.

### Supported Inputs

#### URL types

| URL type | Example | What you get |
|---|---|---|
| Search | `https://www.walmart.com/search?q=coffee+maker` | Products, paginated |
| Filtered or brand search | `https://www.walmart.com/search?q=blender&facet=brand%3ANinja` | Products, filters kept |
| Category (browse) | `https://www.walmart.com/browse/3944_1060825_447913` | Products, paginated |
| Department page (/cp/) | `https://www.walmart.com/cp/coffee-makers/5438660` | Resolved to the category, then paginated |
| Product | `https://www.walmart.com/ip/5162907971` | Full product record, its reviews, or its seller offers |
| Reviews page | `https://www.walmart.com/reviews/product/808715278` | Same as the product it belongs to |
| Seller store | `https://www.walmart.com/global/seller/101063684` | Seller profile row |
| Walmart.ca | `https://www.walmart.ca/en/search?q=kettle` | Products and reviews in CAD |

#### Copy-pasteable startUrls

```json
{
    "startUrls": [
        { "url": "https://www.walmart.com/search?q=air+fryer" },
        { "url": "https://www.walmart.com/cp/coffee-makers/5438660" },
        { "url": "https://www.walmart.com/ip/5162907971" }
    ]
}
```

#### Keywords, category ids and item ids

You do not need URLs. `searchQueries` runs one Walmart search per keyword, `barcodes` looks products up by UPC, EAN or GTIN, `categoryIds` takes the path at the end of a /browse/ link such as `4044_90548_90546_1115306_5438660`, and `productIds` takes item ids such as `808715278` or the 12-character catalog id such as `4NN9ZW0AZYDK`. The `domain` field picks walmart.com or walmart.ca for these.

#### Unsupported inputs

- A seller's item catalog. A seller store URL returns the seller's profile, not the list of products it sells.
- Seller offers on walmart.ca. Walmart.ca's site has no all-sellers view to read, so those products are skipped with a log message.
- Walmart Mexico, cart, checkout, account, order or anything behind a login.

### Use Cases

| Audience | What they do with it |
|---|---|
| Price-tracking tools | Scheduled snapshots of price, was-price, Rollback and stock per item id |
| E-commerce and category managers | Assortment and share-of-shelf mapping from category and search pages |
| Marketplace sellers and agencies | Buy-box research: every seller's price, condition, shipping, WFS status and rating |
| Brands | Review monitoring by star rating and date, AI review highlights, sentiment feeds |
| Lead generation | Marketplace seller contact lists from seller offers and store pages |
| Researchers | Price distribution, badge usage and sponsored placement across categories |

### How It Works

<p align="center">
  <img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-walmart.png" alt="How Walmart Scraper works" width="900" />
</p>

1. You give it Walmart URLs, keywords, category ids or item ids, and choose the result type.
2. Search and category pages are read page by page (about 40 products each, up to Walmart's 25-page limit) and de-duplicated.
3. Depending on the result type, each product becomes a row, has its product page opened, has its review pages read with your filters, or has every seller offer collected.
4. Pages that fail are retried automatically, backing off over about a minute.
5. Rows land in the dataset as soon as each product is done. Export as JSON, CSV, Excel or through the API.

### Input Configuration

#### Input fields

| Field | Type | Default | Description |
|---|---|---|---|
| `scrapeMode` | select | `products` | Result type: `products`, `reviews` or `sellerOffers`. Seller store URLs always return a seller profile row. |
| `startUrls` | array | empty | Any walmart.com or walmart.ca URL from the table above. |
| `searchQueries` | array | empty | Keywords, one search each. |
| `barcodes` | array | empty | UPC, EAN or GTIN codes; one first-page search each, without sort or price filters. |
| `categoryIds` | array | empty | Category paths from /browse/ links (`4044_90548_90546_1115306_5438660`), or /cp/ and /browse/ URLs. |
| `productIds` | array | empty | Item ids, 12-character product ids or product URLs. |
| `domain` | select | `us` | `us` (walmart.com) or `ca` (walmart.ca) for keywords, category ids and bare item ids. |
| `storeId` | string | empty | walmart.com store number (`4383`). Every search, category and product in the run is priced and stocked for that store. |
| `state` | select | empty | Two-letter US state (`MI`). The run is priced for one store in that state. `storeId` wins when both are set. |
| `includeProductDetails` | boolean | `false` | Products mode: open each product found by a search or category for the full record. |
| `sort` | select | `best_match` | `best_match`, `price_low`, `price_high`, `best_seller`, `rating_high`, `new`. |
| `minPrice` / `maxPrice` | integer | empty | Price range for searches and categories. |
| `maxPagesPerSearch` | integer | `5` | Result pages per search or category, 1–25. |
| `maxReviewsPerProduct` | integer | `100` | Reviews mode cap per product; `0` = every review with text. |
| `reviewsSort` | select | `relevancy` | `relevancy`, `newest`, `oldest`, `rating_high`, `rating_low`, `helpful`. |
| `reviewRatings` | array | empty | Star ratings to keep, e.g. `["1","2"]`. Empty = all. |
| `verifiedPurchasesOnly` | boolean | `false` | Only Verified Purchase reviews. |
| `reviewsNewerThan` | date | empty | Only reviews on or after this date; reading stops at the first older one. |
| `includeSellerDetails` | boolean | `false` | Seller offers mode: add each seller's email, phone, address, rating and review count. |
| `maxItems` | integer | `1000` | Hard cap on rows across the run. |
| `maxConcurrency` | integer | `10` | Pages fetched at the same time, 1–30. |
| `maxRequestRetries` | integer | `8` | Attempts per page before it is given up. |
| `proxy` | proxy | residential | Residential proxies recommended. The default works out of the box. |

#### Common scenarios

Products from a search, with the full record:

```json
{
    "scrapeMode": "products",
    "searchQueries": ["air fryer"],
    "includeProductDetails": true,
    "maxPagesPerSearch": 2,
    "maxItems": 50
}
```

Recent one- and two-star verified reviews for a few products:

```json
{
    "scrapeMode": "reviews",
    "productIds": ["3406383181", "5162907971"],
    "reviewRatings": ["1", "2"],
    "verifiedPurchasesOnly": true,
    "reviewsNewerThan": "2026-09-01",
    "maxReviewsPerProduct": 0,
    "maxItems": 1000
}
```

Every seller on a product, with seller contact details:

```json
{
    "scrapeMode": "sellerOffers",
    "productIds": ["3406383181"],
    "includeSellerDetails": true,
    "maxItems": 100
}
```

Prices and stock at one store, for a list of items you track:

```json
{
    "scrapeMode": "products",
    "productIds": ["10450114", "808715278"],
    "storeId": "4383",
    "maxItems": 100
}
```

Look up a list of barcodes (UPC, EAN or GTIN); each row's `searchQuery` is the code you entered. Add `"includeProductDetails": true` to get each item's own UPC on the row:

```json
{
    "scrapeMode": "products",
    "barcodes": ["078742351865", "00679262967736"],
    "maxItems": 100
}
```

Canadian products from a category:

```json
{
    "scrapeMode": "products",
    "domain": "ca",
    "searchQueries": ["kettle"],
    "sort": "price_low",
    "maxItems": 40
}
```

### Output Overview

Each row has a `recordType`:

- `product`: one per product. Search and category tiles give the listing fields (price, was-price, badges, rating, seller, stock, shipping and pickup lines, rank, sponsored flag) and the store Walmart priced the page for. Full records (`detailScraped: true`) add identifiers, description, specifications, images, variants, fulfillment, returns, star breakdown and review highlights.
- `review`: one per customer review, with the product it belongs to.
- `offer`: one per marketplace seller offer on a product, ranked the way Walmart lists them, plus the lowest offer price on that product.
- `seller`: one per seller store URL, the seller's public business profile.

### Output Samples

#### Product from a search (listing fields)

```json
{
    "recordType": "product",
    "usItemId": "1082291497",
    "productId": "527TISE23F0Y",
    "name": "Chefman 1L Electric Glass Kettle w/ LED Indicator Light, Automatic Shutoff - Black",
    "url": "https://www.walmart.com/ip/Chefman-1L-Electric-Glass-Kettle-w-LED-Indicator-Light-Automatic-Shutoff-Black-New/1082291497",
    "price": 16.97,
    "wasPrice": 19,
    "savings": 2.03,
    "discountPercent": 11,
    "minPrice": 16.97,
    "maxPrice": 18,
    "currency": "USD",
    "isRollback": true,
    "isSponsored": true,
    "badges": ["Rollback"],
    "badgeKeys": ["ROLLBACK"],
    "rating": 4.7,
    "reviewCount": 14276,
    "sellerName": "Walmart.com",
    "soldByWalmart": true,
    "availability": "IN_STOCK",
    "shippingMessage": "Shipping, arrives tomorrow",
    "pickupMessage": "Pickup available",
    "deliveryMessage": "Delivery as soon as 20 mins",
    "condition": "New",
    "additionalOfferCount": 8,
    "productType": "Electric Kettles",
    "categoryPath": "Home > Appliances > Kitchen Appliances > Electric Kettles & Ice Tea Makers > Electric Kettles",
    "position": 1,
    "page": 1,
    "searchQuery": "kettle",
    "detailScraped": false,
    "domain": "us"
}
```

#### Product from a search priced for one store (`storeId: "4383"`, shortened)

```json
{
    "recordType": "product",
    "usItemId": "10450118",
    "name": "Great Value Milk Whole Vitamin D, Half Gallon, 64 fl oz",
    "price": 1.66,
    "currency": "USD",
    "availability": "IN_STOCK",
    "pickupMessage": "Pickup as soon as tomorrow",
    "position": 2,
    "searchQuery": "great value whole milk",
    "detailScraped": false,
    "locationZip": "48126",
    "locationCity": "Dearborn",
    "locationState": "MI",
    "locationStoreId": "4383"
}
```

#### Full product record (shortened)

```json
{
    "recordType": "product",
    "usItemId": "997508948",
    "name": "Ninja 12-Cup Programmable Drip Coffee Maker, 2 Brew Styles, Adjustable Warming Plate, CE250, Black/Stainless Steel",
    "brand": "Ninja",
    "price": 64.97,
    "wasPrice": 74,
    "discountPercent": 12,
    "badges": ["Overall pick"],
    "socialProof": "100+ bought since yesterday",
    "rating": 4.6,
    "reviewCount": 8999,
    "upc": "622356592161",
    "model": "CE250",
    "offerCount": 2,
    "freeShipping": true,
    "shippingDeliveryDate": "2026-09-25T21:59:00.000Z",
    "returnWindowDays": 90,
    "ratingBreakdown": { "fiveStar": 7252, "fourStar": 735, "threeStar": 305, "twoStar": 180, "oneStar": 527 },
    "recommendedPercentage": 78,
    "specifications": { "Number of cups": "12", "Features": "Programmable", "Finish": "Stainless Steel", "Weight": "7 lb" },
    "variantOptions": { "Actual Color": ["12 Cups - Silver", "14 Cups - Silver"] },
    "reviewHighlights": [
        { "aspect": "coffee taste", "sentiment": "Positive", "summary": "Brews a cup with a deep flavor profile." }
    ],
    "locationZip": "07003",
    "locationCity": "Bloomfield",
    "locationState": "NJ",
    "locationStoreId": "5447",
    "detailScraped": true
}
```

#### Customer review

```json
{
    "recordType": "review",
    "usItemId": "5162907971",
    "productName": "Mainstays Black 12-Cup Drip Coffee Maker",
    "reviewId": "427996541",
    "rating": 5,
    "title": "Great Value for the Price",
    "text": "It does exactly what I want it to do, makes a decent amount of coffee and keeps it hot. The only drawback is that it does not have an auto shut off…",
    "submittedAt": "2026-06-08",
    "userNickname": "Alexandra",
    "isVerifiedPurchase": true,
    "helpfulVotes": 2,
    "recommended": true,
    "reviewerReviewCount": 25,
    "variant": { "Color": "Black", "Multipack quantity": "1" },
    "sellerName": "Walmart.com",
    "fulfilledBy": "Walmart",
    "photos": []
}
```

#### Seller offer with seller details

```json
{
    "recordType": "offer",
    "usItemId": "997508948",
    "position": 2,
    "offerCount": 2,
    "lowestOfferPrice": 64.97,
    "sellerDisplayName": "GFAP LLC",
    "sellerType": "EXTERNAL",
    "sellerUrl": "https://www.walmart.com/global/seller/102491870",
    "sellerRating": 3.83,
    "sellerReviewCount": 269,
    "price": 93.98,
    "condition": "New",
    "fulfilledByWalmart": false,
    "freeShipping": true,
    "shippingDeliveryDate": "2026-10-01T21:59:00.000Z",
    "returnWindowDays": 30,
    "sellerEmail": "goforaprofit@gmail.com",
    "sellerPhone": "+1 9046808320",
    "sellerCity": "Jacksonville",
    "sellerState": "FL"
}
```

#### Seller profile

```json
{
    "recordType": "seller",
    "sellerId": "101063684",
    "sellerDisplayName": "Paul Revere Hardware",
    "email": "sales@plantmytank.com",
    "phone": "+1 7817243740",
    "address": "5 Cordwood Cir",
    "city": "Carver",
    "state": "MA",
    "postalCode": "02330",
    "rating": 4.75,
    "reviewCount": 164,
    "status": "ACTIVE",
    "storefrontUrl": "https://www.walmart.com/global/seller/101063684"
}
```

### Key Output Fields

#### Product identity

`usItemId`, `productId`, `name`, `brand` (full record), `url`, `imageUrl`, `images`, `upc`, `model`, `manufacturerProductId`, `productType`, `categoryPath`, `categories`

#### Price

`price`, `wasPrice`, `savings`, `discountPercent`, `minPrice`, `maxPrice`, `unitPrice`, `currency`, `isRollback`, `isClearance`, `isReducedPrice`

#### Badges and placement

`badges`, `badgeKeys`, `socialProof`, `isBestSeller`, `isSponsored`, `position`, `page`, `searchQuery`, `categoryId`

#### Stock and fulfillment

`availability`, `stockMessage`, `shippingMessage`, `pickupMessage`, `deliveryMessage`, `fulfillmentOptions`, `shippingDeliveryDate`, `freeShipping`, `orderLimit`, `isPreOrder`, `locationZip`, `locationCity`, `locationState`, `locationStoreId`

#### Sellers

`sellerName`, `sellerId`, `soldByWalmart`, `sellerDisplayName`, `sellerType`, `sellerRating`, `sellerReviewCount`, `sellerUrl`, `fulfilledByWalmart`, `offerCount`, `additionalOfferCount`; on offers also `offerId`, `lowestOfferPrice`, `condition`, `shipsTo` and, with seller details, `sellerEmail`, `sellerPhone`, `sellerAddress`, `sellerCity`, `sellerState`, `sellerPostalCode`, `sellerCountry`

#### Ratings and reviews

`rating`, `reviewCount`, `ratingBreakdown`, `recommendedPercentage`, `reviewsWithTextCount`, `reviewHighlights`; on review rows `reviewId`, `title`, `text`, `submittedAt`, `userNickname`, `isVerifiedPurchase`, `isSyndicated`, `helpfulVotes`, `unhelpfulVotes`, `recommended`, `variant`, `photos`, `responses`

#### Content and returns

`shortDescription`, `description`, `highlights`, `specifications`, `warranty`, `videos`, `variantOptions`, `variants`, `returnable`, `freeReturns`, `returnWindowDays`, `returnPolicy`

### FAQ

#### Which Walmart URLs are supported?

Search (including filtered and brand searches), `/browse/` categories, `/cp/` department pages, product (`/ip/`), reviews and seller store pages, on walmart.com and walmart.ca. See the Supported Inputs table.

#### Why is `brand` empty on search results?

Walmart's search tiles do not carry the brand. Turn on `includeProductDetails` (or pass item ids) to get the full record, which has it.

#### Can I set a store or state?

Yes, on walmart.com. Put a store number in `storeId` (it is in the store page's address, walmart.com/store/4383) and every search, category and product in the run is priced and stocked for that store. Or pick a `state` when any store there will do. Before scraping, the actor gets Walmart to assign that store and says so in the run log. This can take up to about two minutes. If Walmart will not assign the exact store, the run uses a store in the same city and the log names it. If it cannot get one there either, or the store number does not exist, the run stops before scraping with a message saying why, so you pay only the actor start and never get rows from the wrong store. Which stores Walmart will set varies during the day, so a retry later usually works.

Every product row says which store it was priced for (`locationStoreId`, `locationZip`, `locationCity`, `locationState`). Without `storeId` or `state`, Walmart prices each page for a location of its own choosing, so prices can differ between rows of one run. Seller offers are not tied to the chosen store, and ZIP codes and walmart.ca stores cannot be set yet.

#### How reliable is setting a `storeId`?

Pinning an exact store is best effort, not guaranteed on every run. Most runs set the store; at some times of day Walmart will not set one for a while. When that happens the run stops in about a minute, before scraping, charges only the actor start, and the log says why and asks you to rerun shortly. A rerun a few minutes later usually binds the store, so for a one-off pull just run it again.

Every page is checked against the store before its rows are saved. At some hours Walmart prices most pages for its default store in Sacramento whatever store the run was given; such a page is retried, and if it never comes back for your store it is left out and not charged, and the log says how many. If almost every page comes back for a different store, the run stops and asks you to rerun later.

A store that has been set before, by any run, is usually set again within seconds. The actor remembers stores it has reached, so scheduled tracking of the same stores mostly skips the slow first search, and the bad windows above mainly affect a store's first run.

A single-store town is the hardest case, since there is no second store in the same city to fall back to. If you need a run to finish every time, use `state` instead of `storeId`: it still prices for a store in that state when it can bind one, but if it cannot, it keeps scraping without a pinned store rather than stopping. For scheduled store-level tracking, the first run of a new store is the one that may need a retry.

#### Can I look products up by UPC or barcode?

Yes. Put the codes in `barcodes`, one per line. Walmart's search matches a barcode only in its 14-digit GTIN form (a 12-digit UPC as typed finds nothing), so on walmart.com a 12-digit UPC, 13-digit EAN or 8-digit code is padded with zeros before searching. Each code reads one results page, with no sort or price filter that could hide the item. Each row's `searchQuery` keeps the code you entered, and `usItemId` is the Walmart item, ready for `productIds` when you want the full record, reviews or sellers. A code Walmart no longer sells returns no rows.

#### How many products can one search return?

Walmart shows at most 25 pages (roughly 1,000 products) for any search or category. To go deeper, split the query by price range (`minPrice`, `maxPrice`), sub-category or sort order.

#### Why do reviews stop before the total number of ratings?

Walmart lists only reviews with text. Star-only ratings appear in the counts (`reviewCount`, `ratingBreakdown`) but never as review rows.

#### Are sponsored products included?

Yes. They are real listings shown on the page and are flagged with `isSponsored: true`, so you can drop them if you only want organic ranks.

#### Why is `productName` empty on some seller offers?

Walmart's seller-offer data does not include the product name. Offers for products found through a search or category carry the name; offers for bare item ids carry the item id and URL.

#### Does it work on walmart.ca?

Yes for products and reviews, with prices in CAD. Seller offers are available for walmart.com only.

#### Why does a run sometimes pause?

When many pages fail in a row, the actor waits about 20 seconds before continuing instead of using up retries. A run where no page could be loaded ends as failed with the reason, rather than as an empty success.

#### What does the actor not scrape?

Anything behind a login, carts and checkout, a seller's item catalog, and Walmart Mexico.

### Support

Open an issue on the actor's [Issues tab](https://apify.com/memo23/walmart-scraper/issues) or email <muhamed.didovic@gmail.com>.

### Additional Services

Need a custom export shape, a scheduled price monitor, or a Walmart page type this actor does not read yet? Email <muhamed.didovic@gmail.com>.

### Explore More Scrapers

- [**Amazon Product Scraper**](https://apify.com/memo23/amazon-search): products from URLs, search and detail pages
- [**Amazon Reviews Scraper**](https://apify.com/memo23/amazon-reviews-scraper): reviews with AI summary
- [**Amazon Seller Contact Scraper**](https://apify.com/memo23/amazon-sellers-scraper): seller emails, phones and ratings
- [**Wayfair Scraper**](https://apify.com/memo23/wayfair-scraper): products, prices, stock and ratings
- [**Home Depot Reviews Scraper**](https://apify.com/memo23/homedepot-reviews-scraper): ratings, text and photos

Full list at [apify.com/memo23](https://apify.com/memo23).

### 🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the [Apify MCP server](https://mcp.apify.com) or the Apify API (actor: `memo23/walmart-scraper`).

**Purpose:** Walmart.com and Walmart.ca products, customer reviews, marketplace seller offers and seller profiles from URLs, keywords, category ids or item ids.

**Minimal input:**

```json
{ "scrapeMode": "products", "searchQueries": ["coffee maker"], "maxPagesPerSearch": 1, "maxItems": 20 }
```

**Output:** one dataset row per result; `recordType` is `product`, `review`, `offer` or `seller`. Product: usItemId, name, url, price, wasPrice, discountPercent, currency, badges, rating, reviewCount, sellerName, availability, shippingMessage, position, isSponsored, locationStoreId, locationZip, plus with `includeProductDetails` brand, upc, model, specifications, images, variants, fulfillmentOptions, returnWindowDays, ratingBreakdown, reviewHighlights. Review: usItemId, reviewId, rating, title, text, submittedAt, userNickname, isVerifiedPurchase, helpfulVotes, variant. Offer: usItemId, position, sellerDisplayName, price, condition, fulfilledByWalmart, freeShipping, sellerRating, and with `includeSellerDetails` sellerEmail, sellerPhone, sellerAddress. Seller: sellerDisplayName, email, phone, address, rating, reviewCount.

**Behaviors an agent should know:**

- Always set `maxItems`; it caps rows across the whole run. A search reads about 40 products per page, at most 25 pages.
- `scrapeMode` decides what each product becomes; seller store URLs always return a seller profile row.
- `reviewsNewerThan` switches reviews to newest-first and stops at the first older review, which keeps scheduled runs small.
- `barcodes` takes UPC / EAN / GTIN codes (one first-page search each, padded to 14 digits on walmart.com); rows carry the code in `searchQuery`, and a code no longer sold returns nothing.
- Billing is per row by type (product, full product record, review, seller offer, seller profile) plus the actor start; seller details add one seller-profile charge per seller per run. See the Pricing tab for amounts.
- `storeId` (store number) or `state` (two-letter code) prices a walmart.com run for one store; `locationStoreId` on each product row confirms which. No ZIP input. Seller offers are walmart.com only. No login-gated data.

***

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Walmart Inc., Walmart Canada Corp. or any of their subsidiaries. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available product, review and seller pages. It uses no authenticated endpoints, paid features, or content behind the walmart.com or walmart.ca login. Seller contact details are the business information sellers publish on their public store pages. Users are responsible for making sure their use complies with Walmart's Terms of Use, applicable data-protection law (GDPR, CCPA, CAN-SPAM, CASL and similar), and any contractual obligations of their own organization.

***

### SEO Keywords

walmart scraper, scrape walmart, walmart product scraper, walmart API, walmart.com scraper, walmart reviews scraper, walmart seller scraper, walmart price scraper, walmart.ca scraper, Apify walmart, walmart price tracker, walmart upc lookup, walmart barcode lookup, walmart store prices, walmart prices by store, walmart product data, walmart seller offers, walmart buy box data, walmart marketplace sellers, walmart seller contact data, walmart review analysis, walmart rollback deals, e-commerce price monitoring, marketplace seller intelligence, product catalog enrichment

# Changelog

This Actor's version history is a separate document: https://apify.com/memo23/walmart-scraper/changelog.md

# Actor input Schema

## `scrapeMode` (type: `string`):

What each product turns into. Values: products, reviews, sellerOffers. Seller offers are available for walmart.com only. Seller store URLs always return a seller profile row. Example: products. Default: products.

## `startUrls` (type: `array`):

Any walmart.com or walmart.ca URL: search (/search?q=...), category (/browse/..., /cp/...), brand or filtered search, product (/ip/...), reviews (/reviews/product/...) or seller store (/global/seller/...). Search and category URLs are paginated; filters already in a URL are kept. Example: https://www.walmart.com/search?q=coffee+maker. Default empty.

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

Keywords, one Walmart search each, on the marketplace chosen under Marketplace. A barcode typed here is searched in its 14-digit form too, but the Barcodes field below is made for that. Example: air fryer. Default empty.

## `barcodes` (type: `array`):

Look products up by barcode: 12-digit UPC, 13-digit EAN, 14-digit GTIN or 8-digit code, one per line; spaces and dashes are ignored. Each code is one search of the first results page, on walmart.com in its 14-digit form, the form Walmart's search matches (078742351865 as typed finds nothing). Sort and price filters do not apply. Each row's searchQuery is the code; a code Walmart no longer sells returns no rows. Example: 078742351865. Default empty.

## `categoryIds` (type: `array`):

Walmart category ids: copy the end of a walmart.com/browse/ link, the whole path with its underscores, such as 4044_90548_90546_1115306_5438660 for Coffee Makers. Some department numbers on their own open a landing page with no product list (Toys, 4171), so give a path one level deeper for those. A /browse/ or /cp/ URL works here too; a /cp/ page is looked up and turned into its full path. Example: 4044_90548_90546_1115306_5438660. Default empty.

## `productIds` (type: `array`):

Products to scrape, by the number at the end of a product URL (808715278 in walmart.com/ip/.../808715278), by Walmart's 12-character catalog id (4NN9ZW0AZYDK), or as a full product URL. Example: 808715278. Default empty.

## `domain` (type: `string`):

Marketplace used for keywords, category ids and bare item ids. Pasted URLs keep their own site. Values: us, ca. Example: us. Default: us.

## `storeId` (type: `string`):

walmart.com only: price every search, category and product in this run for one store, the number on the store's page (walmart.com/store/4383). Prices, stock and pickup options are that store's. The actor confirms the store before it starts; if Walmart will not assign it, a store in the same city is used and the run log names it. If neither works, the run stops before scraping, so only the actor start is charged. Every product row's locationStoreId shows the store it was priced for. Example: 4383. Default empty.

## `state` (type: `string`):

walmart.com only: price the run for one Walmart store in this state, the one Walmart gives a shopper there. Use it when any store in the state will do; set a store number above for a specific store (the store number wins when both are set). Without either, Walmart prices each page for a location of its own choosing, so prices can differ between rows. Values: two-letter state codes. Example: MI. Default empty.

## `includeProductDetails` (type: `boolean`):

Products mode, for products found by a search or category: fetch every product page for the full record (UPC, model, description, specifications, all images, variants, all seller count, fulfillment options, return policy, star breakdown, review highlights, and the store and ZIP Walmart priced it for). One extra request per product, billed as a product detail. Product URLs and item ids always get the full record. Example: false. Default: false.

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

Sort order for keywords, category ids and pasted search or category URLs that do not set their own. Values: best_match, price_low, price_high, best_seller, rating_high, new. Example: best_seller. Default: best_match.

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

Only products at or above this price, in the marketplace currency. Applies to searches and categories. Example: 25. Default empty.

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

Only products at or below this price, in the marketplace currency. Applies to searches and categories. Example: 200. Default empty.

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

How many result pages to read per search or category, about 40 products each. Walmart shows at most 25 pages for any query. Range 1-25. Example: 3. Default: 5.

## `maxReviewsPerProduct` (type: `integer`):

Reviews mode: stop after this many reviews per product. 0 = every review with text. Example: 50. Default: 100.

## `reviewsSort` (type: `string`):

Order in which reviews are read, which decides which ones you get when a cap applies. Values: relevancy, newest, oldest, rating_high, rating_low, helpful. Example: newest. Default: relevancy.

## `reviewRatings` (type: `array`):

Only reviews with these star ratings; pick several to combine them. Leave empty for all ratings. Values: 1, 2, 3, 4, 5. Example: 1 and 2 for complaints. Default empty.

## `verifiedPurchasesOnly` (type: `boolean`):

Only reviews Walmart marks as Verified Purchase. Example: true. Default: false.

## `reviewsNewerThan` (type: `string`):

Only reviews submitted on or after this date (YYYY-MM-DD). Reviews are then read newest first and reading stops at the first older one, which makes scheduled runs cheap. Example: 2026-09-01. Default empty.

## `includeSellerDetails` (type: `boolean`):

Seller offers mode: open each marketplace seller's store page once and add its public business email, phone, address, rating and review count to that seller's offers. One request per seller, billed once per seller per run. Example: true. Default: false.

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

Hard cap on rows written to the dataset across the whole run: products, reviews, offers or seller profiles. Always set this. Example: 500. Default: 1000.

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

How many pages are fetched at the same time. Higher is faster; lower it if runs slow down or fail. Range 1-30. Example: 10. Default: 10.

## `maxRequestRetries` (type: `integer`):

How many times a page is tried before it is given up. Retries back off over about a minute. Range 1-10. Example: 8. Default: 8.

## `proxy` (type: `object`):

Residential proxies recommended. The default works out of the box; paste your own proxy URLs only if you want to use your own provider.

## Actor input object example

```json
{
  "scrapeMode": "products",
  "startUrls": [
    "https://www.walmart.com/search?q=coffee+maker"
  ],
  "domain": "us",
  "includeProductDetails": false,
  "sort": "best_match",
  "maxPagesPerSearch": 5,
  "maxReviewsPerProduct": 100,
  "reviewsSort": "relevancy",
  "verifiedPurchasesOnly": false,
  "includeSellerDetails": false,
  "maxItems": 1000,
  "maxConcurrency": 10,
  "maxRequestRetries": 8,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

One row per product, review, seller offer or seller profile. The recordType field says which.

# 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 = {
    "startUrls": [
        "https://www.walmart.com/search?q=coffee+maker"
    ],
    "maxItems": 1000,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/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 = {
    "startUrls": ["https://www.walmart.com/search?q=coffee+maker"],
    "maxItems": 1000,
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/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 '{
  "startUrls": [
    "https://www.walmart.com/search?q=coffee+maker"
  ],
  "maxItems": 1000,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call memo23/walmart-scraper --silent --output-dataset

```

## MCP server setup

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