# Changelog of YouTube Creator Email Finder — Contacts & Channel Stats (`devjoi/youtube-creator-emails`) Actor

- **URL**: https://apify.com/devjoi/youtube-creator-emails/changelog.md
- **Full Actor documentation**: https://apify.com/devjoi/youtube-creator-emails.md

## Changelog

All notable changes to this project are documented here.
Format based on [Keep a Changelog](https://keepachangelog.com/); versioning follows [Semantic Versioning](https://semver.org/).

### \[0.1.5] - 2026-10-11

#### Changed

- Store discoverability pass: the short description now states the pay-per-result price; README gains "When should you use this Actor?", "Why this Actor", a complete input example and an API invocation example, and no longer repeats the actor name as a top-level heading (the store renders it). Documentation only — no behavior changes.

### \[0.1.4] - 2026-10-08

#### Changed

- Client-facing documentation pass: validation described as the full set (format + mail-server/MX records + noise filtering); worldwide coverage made explicit (any country or language); schema titles aligned to the actor name; internal working tags removed from public artifacts. No behavior changes.

### \[0.1.3] - 2026-10-08

#### Changed

- Store-facing README (use cases, pricing, FAQ) and display texts: short description, custom SEO title/description and store categories set via the Apify API.

### \[0.1.0] - 2026-10-08

Initial release.

#### Added

- **Public-page extraction** (no login, no browser): channel About pages (`ytInitialData`) → description, subscriber count, total views, join date, country, canonical URL and external links (real targets resolved through YouTube's redirect links), with defensive parsing and fallbacks.
- **Search mode**: channel-filtered YouTube results for keyword queries, expanded into channel references (deduped, capped per query).
- **Email extraction**: from the channel description and (optionally) the channel's own linked website — homepage plus up to two contact/about pages, same-origin only; social platforms, shorteners and marketplaces are never crawled. De-obfuscation of `[at]`/`[dot]` styles and noise filtering (asset filenames, platform support addresses, noreply).
- **Email validation**: syntax checks plus MX-record lookups (`has_mx`, `mx_hosts`) with an in-memory cache. No email is ever sent; nothing is claimed beyond what is publicly visible.
- **Honest flag**: `email_hidden_behind_login` — the channel shows a business email gated behind sign-in; the address itself is never returned.
- **Monitoring mode**: `onlyNewEmails` (backed by an actor-specific named key-value store) outputs only emails not seen in previous runs.
- **Pay-per-event wiring**: charges the custom `email-found` event only for emails actually returned; channels without discoverable emails are free.
- **Test suite** (32 tests): unit tests for the embedded-JSON scanner, About/search parsers, email extraction/validation and MX cache; end-to-end pipeline tests against a stubbed HTTP layer with fixtures modeled on real page shapes; dataset-schema validation with Ajv (including negative cases); opt-in live integration test (`RUN_LIVE=1`).

#### Fixed

- **Storage safety**: the monitoring store uses an actor-specific name (`youtube-creator-emails-seen-state`) and its opening is fail-safe — if unavailable, runs continue without cross-run state (`stateStoreStatus` in `SUMMARY`) instead of crashing.
