# Changelog of B2B Lead Scraper - Emails, Phones & Contacts (`logiover/b2b-lead-scraper`) Actor

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

## Changelog

### 2026-09-23

- Fleet-wide quality audit. Verified end to end against live data and re-checked the input schema, the output columns and the run configuration.
- Output verified on a live run: 14 columns returned, 79.8% of cells populated.
- Run reliability reviewed: 93.9% of public runs succeeded in the last 30 days.
- Input schema, output schema and pricing configuration reviewed.
- Noted that 2 column(s) came back empty in this sample (`emailPattern`, `persons`); these are under review.

### 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

- Replaced country-wide, 150-second mirror waits with bounded city queries and 15-second failover across the official FOSSGIS Overpass service aliases.
- An all-endpoint OSM outage now fails explicitly instead of returning a misleading successful empty dataset.
- Verified Germany dentists end-to-end: 75 OSM candidates, 25 unique lead rows, 40 successful pages, with useful email/phone/address coverage; aligned the nested dataset contract and pinned audited dependencies.
- 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.
- Fixed the run Output link from `{{links.apiDefaultDatasetUrl}}` to `{{links.apiDefaultDatasetUrl}}/items` so the results table opens the dataset items endpoint.
- Replaced the unbounded country-wide Overpass scan and 150-second third-party mirror waits with small major-city query plans, 15-second endpoint budgets, and failover across official FOSSGIS service aliases.
- Made total OSM upstream failure explicit rather than succeeding empty; locally reproduced the former Germany dentists failure as 25 unique, useful leads from a 75-element Berlin response.
- Replaced flat pseudo-fields with the real nested typed 14-field dataset contract, corrected availability/volume/MX claims, and pinned a zero-vulnerability production lockfile.

### 2026-07-23

- Reliability fix: added `overBudget()` guard (matches fleet recipe) at the top of both `requestHandler` and `failedRequestHandler` in the discovery crawler and the site crawler. When the 3.5-minute wall-clock budget is exceeded, the autoscaled pool is aborted and the handler returns early, allowing the run to exit SUCCEEDED with partial data instead of hitting the 300 s platform timeout.
- Extracted explicit `RUN_STARTED` / `TIME_BUDGET_MS` / `overBudget()` constants to make budget logic auditable at a glance (replacing the implicit `RUN_DEADLINE` constant).

### 2026-07-18

- Maintenance & reliability pass — re-verified end-to-end against live data via the Apify API; confirmed the Actor completes successfully and returns non-empty, well-formed results within the 5-minute quality window on its default input.
- Refreshed build so the latest version is current; no change to inputs, output fields or scraping logic.

### 2026-07-12

- 🎛️ **Dropdown Sector & Country** — Sector and Country are now easy select menus covering the highest-yield OpenStreetMap business types and every supported country. Custom niches are still fully supported via "Extra search queries" / "Extra start URLs".
- 🟢 **Empty-input default** — running with no input still returns a broad default lead set (marketing agencies in the United Kingdom), bounded by Max leads.
- 🔢 **Schema hardening** — dataset field types are now null-safe (union types) so no lead row is ever dropped by strict validation. OSM/Overpass discovery engine, city fan-out, run-time budget and email verification are unchanged.

### 2026-06-28

- Fixed crash when running with empty input: sector/country now fall back to default values ("marketing agencies" / "United Kingdom") instead of throwing.
- Added default values to sector and country fields in input schema to match their prefills.

### 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.
