# Changelog of Wildberries.ru Product Scraper \[Just 💰$0.23] (`blackfalcondata/wildberries-ru-scraper`) Actor

- **URL**: https://apify.com/blackfalcondata/wildberries-ru-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/blackfalcondata/wildberries-ru-scraper.md

## Changelog

All notable changes to this Actor are documented here.

### \[Unreleased]

#### Fixed

- Incremental and monitor runs confirm they still own their saved state right before every delivery and every save, and read the saved state only after taking ownership, so two overlapping runs no longer deliver the same products twice.
- Products are no longer marked `EXPIRED` when the source repeats pages, serves fewer results than it reports, or a category or brand target is not found; monitor runs no longer report products as missing after an incomplete scan.
- When the number of results grows while a search is being read, the run keeps reading the extra pages (within your page limits) instead of stopping early; if the promised pages never arrive, no products are marked `EXPIRED` and monitor runs keep their previous snapshot instead of reporting products as missing.
- Monitor changes held back by `maxResults` or your spending limit are delivered on the next run instead of being lost.
- Reviews mode stops exactly at what your spending limit pays for, including inside a product with many reviews; undelivered reviews are offered again next run.
- Direct product URLs for the same product in different regions now return one result per region.
- Every result row now carries the same set of fields (`firstSeenAt`, `lastSeenAt`, `expiredAt`, resale fields, `status`, `error`), with `null` where a value does not apply, and all text inputs open as a standard text field in the Apify Console.
- Incremental runs now release their lock on every exit (successful, empty or failed), renew it on long runs, and stop delivering if another run takes the state over.
- `maxResults` in incremental mode now counts delivered rows, not scanned ones: later runs continue past products you already received instead of re-reading the same first page.
- `emitExpired` now delivers `EXPIRED` rows for products that left the search (with `firstSeenAt`, `lastSeenAt`, `expiredAt`), including after an empty completed search; nothing is expired after a partial or failed scan.
- Incremental state is now separate per mode and per review option, so a products run no longer hides reviews or sellers results (default products runs keep their existing state).
- Reviews mode in incremental runs now tracks individual reviews (new and edited reviews are delivered), keeps failed review reads retryable, and fails clearly instead of ending as a green empty run when no review could be read.
- Reviews and questions are now fetched only for the products a run delivers, and products whose requested reviews or questions could not be read are reported and offered again next run.
- Search paging respects the 100-page limit of the source, stops at the last page, and reports incomplete coverage when the source holds more than it serves.
- `skipReposts` now works: products are recognised by their stable product attributes, so a re-listing under a new article number is recognised.
- Searching several regions now returns each region's own prices and availability, with a new `deliveryRegion` field. Note: for regions other than the default, product ids (`listingId`) now include the region, so incremental state for those regions starts fresh once.
- Run logs no longer expose technical access details; failures show a short code and a plain explanation.

#### Added

- `minRating` in reviews mode now filters by the review's own star rating.
- `flagUnderpriced`, `referencePrice` and `underpriceThresholdPct`: product rows get `isUnderpriced` and `underpricedDeviationPct`, niche rows get underpriced counts and the threshold price.
- Sellers mode: `maxSellersPerSearch` and `maxProductsPerSeller`; every seller row now carries statistics from a sample of the seller's own catalogue (price range, average and median price, brand count, average rating, total reviews, share in stock).
- Opt-in reviews, questions and seller rows: `mode` (products / reviews / sellers), `scrapeReviews`, `maxReviewsPerProduct`, `reviewsWithTextOnly`, `reviewsWithPhotoOnly`, `maxQuestionsPerProduct`. Off by default; default runs are unchanged.
- New `niche` mode: one market summary row per keyword or category (products analysed, seller and brand counts, seller concentration HHI, top seller share, price min/max/average/median, in-stock share, total inventory, top sellers and brands). Controlled by `maxProductsPerNiche` and `nicheTopN`.
- New `monitor` mode: tracks each product's search position, price and stock between runs (`searchPosition`, `previousPosition`, `positionChange`, `priceChange`, `stockChange`, `isNew`, `isMissing`, `rankStatus`). Inputs: `monitorStateName`, `monitorOutput` (snapshot / snapshot with changes / changes only), `maxRankPages`, `priceChangeThresholdPct`, `targetNmIds` (watched products that drop off are still reported).
- New `resale` mode: Wildberries Resale (second-hand) listings, with `resaleConditions` (new / perfect / good) and the fields `resaleCondition`, `logisticsCost`, `originProductId`, `originProductUrl`.
- Start URLs may now be search, category, brand, seller or product pages (recognised automatically); new `productIds` and `sellerIds` inputs read products and sellers directly (an unknown seller id gives one `not_found` row and the run still succeeds). An unknown `mode` is now an input error instead of silently running products.
- New filters, all off by default: `sort`, `lowPrice`, `topPrice`, `discount`, `inStockOnly`, `minRating`, `brand` for products, and `maxRating`, `dateFrom`, `dateTo` for reviews.

### \[0.1.0] — 2026-11-06

Initial release.

#### Added

- Scrape products from wildberries.ru.
