# Changelog of Broken Link Checker - Find Dead 404 Links (`logiover/broken-link-checker`) Actor

- **URL**: https://apify.com/logiover/broken-link-checker/changelog.md
- **Full Actor documentation**: https://apify.com/logiover/broken-link-checker.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-23

- Reliability fix: added active `overBudget()` abort — when the 3.5-minute wall-clock budget is exceeded the crawler now calls `crl.autoscaledPool.abort()` in both `requestHandler` and `failedRequestHandler`, exiting SUCCEEDED with partial data instead of running into the 300 s platform timeout.
- Reduced `requestHandlerTimeoutSecs` from 90 s to 45 s so a stalled page handler is cut short before it can cascade into retry storms that exhaust the run budget.
- Changed the enqueue guard to use `overBudget()` (consistent with fleet recipe) instead of a raw `Date.now() - START_TS` comparison.

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

- **Runs with empty input now.** `startUrls` is no longer required — with `{}` the actor runs a demo crawl on a stable public sample site instead of exiting.
- **Checks external links by default** so an out-of-the-box run returns a fuller audit (internal + external).
- **Bounded default:** `maxPagesToCrawl` now defaults to 20 (fast, cheap default run); set 0 to crawl the whole site.
- **Time budget:** stops discovering new pages after ~4 minutes; links already queued still finish and are saved, and the run exits successfully.
- Added per-field titles/descriptions to the dataset schema and set numeric/boolean display formats (status code renders as a number, ok as boolean). Output keys unchanged; `statusCode` stays a real number and `ok` a real boolean.

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