# Changelog of Walmart Product & Reviews Scraper (`sian.agency/walmart-data-scraper`) Actor

- **URL**: https://apify.com/sian.agency/walmart-data-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/sian.agency/walmart-data-scraper.md

## Changelog

All notable changes to the Walmart Product & Reviews Scraper will be documented in this file.

### \[1.3.5] - 2026-09-11

#### 🖼️ Images

- 🖼️ **The photos were always collected — now you can see them.** The full image gallery and its preview thumbnail appear in the Output tab and in every export, instead of only in the raw JSON.

### \[1.3.0] — 2026-08-26

#### 💲 Prices are back on search and category rows

- Walmart moved where it publishes the price on result cards, and every **Product Search** and
  **Products by Category** row had been coming back with `price: 0`, an empty `priceDisplay` and
  no currency. Rows now carry the price, the currency, the struck-through list price when the item
  is on sale, the amount saved, and the per-unit price where Walmart shows one.
- **Product Details, Product Offers and Product Reviews were never affected** — their prices were
  correct throughout.

#### 🔁 You are no longer charged twice for the same product

- Walmart re-serves some items across — and even within — result pages. Every repeat was delivered
  and billed again: a 210-row search returned only 199 distinct products. Repeats are now skipped,
  and the run log tells you how many were.

### \[2026-08-24]

#### 📄 A real run report, every time

- **New run report.** Every run now writes a `report.html` you can open straight from the run's Key-value store: the best result up front, preview tables per operation, one-click links to your dataset as JSON or CSV, and an itemized statement of exactly what you were charged.
- **Failed rows now tell you what to do.** Anything that could not be fetched is listed with the reason and a concrete fix, plus a copy-and-paste input that re-runs only the items that failed — so a retry costs you nothing extra.
- **The report survives a crash.** It is written at the end of every run, including runs that stop early, so the Output tab is never empty.
- **Correct characters.** The report is now served as UTF-8, so product names and reviews render properly instead of as garbled text.
- **Clearer run log.** The log now states your tier and its limits up front, and confirms each charge as it happens, so a free run that stops at its row cap explains itself instead of looking like a failure.

### \[1.2.0] — 2026-08-03

#### 🏷️ Product Offers now returns every seller

- Offer lookups previously returned **one** seller on products that have dozens — the row said `totalOffers: 25` and shipped a single offer. The actor now reads the full marketplace seller list, so a 25-seller product returns 25 rows.
- This also sidesteps the transient failures that made Offers unreliable through July.

#### ⚡ Faster on multi-page runs

- Multi-page searches and product details are noticeably quicker; single small lookups are unchanged or marginally slower. Pricing is untouched — a row costs exactly what it cost before.

#### 🆕 10 new fields

- `manufacturerName`, `additionalOfferCount`, `categoryPath`, `aspects`, `reviewAspects`, `sellerAverageRating`, `sellerReviewCount`, `hasSellerBadge`, `wfsProviderName`, and `_backup`.
- Every field that existed in 1.1.6 still appears, with the same name, type and meaning. Nothing was removed or renamed.

#### 🛟 Automatic fallback

- If the primary collection path cannot reach a page, the actor automatically retrieves it another way rather than failing the item. Rows delivered that way are flagged with `_backup: true` so you can always tell how a row was obtained.
- Failed rows remain free.

#### 🇨🇦 walmart.ca unchanged

- Canadian runs are served exactly as in 1.1.6.

#### ⚠️ Two changes to be aware of

- **Product Offers rows per run increase sharply.** Because the actor now returns every seller
  instead of one or two, a product with 23 sellers produces 23 rows where it previously produced
  \~2 — and is billed per row. The per-row price is unchanged; the row *count* is now correct.
  If you run Product Offers on a schedule, expect your usage on that operation to rise accordingly.
- **Five undocumented fields are no longer present.** `delivery_from_store`, `shipping`,
  `shipping_days`, `free_shipping_with_walmart_plus` and `badge_flags` were never declared in the
  dataset schema or documented, but did appear in output. They are gone. Every documented field is
  unchanged. The snake\_case duplicates of documented fields (`product_id`, `us_item_id`,
  `two_day_shipping`, …) are replaced by their camelCase equivalents (`productId`, `usItemId`,
  `twoDayShipping`), which were always present alongside them.

#### 🧱 Memory requirement

- This version needs **1024 MB** and will not use the faster collection path below 512 MB — it falls
  back to the previous behaviour instead of failing, so an under-provisioned run still returns data.

