# Changelog of Website Contact Extractor: Emails, Phones & Social Links (`humble-echidna/website-contact-extractor`) Actor

- **URL**: https://apify.com/humble-echidna/website-contact-extractor/changelog.md
- **Full Actor documentation**: https://apify.com/humble-echidna/website-contact-extractor.md

## Changelog

Versions follow MAJOR.MINOR.PATCH (`src/version.py`); Apify shows MAJOR.MINOR from `.actor/actor.json`.
Every run logs its version and records it in the `RUN_STATS` key-value record.

### 0.1.0 (2026-11-04)

First release.

- One row per website: emails, E.164 phone numbers (libphonenumber) with format, type, country and source, ten social
  networks, contact page, contact form, address from structured data; optional one row per email.
- Websites from `urls`, or a dataset and field (`datasetId`, `datasetUrlField`, `keepFields`). A Google Maps item's
  `countryCode` sets the country for its local numbers.
- Reads the start page, then the same site's contact, legal-notice, about, team and privacy pages, best first, up to
  `maxPagesPerSite`; tries common addresses when the start page links to none. Language copies of a page count once.
- Charged per page read (`page-scanned`), with rows free. Failed, missing, blocked and disallowed pages aren't charged.
  The maximum cost per run limits the pages fetched, and `maxResults` the websites.
- Limited permissions: the dataset is read through the resource-picker field. An integration has to set it to
  `{{resource.defaultDatasetId}}`; a dataset id only in `payload` gets a 403 (runs jTtW6z2bwLhur78Qi and
  A8YcasE2IRRHJm5Q1, 2026-11-04), and the run ends with no charge and a message saying what to set.
- Failure isolation: a failing website only affects its own row.

Source check (checklist section 6): the actor has no fixed source. It reads the public pages of websites the user names,
with no login, through the shared guarded client: honest User-Agent, robots.txt and Crawl-delay honoured, no proxies
(checklist 2b), and bot checks reported, never worked around. Terms differ per website, so the README's legal section
leaves that check, and the data-protection duties for what comes back, with the user. Same model as page-to-markdown,
seo-audit and tech-stack-detector.
