# Changelog of Walmart Price Tracker & Scraper 🛒 (rollbacks, stock, no key) (`tagadanar/walmart-scraper`) Actor

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

## Changelog

### 2026-10-01

- **Fixed: a search stopped after the first page.** Walmart no longer sets the
  "more pages" flag this scraper relied on, so a run asking for 150 products got
  about 60. It now follows Walmart's own page count.
- When a run returns fewer products than `maxResults`, the final status now says
  why each search stopped: Walmart's own pagination ended, a page added nothing
  new, or a page was refused or could not be read. A run that returns the number
  asked for says so.

### 2026-09-19

- When the "Max products" cap is reached before all your searches have run, the final status now says how many searches were not run, instead of counting only the ones that were.

### 2026-08-29 (later)

- A long run no longer dies on the clock. The actor now reads the run's own
  timeout, keeps the last stretch of it for delivery, and stops fetching in
  time — so the products it already collected are charged, pushed and reported
  instead of disappearing with a timed-out run. Retries and their waiting time
  shrink as the deadline approaches, so a single slow page can no longer eat
  seven minutes of a run that has three left.
- Runs that stop this way now say so: "Stopped at the run time limit: N
  product(s) delivered…", with the fix (raise the run timeout or lower
  `maxResults`). A run that ran out of time never claims your keyword had no
  matches.
- Honest limits in the input form: `maxResults` now caps at 25,000 (it
  advertised 50,000, which no run could reach), and `search` takes up to 30
  keywords per run.

### 2026-08-29

- Fixed the main reason a run could come back empty. Walmart's bot wall serves
  its challenge as a normal-looking HTTP 200 page, and the old retry only
  changed the exit IP — which the wall does not care about, because it
  fingerprints the browser's TLS handshake. Each retry now switches the
  impersonated browser as well as the IP (Chrome 142, Firefox 144, iOS 18,
  then two generic profiles), waits properly between tries, and keeps one
  connection per exit so retries cost less.
- Every run now ends with a status message that says what actually happened.
  A run that was blocked says it was blocked; a run that could not reach
  Walmart says so; and "no products matched your search" is now only ever
  said after Walmart itself returned a result count of zero on a page we
  read. Runs used to finish with no message at all, which made a blocked run
  look identical to a search with no matches.
- A blocked run now stops early instead of retrying against a wall that is
  clearly up, so a bad moment on Walmart's side cannot run up your bill.
- The log now names every attempt: which browser profile, which exit, what
  came back and how many bytes it cost.

### 2026-07-13

- README: removed a stale "no minimum" claim in the pricing intro that contradicted the $0.001 actor-start fee already listed in the table below it.

### 2026-07-12

- Invalid input no longer fails the run. The run now finishes cleanly with a clear explanation in its status message, so a typo or an empty list is easy to spot and fix.
- List inputs now accept datasets piped straight from another scraper: entries
  that are objects are read through their usual key names (url/link,
  query/keyword/title, name/company and similar) instead of being rejected.

### 2026-07-11

- Billing: on paid runs every row is billed before it is written, and a run
  now stops visibly if billing fails instead of continuing unbilled.

### 2026-07-10

- Platform usage is now included in the price. What you see is the whole bill: no proxy fees, no compute line, no subscription.
- Walmart's bot wall is handled internally now; the proxy setting is gone from the input.
- Added a tiny $0.001 actor start fee that covers runs which return nothing. On any normal run it is noise next to the per-product price.

### 2026-07-09

- Initial public release on Apify Store.
- Scrape Walmart.com search results by keyword or from a pasted Walmart search URL.
- Clean product records: name, brand, price, was-price and savings, unit price, rating, review count, seller, availability, sponsored flag, image, product type, department, variant count and the product link.
- Reads Walmart's own `__NEXT_DATA__` page data island, so results match the site without a browser or hashed-class scraping.
- Walks result pages and dedupes by Walmart item ID; drops ad and takeover placeholder tiles so every row is a real product.
- Rotates the residential exit IP when Walmart's PerimeterX wall shows, then retries.
- US residential proxy by default. Pay per product returned, platform usage billed to your run, no subscription.
