Website Email Extractor & Contact Finder: Email, Phone, Social
Pricing
from $1.60 / 1,000 website with contacts
Website Email Extractor & Contact Finder: Email, Phone, Social
Enrich domains with emails (free MX/syntax validity check), phones, LinkedIn/X/Facebook/Instagram, company name, description, address and tech stack. One deduplicated row per company. $2 per 1,000 sites with contacts; empty sites free.
Pricing
from $1.60 / 1,000 website with contacts
Rating
0.0
(0)
Developer
DataDesk
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 hours ago
Last modified
Categories
Share
Website Email Extractor & Contact Finder: Emails, Phones, Social Links (+ Company Data)
Enrich a list of domains with contact data. Paste company domains and get one clean, deduplicated row per company: emails (each with a free validity check), phone numbers, LinkedIn, X/Twitter, Facebook, Instagram, YouTube, TikTok, GitHub and WhatsApp, plus company name, description, address and tech hints (CMS, e-commerce, CRM, analytics, chat). Good for B2B lead generation, CRM enrichment, sales prospecting and AI agents.
Email finder and extractor from websites · extraer correos y teléfonos de sitios web · extrair e-mails e telefones de sites.
Quick start: paste domains, click Run (all fields optional)
{"websites": ["stripe.com", "https://www.python.org", "basecamp.com"],"maxPagesPerWebsite": 6,"validateEmails": true}
With an empty input it enriches 5 sample domains in a few seconds.
Output example (real run, 2026-10-21, calendly.com, shortened)
{"domain": "calendly.com","companyName": "Calendly","companyDescription": "Calendly connects and simplifies all of the work around meetings, from scheduling, payments, and meeting prep to notetaking, contact management, and follow-up.","primaryEmail": "andrija.djuric@calendly.com","emails": ["andrija.djuric@calendly.com","callie@calendly.com","jennifer.garcia@calendly.com","thomas.nguyen@calendly.com"],"emailChecks": [{"email": "andrija.djuric@calendly.com","status": "deliverable_domain","syntaxValid": true,"domainHasMx": true,"mxHost": "aspmx.l.google.com","isRoleBased": false,"isDisposable": false,"matchesWebsiteDomain": true,"isFreeProvider": false},"... one entry per email"],"phones": [],"linkedin": ["https://www.linkedin.com/company/calendly","https://www.linkedin.com/company/calendly/life/lifeatcalendly"],"twitter": ["https://x.com/calendly"],"facebook": ["https://www.facebook.com/Calendly"],"instagram": ["https://www.instagram.com/calendly"],"youtube": ["https://www.youtube.com/c/Calendly"],"techHints": ["Cloudflare","Google Tag Manager"],"language": "en","pagesCount": 6}
What does it extract?
| Field | Description |
|---|---|
companyName, companyDescription, address, logo, language, foundingDate, employeesHint | From schema.org Organization data, Open Graph and meta tags |
emails, primaryEmail | Company-domain emails first. The primary email prefers a valid contact inbox (info@, contact@, hello@, sales@). No-reply addresses are excluded |
emailChecks | Per email: status (deliverable_domain = domain has MX servers, no_mx_a_record_only), mxHost, isRoleBased, isDisposable, isFreeProvider, matchesWebsiteDomain |
phones, primaryPhone | Normalized to digits (E.164 style when the site gives the international prefix) |
linkedin, twitter, facebook, instagram, youtube, tiktok, github, whatsapp | Profile URLs (share buttons ignored) |
techHints | e.g. WordPress, Shopify, HubSpot, Intercom, Google Analytics, Stripe, Next.js, Cloudflare (about 45 signatures) |
pagesVisited, pagesCount, error | Audit trail |
The email check is a signal, not a guarantee: it confirms the address is well formed and that its domain accepts mail. It does not open an SMTP connection to the mailbox, because that is unreliable and gets IPs blocked.
Honest, simple pricing
- $2.00 per 1,000 websites with contacts ($0.002 per website), whatever the number of pages, emails or socials.
- Websites where nothing is found are free. Dead domains, blocked sites, timeouts and duplicates cost $0.
- No start fee, no per-page fee, no per-email fee, no proxy or browser surcharges. 10,000 enriched websites cost $20, and you know the maximum before you run.
Built to fix what users complain about elsewhere
| Common complaint about other contact scrapers | What this Actor does |
|---|---|
| "Says $2 per 1,000 but charged me $71" / "$20 per 1,000 links, not $2" | One flat event per website with contacts. No per-page, proxy or browser events. |
| "It just keeps running" / "crawling takes much longer" | Page cap per site (default 6) and a per-site time limit (default 60 s). |
| "A single website crawl yielded 1,800 results" / messy output | Exactly one row per company with flat fields and deduplicated lists. |
| "Duplicate originalStartUrl" / paying twice | Inputs are deduplicated by domain (www/http/https), and sites that redirect to the same domain are only charged once. |
| "I can't get company phone numbers" | Phones from tel: links, page text and schema.org structured data. |
| Emails of unknown quality | Free syntax + MX/DNS check for every email, role-based/disposable/free-provider flags. Emails on non-existent domains are removed. |
Ready-made presets
| Preset | Input |
|---|---|
| SaaS lead enrichment (default depth, email validation on) | {"websites": ["hubspot.com", "intercom.com", "calendly.com"], "maxPagesPerWebsite": 6, "validateEmails": true} |
| Fast scan (homepage + 1 page, no email check) | {"websites": [...], "maxPagesPerWebsite": 2, "validateEmails": false} |
| Deep crawl with audit rows (free rows for sites with nothing found) | {"websites": [...], "maxPagesPerWebsite": 15, "includeWebsitesWithoutContacts": true} |
Workflow: domain → company + contacts (with Company Data Enrichment)
Website Contact Finder and Company Data Enrichment are built to be used together on the same list of domains. Join their outputs on domain:
| Step | Actor | Gives you | Price |
|---|---|---|---|
| 1 | Company Data Enrichment | Who the company is: industry, HQ, employees, revenue, CEO, legal entity (LEI), SEC data | $3 / 1,000 companies found |
| 2 | Website Contact Finder | How to reach them: emails with MX check, phones, social profiles, tech stack | $2 / 1,000 sites with contacts |
Real output for hubspot.com from both Actors (runs on 2026-10-21, shortened):
Contacts (Website Contact Finder):
{"domain": "hubspot.com","companyName": "HubSpot","primaryEmail": null,"primaryPhone": "+16178125820","phonesTotal": 58,"linkedin": ["https://www.linkedin.com/company/hubspot","... 17 more (company + people pages)"],"twitter": ["https://x.com/HubSpot","..."],"facebook": ["https://www.facebook.com/hubspot"],"techHints": ["Cloudflare","Google Analytics","HubSpot"]}
Company (Company Data Enrichment):
{"name": "HubSpot","industries": ["software industry","software as a service","..."],"foundedDate": "2006-01-01","headquarters": ["Cambridge"],"employees": 8246,"revenue": 2630000000,"revenueCurrency": "United States dollar","ceo": ["Yamini Rangan"],"tickers": ["HUBS"],"registry": {"lei": "529900BLNVEW0MVKJB37","legalName": "HUBSPOT, INC."},"sec": {"cik": "0001404655","sicDescription": "Services-Prepackaged Software"}}
No-code: run both on the same domain list (or chain them with an Apify integration / webhook on "run succeeded"), export both datasets and merge on domain.
API (Python):
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")domains = ["hubspot.com", "calendly.com", "stripe.com"]companies = client.actor("datadesk-io/company-data-enrichment").call(run_input={"companies": domains})contacts = client.actor("datadesk-io/website-contact-finder").call(run_input={"websites": domains})by_domain = {r["domain"]: r for r in client.dataset(contacts["defaultDatasetId"]).iterate_items()}for c in client.dataset(companies["defaultDatasetId"]).iterate_items():lead = {**c, "contacts": by_domain.get(c.get("domain"))}print(lead["name"], lead.get("employees"), (lead["contacts"] or {}).get("primaryEmail"))
AI agents (MCP): load both tools in one MCP server:
https://mcp.apify.com/?tools=datadesk-io/company-data-enrichment,datadesk-io/website-contact-finder
Then ask, for example: "For hubspot.com, calendly.com and stripe.com, get industry, employee count and CEO, then the best contact email (deliverable domains only) and LinkedIn page, and give me one table." The agent calls Company Data Enrichment with {"companies": [...]} and Website Contact Finder with {"websites": [...]}, then joins the results on domain. Use maxCompanies / maxWebsites to cap the cost of each call.
How it works
For each domain it loads the homepage and then the most relevant pages on the same site: contact, about, imprint/Impressum, team, support, legal (English, Spanish, Portuguese and German). It uses fast HTTP with no browser, so 1,000 domains take minutes.
Limits
- Sites that show contacts only through JavaScript, or that block bots (Cloudflare challenges), may return fewer contacts. They are free when nothing is found.
- It only collects data that the company publishes on its own website. No guessing of email patterns and no third-party databases.
Use with AI agents (MCP)
This Actor works as a tool for AI agents through the Apify MCP server. Add it to Claude (Desktop/Code), ChatGPT, Cursor, VS Code or any MCP client:
https://mcp.apify.com/?tools=datadesk-io/website-contact-finder
Sign in with your Apify account (OAuth) or pass Authorization: Bearer <APIFY_TOKEN>. Local stdio config:
{"mcpServers": {"leads": {"command": "npx", "args": ["-y", "@apify/actors-mcp-server", "--tools", "datadesk-io/website-contact-finder"], "env": {"APIFY_TOKEN": "<token>"}}}}
The agent sees the input schema, runs the Actor and reads the dataset. Every input is optional and every output field is documented. Tip: set maxWebsites to cap the cost of a single tool call.
Example prompt:
Enrich basecamp.com, notion.so and linear.app: give me the best contact email (only deliverable domains), phone, LinkedIn page and the tech they use.
Plain REST: POST https://api.apify.com/v2/acts/datadesk-io~website-contact-finder/run-sync-get-dataset-items?token=... with the JSON input as the body.
FAQ
Is this legal? It collects contact details that companies publish on their own websites. You are responsible for using personal data (for example named employee emails) in line with the GDPR, CAN-SPAM and other rules that apply to you. Make, Zapier, n8n? Yes, through the Apify integrations and API. Missing a field or a site that fails? Open an issue in the Issues tab.