# Changelog of Company Enrichment from Website: Emails, Phones & Tech (`cleanyield/company-enrichment-from-website`) Actor

- **URL**: https://apify.com/cleanyield/company-enrichment-from-website/changelog.md
- **Full Actor documentation**: https://apify.com/cleanyield/company-enrichment-from-website.md

## Changelog

Output fields are only ever **added**, never renamed or removed. Every item carries `schemaVersion` (since 1.1.0) and `outputVersion` (1).

### 1.1.0 — 2026-11-04

More emails and phones per company, with the same speed and no junk.

Measured on the fixed test set (64 readable company websites, `reliability/contacts-baseline.json` → `reliability/contacts-after.json`):

| | 1.0.0 | 1.1.0 |
|---|---|---|
| Companies with at least one email (generic or role) | 51.6% | **85.9%** |
| Companies with at least one phone | 39.1% | **57.8%** |
| Companies with an email or a phone | 67.2% | **90.6%** |
| Emails per company (average, personal excluded) | 0.72 | **1.97** |
| Phones per company (average) | 0.97 | **1.22** |
| Time per company (median / p90 / max) | 1.6 s / 3.3 s / 4.7 s | 1.8 s / 3.1 s / 5.9 s |

Added

- Reads more of the pages that carry contact data, by same-site links and common paths in English, Spanish, Portuguese, German, French and Italian: contact (two if there are two), legal notice / Impressum / aviso legal / mentions légales / note legali, privacy policy, about, team and terms. Default `maxPagesPerDomain` is now 10 (was 6), pages are read in order of how likely they are to have contacts, and the price per company does not change.
- Footer of every page read, microdata (`itemprop="telephone"/"email"`), meta tags (`og:email`, `og:phone_number`, `business:contact_data:*`) and nested ld+json (`contactPoint`, `department`, `location`, `subOrganization`...).
- Obfuscated emails in more languages: `[at]`, `(arroba)`, `(ät)`, `arobase`, `chiocciola`, `[dot]`, `punto`, `ponto`, `punkt`, `point`; `data-user`/`data-domain` attributes; emails built in simple inline JavaScript (`'info' + '@' + 'acme.com'`, `\x40`), without running JavaScript.
- WhatsApp numbers written in text ("WhatsApp: +54 9 11 ...") are marked `isWhatsApp: true`; more WhatsApp link formats.
- Phones in local formats using the site's country (domain, ld+json, phone prefixes) or, as a last resort, its language.
- New fields: `primaryEmail`, `primaryPhone`, `contactPageUrl`, `schemaVersion`, `socialProfiles.pinterest/threads/telegram/discord/reddit`, `pro`, `insight`.
- **Pro mode** (`proMode`, extra event `pro-result`): buying-intent score 0–100 with its signals, estimated company size, ICP fit score (`idealCustomer`), "why now" line, trend since you started monitoring (own history, up to 90 points per company) and a one-sentence AI insight.
- Run dashboard (HTML, key-value store record `DASHBOARD`, link in `SUMMARY`), free on every run.
- Saved lists (`savedListName`, `saveList`).
- Drop-in compatibility: accepts `startUrls` / `urls` and `maxRequestsPerStartUrl` like other contact scrapers, and `outputFormat: "leader-compatible"` returns their field names.
- Cost estimate in the log before the run starts.

Improved (less junk)

- Emails: real top-level domain required (official IANA list), text glued to the address repaired (`info@acme.comTel` → `info@acme.com`), demo/staging subdomains and placeholders in six languages dropped (`max.mustermann@beispiel.de`, `tu@ejemplo.com`...), third-party inboxes seen only on legal pages dropped (DPO services, regulators, PR agencies), same brand on another TLD counts as the company's (`totvs.com.br` for `totvs.com`).
- Email types: department inboxes such as `imprint@`, `privacy@`, `accessibility@`, `lectores@`, `ouvidoria@`, `speakers@` are now `role` (they used to be hidden as `personal`); people's names are still `personal` and omitted by default.
- Phones: tax and company IDs (CUIT, CNPJ, CPF, VAT, HRB...), fax numbers, arbitration/regulator/authority numbers in legal texts and the California consumer-affairs numbers copied into many privacy policies are dropped; the site footer is the last `<footer>`, so product cards are not read as footers; scripts cut by the page size limit are not read as text.
- Monitor mode: new social networks do not trigger "changed" alerts on the first run after the update.
- A request that never answers is cut at its time limit, so the per-domain limit always holds.

### 1.0.0 — 2026-11-04

First version: one row per company with generic/role emails (personal omitted by default), E.164 phones, social profiles, address, ~170 technologies, hiring (careers page, ATS, open roles from public Greenhouse/Lever/Ashby APIs), latest posts, language and country; monitor mode with alerts (Slack/webhook); only valid results charged; failures listed in `FAILED_DOMAINS`.
