# Changelog of Bulk URL Status & Redirect Chain Checker (`madpai/bulk-url-status-checker`) Actor

- **URL**: https://apify.com/madpai/bulk-url-status-checker/changelog.md
- **Full Actor documentation**: https://apify.com/madpai/bulk-url-status-checker.md

## Changelog

### 2026-11-02 (security update)

#### Security

- Connections are pinned to the addresses that passed the private-address check. Each host name is checked again when the connection opens, including redirect hops and robots.txt, so a name that switches to a private address after the first lookup (DNS rebinding) is never connected to. Private IP addresses written directly in a URL are refused too. TLS still verifies the host name.

#### Changed

- If a site's robots.txt host resolves to a private, loopback, link-local or reserved address, the item is now a free `blocked-private` (not `blocked-by-robots`), not a robots.txt result.

### 0.1.0 (unpublished local build)

#### Added

- Bulk URL check: final HTTP status, the full redirect chain (each hop permanent or temporary, with timing), redirect loops, final URL, likely soft-404 (heuristic), response time and content type for a list of URLs. No crawling.
- Input normalisation (bare domains get `https://`, `#fragments` dropped) and de-duplication; invalid entries get a free `invalid-url` item.
- `HEAD-then-GET` (default) or `GET` method, `maxRedirects`, `timeoutSecs` and `maxUrls`.
- Polite by default: robots.txt respected (RFC 9309), about 1 request per second per host, Crawl-delay and Retry-After honoured (up to 30 seconds), a host paused after three 429s in a row, private addresses never requested.
- `OUTPUT_SUMMARY` with per-category counts and charged events.

#### Fixed (before first publish)

- bulk-url-status-checker-1: the host name is resolved before robots.txt is fetched (as in AI-Readiness Audit 0.1.3). A host that doesn't exist (including a redirect target) is now `dns-error` (charged, as documented), not `blocked-by-robots`. Temporary DNS failures (EAI_AGAIN) stay free `timeout`. The lookup is cached and shared with the private-address check.

#### Pricing

- Pay per event: `url-checked` per unique URL with a definitive result, $0.0008 per event. Timeouts, rate-limited, blocked-by-site, robots-blocked, private-address and invalid URLs are free.
