Output fields are only ever added, never renamed or removed. Every item carries schemaVersion (since 1.1.0) and outputVersion (1).
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.
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.