Website Email Finder | Public Business Contacts
Pricing
from $2.50 / 1,000 website with contacts
Website Email Finder | Public Business Contacts
Find emails, phones and social profiles on company websites or a Google Maps lead list. One deduplicated row per site, with MX-checked emails. Results can contain personal data. Use them only with a lawful basis under the GDPR and similar laws.
Pricing
from $2.50 / 1,000 website with contacts
Rating
0.0
(0)
Developer
Atesen Software
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Legal notice: this Actor reads public pages and can return personal data, including email addresses and phone numbers. Use the results only when you have a lawful basis under the GDPR and similar laws. You are responsible for opt-outs, anti-spam rules and how you store the data.
A contact details scraper and email finder: give it a list of company websites (or a Google Maps Scraper dataset). For each website you get one clean row with:
- 📧 Emails: from mailto links, page text, obfuscated forms (
info [at] acme (dot) com), Cloudflare-protected addresses and structured data. Each email gets a type (role likeinfo@or personal likejan.novak@), an own-domain flag and an MX check (can the domain receive mail?). - 📞 Phone numbers in E.164 format (
+4930901820), validated with Google's libphonenumber for the site's country. Each number is marked as coming from a tel: link / structured data (high confidence) or from page text. - 🔗 Social profiles: LinkedIn, Facebook, Instagram, X/Twitter, YouTube, TikTok, Pinterest, Telegram, WhatsApp, Threads, GitHub. Share buttons and one-off links to other accounts (testimonials, embedded posts) are filtered out of the main columns.
- 🏢 Company data when the site publishes it: legal name, address, VAT ID (EU VAT numbers in imprints/footers), founding date, logo, country and language.
It crawls the home page plus the best contact, imprint (Impressum), about and legal pages, detected in 15+ languages (English, German, French, Spanish, Italian, Dutch, Portuguese, Polish, Czech, Turkish, Nordic languages and more). No browser, so it is fast and cheap.
Why this actor
| Website Email & Contact Finder | Typical "contact details scraper" | |
|---|---|---|
| Price | $3 per 1,000 websites with contacts. Websites with nothing found, errors and duplicates are free | Charged per page crawled (about $2 per 1,000 pages, and up to 20 pages per website by default), so you can pay about $0.04 per website even when nothing is found |
| Output | One merged row per website: all emails, phones and socials together | One row per crawled page; you merge the rows yourself or run a second "merge" actor |
| Phones | Validated E.164, with the source of each number (link/structured data vs text) | Raw strings plus a separate "uncertain phones" list with dates, IDs and prices mixed in |
| Email quality | MX check, role/personal type, own-domain flag, junk filters (image names, Sentry/Wix IDs, placeholders, invalid TLDs) | Every match on the page |
| Company data | Address, legal name, VAT ID, country, language | Not included |
| Duplicates | Same domain twice (e.g. branches from Google Maps) → crawled and charged once | Crawled again |
| Problems | Clear status rows: unreachable, blocked, parked_domain, invalid_url, social_profile, duplicate, no_contacts. The run never fails because of one bad website | Missing rows or failed requests in the log |
| Memory and speed | 512 MB default: about 40 websites in 10 seconds, no browser | 4 GB default, browser-based crawling |
How to use it
- Paste websites into Websites (domains are enough:
acme.com), or paste the dataset ID of a Google Maps Scraper run into Dataset IDs. - Click Start.
- Download the results as Excel, CSV or JSON, or open the Contacts view.
Example input
{"websites": ["apify.com", "stripe.com", "www.bosch.de", "https://www.acme-handwerk.de/kontakt"],"maxPagesPerSite": 6,"verifyEmailDomains": true,"onlySameDomainEmails": false}
Enrich Google Maps leads with emails and socials
Run Google Maps Scraper, copy the dataset ID of the run (Storage → Dataset ID), then:
{"datasetIds": ["aBcDeFgHiJkLmNoPq"],"maxPagesPerSite": 6}
Places without a website are skipped. Several branches with the same website are crawled once. The place name, place ID, address, phone and category are copied to each row under source, so you can join the results back.
Example output (one website)
{"type": "site","status": "ok","input": "acme-werkzeuge.de","domain": "acme-werkzeuge.de","url": "https://www.acme-werkzeuge.de/","companyName": "Acme Werkzeuge GmbH","description": "Werkzeuge und Maschinen für Handwerk und Industrie seit 1950.","country": "DE","language": "de","primaryEmail": "info@acme-werkzeuge.de","emails": ["info@acme-werkzeuge.de", "vertrieb@acme-werkzeuge.de", "m.schmidt@acme-werkzeuge.de"],"primaryPhone": "+4930901820","phones": ["+4930901820", "+493090182222"],"linkedin": "https://www.linkedin.com/company/acme-werkzeuge","facebook": "https://www.facebook.com/acmewerkzeuge","instagram": "https://www.instagram.com/acme.werkzeuge","twitter": null,"youtube": "https://www.youtube.com/@acmewerkzeuge","tiktok": null,"socials": { "linkedin": ["https://www.linkedin.com/company/acme-werkzeuge"], "facebook": ["https://www.facebook.com/acmewerkzeuge"] },"address": "Hauptstraße 1, 10115 Berlin, DE","vatIds": ["DE123456789"],"emailDetails": [{ "email": "info@acme-werkzeuge.de", "source": "mailto", "foundOn": "https://www.acme-werkzeuge.de/impressum", "type": "role", "sameDomain": true, "mxValid": true },{ "email": "m.schmidt@acme-werkzeuge.de", "source": "text", "foundOn": "https://www.acme-werkzeuge.de/kontakt", "type": "personal", "sameDomain": true, "mxValid": true }],"phoneDetails": [{ "phone": "+4930901820", "source": "link", "foundOn": "https://www.acme-werkzeuge.de/" },{ "phone": "+493090182222", "source": "text", "foundOn": "https://www.acme-werkzeuge.de/kontakt" }],"pagesScraped": 5,"scrapedUrls": ["https://www.acme-werkzeuge.de/", "https://www.acme-werkzeuge.de/impressum", "https://www.acme-werkzeuge.de/kontakt", "..."],"scrapedAt": "2026-10-20T01:30:00.000Z"}
Output fields
| Field | Description |
|---|---|
status | ok (contacts found, charged), no_contacts (free). Problem rows have type: "status": invalid_input, invalid_url, social_profile, duplicate, unreachable, blocked, failed, not_html, parked_domain, invalid_dataset, no_websites (all free) |
domain, url | Registered domain and the final home page URL after redirects |
companyName, description, country, language | From structured data, page meta tags and the domain |
primaryEmail, emails | Best email first: own domain, then role addresses, then the most reliable source |
primaryPhone, phones | E.164 numbers, high-confidence ones first |
linkedin, facebook, instagram, twitter, youtube, tiktok | The company's main profile on each network, when we are confident it belongs to the company |
socials | All profiles per network (up to 5) |
address, vatIds, organization | Company data from schema.org markup and imprint pages |
emailDetails | email, type (role/personal), sameDomain, mxValid, source (mailto, text, schema, cloudflare, html), foundOn |
phoneDetails | phone, source (link = tel:/structured data, text), foundOn |
source | The input record when the website came from a dataset (name, placeId, address, phone, category) |
The Run summary record (key-value store, RUN_SUMMARY) has the totals of the run.
Pricing
Pay per event:
- Website with contacts: $0.003 ($3 per 1,000 websites) on the Free and Bronze plans, $0.0027 on Silver, $0.0025 on Gold and higher. Charged once per website that returned at least one email, phone or social profile, no matter how many pages were crawled.
- Free: websites with no contacts, unreachable, blocked or parked websites, invalid URLs, social media URLs and duplicates.
- A tiny actor start fee set by Apify ($0.00005).
You can set a maximum cost per run in the run options; the actor stops cleanly when it is reached.
Tips
- Imprint pages (Germany, Austria, Switzerland) and legal notice pages (France, Italy, Spain) usually have the email, phone, address and VAT ID, and they are crawled first.
- Keep the default 512 MB memory: it crawls about 10 websites in parallel. 256 MB works but is much slower.
- Raise Max pages per website to 10–15 for big corporate sites; keep 3–6 for small businesses (faster, same price).
- Use Only emails on the company's own domain for cleaner B2B lists.
- Websites protected by aggressive bot challenges are reported as
blockedand not charged.
Is it legal?
The actor only reads publicly published business contact information from company websites (the information companies publish so customers can reach them), and it does not log in anywhere. If you process personal data (for example personal email addresses of employees), you are responsible for complying with GDPR and similar laws: have a legitimate interest, respect opt-outs and local anti-spam rules. Use onlySameDomainEmails and the type: "role" flag to work only with generic company addresses.
Related actors
- Google Maps Scraper → find businesses, then enrich them here with
datasetIds. - SIRENE French company data → official SIREN/SIRET, VAT and financial data for French companies.