### \[1.1.6] — 2026-08-01

#### 🗂️ Category IDs — the format is now documented correctly

- **Sub-categories need the full underscore-joined path** (`3944_1089430`), not the bare number (`1089430`). A bare sub-category ID is accepted by the data source and matches nothing, so runs finished "successfully" with an empty dataset and no error. Only top-level departments like `3944` work on their own.
- The previous guidance — "take the ID from `categories[].url`" — produced exactly the broken form at every level below a department. It now tells you to **join the breadcrumb IDs in order**, with a worked example.
- Corrected across the input schema, the README input table, the category example, and a new [Category ID format](README.md#category-id-format) troubleshooting entry.

#### ℹ️ Empty runs now explain themselves

- An item that returns nothing logs **why**, naming the item and the likely cause, instead of a bare "no rows" line.
- The HTML run summary shows a **"No results"** badge and a hint box rather than a green "Success" with `0 / 0 / 0`.

#### 🔁 Reliability

- **Product Offers is materially more reliable.** The data source is currently failing a large share of offer lookups with a transient error, on products that resolve fine moments later. Retries went from 3 attempts to 6, which recovers most of them — a minority can still come back empty while the source is degraded. Failed rows have always been free, so this only ever cost you results, never money.

#### 📮 ZIP

- **`zip` is not honored by the data source** — it is accepted and ignored. Now labelled as such instead of being advertised as a working filter. Use **Store ID** or **State** for store-level results; both work. The field is kept so existing saved tasks keep running.

### \[1.1.0] — 2026-07-22

#### 📎 Batch inputs — one run, many items

- **`productIds`, `queries`, `categoryIds`** — pass a list instead of a single value and one run covers them all. The singular fields still work exactly as before; the plural ones win when filled.
- **One actor start per run, not per item.** Monitoring 100 products used to mean 100 runs and 100 start fees; it's now one run and one. This is where the cost sits on scheduled, repeated lookups.
- Blanks and duplicates are dropped automatically. Up to 500 items per run; `maxPages` applies per item, so the two multiply.
- One item failing never aborts the batch — it lands as a `status:"error"` row (still free) and the run continues.

#### 💰 Pricing

- **`apify-actor-start` cut from $0.006 to $0.0005** — a 12x reduction, putting it near the lowest start fee on the Store. Per-row prices are unchanged.

#### 📝 Docs

- Corrected the field-count claim to the measured **87 fields** on a real product-details row.
- Removed two claims that didn't survive checking: an unsupported user-count boast, and a per-row price comparison that isn't accurate against the current field of Walmart actors.

### \[1.0.0] — 2026-06-05

#### 🎉 Walmart Price Tracker & Data API — Launch!

- **Walmart Price Tracking on Autopilot** — capture `price`, `listPrice`, `savingsAmount`, and stock status on every product row; schedule a run and diff the dataset to catch price drops and rollbacks
- **No-API-Key Walmart Data Access** — the Walmart API alternative that needs no Walmart API key, no developer registration, and no seller account
- **5 Operations, One Actor** — Product Search · Products by Category · Product Details · Product Offers · Product Reviews, picked from a single dropdown
- **Per-Offer Seller Rows** — every third-party seller offer as its own row with seller, price, shipping, WFS, and return policy
- **80+ Structured Fields** — curated camelCase aliases (`productId`, `price`, `rating`, `seller`, `verifiedPurchase`) plus the raw Walmart fields spread alongside, for analysts and engineers alike

#### 💎 User Benefits

- Build a Walmart price monitor in minutes — no proxy setup, no Walmart API documentation to wade through
- Returns **all review ratings by default**; filter by star rating, sort order, and page size when you need to
- Pay only for successful rows — failed lookups land as `status:"error"` rows at $0
- One clean dataset shape across all five operations; filter by `_operation` and `status`, export to JSON, CSV, or Excel
- US (`walmart.com`) and Canada (`walmart.ca`) marketplaces; native sort, price, store, and ZIP filters

#### 🎯 Use Cases

- Price-tracking SaaS founders building a Walmart price tracker on a daily cron
- E-commerce ops teams mapping competitor catalogs and assortment by category
- Walmart Marketplace sellers benchmarking their buy-box position with per-offer seller data
- Market researchers measuring category share-of-shelf and price distribution
- Brand teams mining voice-of-customer review sentiment at scale
