# Changelog of Lazada Scraper - Scrape Products & Prices (`logiover/lazada-scraper`) Actor

- **URL**: https://apify.com/logiover/lazada-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/logiover/lazada-scraper.md

## Changelog

### 2026-09-01

- Fleet-wide health check. Verified against this Actor's real run history: 30-day success rate, output row counts, per-field fill rates, and peak memory against the configured memory limit.
- Reviewed for the failure patterns that have cost this fleet runs — unguarded proxy setup, retry loops that can outlast the run's own time budget, and full-page HTML parsing that can exhaust a small container.
- No change to input, output fields or scraping logic.

### 2026-08-11

- Maintenance release: refreshed the build and dependencies.
- Re-verified live execution, non-empty structured output and dataset field/type integrity.
- Reviewed reliability (retries, pagination) and output quality as part of a full-fleet QA pass.

### 2026-08-01

- Completed the August 2026 full health check: verified empty/programmatic default, Console UI default, and two source-informed alternative inputs on Apify.
- Confirmed successful live execution, non-empty structured output, dataset-field/type integrity, and logical sample quality within the 5-minute quality window.

### 2026-07-18

- **No more fake "success" on a blocked run** — Lazada's baxia/punish anti-bot currently walls Apify's residential IPs at origin. Previously the run could finish "successfully" with **0 products** (a silent empty dataset). It now **fails loudly** with a clear message when every request is blocked, so an empty result is never mistaken for "no matches found".
- **Added a mobile-site fallback** — when the desktop catalog endpoint is walled, the scraper now makes a bounded second attempt against the Lazada m-site catalog on the same fresh IP and parses its embedded product data if present. When any live page is retrieved, results are returned as before.
- **Honest empty vs. blocked** — if live pages *are* fetched but genuinely contain no matches for your input, the run still succeeds and logs a hint to broaden the search (unchanged behavior); only a true origin-block now fails.
- Output field keys, inputs and pricing unchanged.

### 2026-07-12

- **Runs with zero input** — leaving everything blank now browses a spread of popular Lazada categories (bounded by "Max results", default 100) instead of erroring. No more mandatory search term.
- **New Category dropdown** — quick-pick a popular category (Mobiles, Fashion, Beauty, Home, Gaming, …) instead of typing a keyword; still fully optional.
- **New Sort dropdown** — order results by Popularity (default) or Price low→high / high→low.
- **Nothing is required** — every filter is optional; search terms, category URLs and category all default to empty.
- **Graceful & bounded** — the crawl is wrapped so errors log instead of failing the run, keeps its ~100s time budget, and stops at "Max results".
- **Schema polish** — added per-field titles/descriptions to the dataset schema (nullable-safe) and kept numeric columns (price, rating, reviews, sold) rendering as numbers. Output field keys unchanged.

### 2026-06-28

- Health check passed — actor verified working end-to-end on Apify platform.
- Changelog refreshed for Store quality compliance.

### 2026-06-20

- Maintenance & reliability pass: re-verified end-to-end against live data and confirmed the Actor completes successfully within the 5-minute quality window on the default input.
- Refreshed the prefilled example input and tuned run defaults for faster, lower-cost runs.
