Website Contact Extractor: Emails, Phones & Socials avatar

Website Contact Extractor: Emails, Phones & Socials

Pricing

from $3.00 / 1,000 website profileds

Go to Apify Store
Website Contact Extractor: Emails, Phones & Socials

Website Contact Extractor: Emails, Phones & Socials

Turn any list of websites into verified contact profiles: emails (MX-checked, role vs personal), phone numbers validated to E.164, WhatsApp, social profiles, address, VAT ID and contact page. Reads homepage + contact/imprint pages. $3 per 1,000 sites.

Pricing

from $3.00 / 1,000 website profileds

Rating

0.0

(0)

Developer

Dodi Abak

Dodi Abak

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Turn a list of websites into clean, verified contact profiles: one row per company. For every domain the Actor reads the homepage plus the pages that matter (contact, Impressum/imprint, about, team, legal) and returns:

  • 📧 Emails, MX-verified and classified as role (info@, sales@), personal (first.last@) or generic, with on-domain / free-provider / disposable flags. Cloudflare-protected and [at]/[dot]-obfuscated addresses are decoded.
  • 📞 Phone numbers validated with Google's libphonenumber and formatted to E.164 (+4971140040990), with type (mobile, fixed line, toll-free), country, and labels for fax and WhatsApp.
  • 🔗 Social profiles: LinkedIn, X/Twitter, Facebook, Instagram, YouTube, TikTok, GitHub, Pinterest, Threads, Telegram, WhatsApp, Discord, Crunchbase. Share buttons and junk links are skipped.
  • 🏢 Company data from schema.org JSON-LD: name, legal name, postal address, geo coordinates, opening hours, VAT ID, founding date, logo.
  • 🧭 The contact page URL, pages with a contact form, language and country.

$3 per 1,000 websites ($0.003 per profiled site). Unreachable or blocked sites are free. No browser and no proxies needed, so runs are fast (about 10 websites in parallel, 2–4 seconds each) and cheap.

Why this one?

This ActorTypical contact scrapers
Phone numbersValidated + E.164 + type, fax/WhatsApp labelled, dates/order numbers rejectedRaw regex matches, many false positives
EmailsMX-checked, role/personal split, obfuscation + Cloudflare decodingRaw list, includes image@2x.png junk
OutputOne clean row per company, with primaryEmail and primaryPhone picked for youOne row per page
PriceFlat $0.003 per website$0.002+ per page (6 pages ≈ $0.012)
EtiquetteRespects robots.txt for sub-pages, reads at most N pagesVaries

Use cases

  • Lead generation and enrichment: you have domains from Google Maps, a CRM export, a directory or a trade-show list, and you need emails, phones and LinkedIn pages.
  • CRM hygiene: refresh old records, catch dead email domains, standardize phone formats.
  • AI sales agents: one MCP call returns a structured profile the agent can act on.
  • Market research: map companies' social presence and locations.

How to use it

  1. Paste websites into Websites, one per line: acme.com, https://www.acme.de/, or an email such as jane@acme.com (its domain is used).
  2. Optional: set Default country for local phone numbers (otherwise it's detected from the address, country domain or page language), or turn off personal emails.
  3. Click Start. Use the Overview or Leads (flat) view, or export CSV, Excel or JSON, or use the API.

Input example

{
"websites": ["apify.com", "https://www.bosch.de", "stripe.com", "https://www.ikea.com/sa/en/"],
"maxPagesPerSite": 6,
"checkMx": true,
"includePersonalEmails": true,
"onlyOwnDomainEmails": false
}

Output example (shortened)

{
"domain": "bosch.de",
"url": "https://www.bosch.de/",
"status": "ok",
"companyName": "Bosch in Deutschland",
"primaryEmail": "kontakt@bosch.de",
"primaryPhone": "+4971140040990",
"emails": [
{ "email": "kontakt@bosch.de", "type": "generic", "onDomain": true, "verdict": "valid", "hasMx": true, "source": "mailto",
"foundOn": ["https://www.bosch.de/impressum/"] }
],
"phones": [
{ "e164": "+4971140040990", "international": "+49 711 40040990", "countryCode": "DE", "type": "fixed_line", "label": "phone", "source": "text" }
],
"socials": {
"linkedin": "https://www.linkedin.com/company/bosch",
"facebook": "https://www.facebook.com/BoschGlobal",
"instagram": "https://www.instagram.com/boschglobal"
},
"address": null,
"language": "de",
"countryGuess": "DE",
"contactPageUrl": "https://www.bosch.de/kontakt/",
"summary": "Bosch in Deutschland · kontakt@bosch.de · +4971140040990 · 3 social profile(s)"
}

Sites that can't be read return a free row such as {"status": "error", "errorCode": "BLOCKED", …}. Other codes are SITE_UNREACHABLE, HTTP_404 and INVALID_URL.

Output fields

FieldMeaning
primaryEmail, primaryPhoneThe best contact, chosen for you
emails[]email, type (role / personal / generic), onDomain, verdict (valid / invalid / risky / unknown), hasMx, isFreeProvider, isDisposable, source, foundOn
phones[]e164, international, national, countryCode, type, label (phone / mobile / fax / whatsapp), source, foundOn
socials, socialProfilesBest URL per network, and up to 5 per network
companyName, legalName, description, logo, faviconCompany identity
address, geo, openingHours, vatId, foundingDateFrom structured data, when published
contactPageUrl, contactFormUrlsWhere to reach them
language, countryGuess, schemaTypes, pagesScannedContext

Pricing

Pay per event: $0.003 per website profiled ($3 per 1,000). You're charged once per site whose homepage loaded, however many pages were read. Unreachable, blocked and invalid sites cost nothing. The Actor never starts more sites than your Max cost per run can pay for.

Use from AI agents (MCP) and code

  • MCP: https://mcp.apify.com?tools=actors,dodiabak/website-contact-extractor works in Claude, Cursor, VS Code, n8n and others. Example prompt: "Get the contact email, phone and LinkedIn page for these 20 domains."
  • API: POST https://api.apify.com/v2/acts/dodiabak~website-contact-extractor/run-sync-get-dataset-items?token=YOUR_TOKEN
  • Pairs well with: Contact Data Cleaner to normalize and dedupe your CRM, and Google Maps scrapers for domain lists.

Responsible use

The Actor reads only information that companies publish on their own public websites. It doesn't log in, bypass bot protection, guess or brute-force addresses, or send any email. Personal addresses can be switched off with Include personal emails = false. When you store or contact people, follow the data-protection and anti-spam laws that apply to you (GDPR, CAN-SPAM, PECR…).

Limitations

  • Sites that render contacts only with JavaScript, or that block automated visitors (some big brands), may return fewer results or a BLOCKED row (free).
  • The address comes from structured data (schema.org) only. Free-text addresses aren't guessed, to keep precision high.