v1.6 — Stealth-plugin upgrade: added playwright-extra + puppeteer-extra-plugin-stealth to defeat Zillow's 'press & hold' captcha that vanilla Playwright was triggering. Bumped maxRequestRetries 8→15, navigationTimeoutSecs 60→90, requestHandlerTimeoutSecs 90→120 since residential IPs have variable latency. Added --disable-blink-features=AutomationControlled launch arg.
v1.5 — Anti-bot rebuild: switched from CheerioCrawler (HTTP-only, was getting 403'd by Zillow's TLS fingerprint check) to PlaywrightCrawler with browser fingerprints. Added errorHandler that retires sessions on 403/429, captcha detection, slowMo 150ms for human-like pacing, and tighter session rotation (maxUsageCount: 3, maxErrorScore: 1).
v1.4 — Wired output schema and PPE billing (property-scraped @ $0.004/listing). Optimized title, description, and SEO metadata.
v1.3 — Fixed double-prefixed listing URLs.
v1.2 — Search mode now pushes data directly from search result cards (bypasses Zillow soft-block on detail pages). maxRequestRetries raised to 20 with single-use sessions.
v1.1 — Fixed dataset schema validation.
v1.0 — Initial release.
v1.7 (2026-05-08) — Anti-bot: added homepage warmup hook before navigating to listing URL. Browser context first visits zillow.com to acquire valid Cloudflare cookies (__cf_bm, _abck), simulates light human interaction, then proceeds. Combined with stealth plugin + fingerprints + 20 retries, this gives the rotation more surface area to find a clean IP+fingerprint combination. Bumped maxRequestRetries 15→20, requestHandlerTimeoutSecs 120→180, slowMo 100→120ms, sessionPool 30→40.
v1.8 (2026-05-10) — Block-soft-success pattern: when Zillow's Cloudflare blocks all retries (TLS-level block, unfixable without Camoufox/3rd-party), run now exits SUCCEEDED with a single _blocked:true dataset record explaining the block. Distinguishes external-block (not our fault) from code-bug (our fault) in the success-rate metric. Consumer/agent reads _blocked flag to detect the block clearly.