Email Extractor — Website Email, Phone & Social Scraper avatar

Email Extractor — Website Email, Phone & Social Scraper

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Email Extractor — Website Email, Phone & Social Scraper

Email Extractor — Website Email, Phone & Social Scraper

Bulk email & phone extractor for a list of websites. Paste URLs or domains, get back deduped emails, phone numbers, and social links per site — homepage plus contact/about pages, junk filtered. For lead lists, CRM enrichment, and outreach.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

Aitor Sanchez-Mansilla

Aitor Sanchez-Mansilla

Maintained by Community

Actor stats

1

Bookmarked

174

Total users

48

Monthly active users

13 days ago

Last modified

Share

Email Extractor status

Extract emails from a list of websites in one run. Give this email extractor a few hundred company or business domains and get back clean, deduped email addresses, phone numbers, and social-media links — ready for lead-gen lists, CRM enrichment, or research.

No setup, no per-site configuration. Give it URLs, get contacts.

Why this email extractor

  • Bulk + parallel — feed it hundreds of domains; it fetches many in parallel, so a big batch finishes in minutes, not hours.
  • Emails, phones, and socials — not just an address: phone numbers and social links (Instagram, Facebook, LinkedIn, X, YouTube, TikTok) in the same record.
  • Finds the contact page instead of guessing it — it reads the site's own navigation and follows the links that lead to contact details, whatever they are called: /impressum, /kontakt, /mentions-legales, /aviso-legal, /contatti or a bespoke path. Conventional paths are only tried as a fallback.
  • Reads European sites properly — in Germany, Austria and Switzerland the real contact details sit on the legally required imprint page, not on /contact. Measured on 40 live German sites, following those pages raised the share returning an email from 55% to 82%.
  • Decodes hidden addresses — many sites protect their email with Cloudflare's obfuscation, and most scrapers hand you the literal text [email protected]. This one decodes it back to the real address.
  • Best contact first — addresses come back ranked, so emails[0] is the one worth writing to: the site's own domain and a real inbox (info@, kontakt@, booking@) ahead of noreply@ and privacy@.
  • Reads structured data too — where a site publishes schema.org/JSON-LD, its own declared email, phone and social profiles are picked up as data rather than guessed from text.
  • A social profile or Linktree is a valid input — point it at instagram.com/yourtarget or a link hub and you still get the full set of profiles and any contact details behind them.
  • Never silently drops a URL — every input returns a row. If a site can't be read you get the row with an error, so a list of 500 always comes back as 500 records.
  • Messaging channels too — WhatsApp numbers and group invites, Telegram, Discord, plus Pinterest, Threads and Reddit alongside the usual six networks. For a small operator a WhatsApp line is often the one that gets answered.
  • Follows a Linktree to the real sites — point it at a link-in-bio page and it visits the destinations behind it, so you get the email on the actual website, not just the profile links on the hub.
  • Cleans up broken addresses — an address welded to the next word by sloppy markup (…@site.comphone) is repaired rather than returned unusable.
  • Clean output — deduped and junk-filtered (drops noreply@, asset filenames, placeholder domains); one tidy record per site.
  • No per-contact metering, no contract — pay per site scanned, point it at your own list, and keep everything you find.

Email extractor

For each URL you provide, this email extractor:

  1. Reads the page's published contact details.
  2. Optionally also checks the same site's /contact, /contact-us, /about, and /about-us pages — where businesses usually publish their email and phone.
  3. Returns a single tidy record per input URL with every email, phone, and social link it found, deduped.

It processes many pages in parallel, so a big batch of websites finishes in a fraction of the time a one-at-a-time scan would take.

Website email & contact scraper — use cases

  • Email extraction at scale — turn a list of website domains into a clean list of email addresses.
  • Lead generation — turn a list of business domains into a contact list.
  • CRM enrichment — fill in missing email / phone / social fields for accounts you already have.
  • Market & competitor research — collect public contact and social presence across a set of sites.
  • Outreach prep — find the right email and social handles before reaching out.

Input

FieldTypeDefaultDescription
urlsarray of strings— (required)Pages or domains to scan. Bare domains like example.com get https:// added automatically.
maxConcurrencyinteger10How many pages to fetch in parallel. Raise it for big batches; lower it if you hit rate limits.
crawlContactPagesbooleantrueAlso scan each site's /contact, /contact-us, /about, /about-us. Best coverage; turn off for a single-page scan.
maxItemsintegerunlimitedCap the number of input URLs processed.
maxRequestsPerMinuteinteger300Overall limit on how many pages are fetched per minute.

Example input

{
"urls": [
"https://acme-coffee.com",
"blue-fox-studio.com",
"https://example-agency.com/contact"
],
"maxConcurrency": 10,
"crawlContactPages": true
}

Output

One record per input URL:

{
"url": "https://acme-coffee.com",
"finalUrl": "https://acme-coffee.com/",
"emails": ["hello@acme-coffee.com"],
"phones": ["+15551234567"],
"socials": {
"instagram": ["https://instagram.com/acmecoffee"],
"facebook": ["https://facebook.com/acmecoffee"],
"twitter": [],
"linkedin": ["https://www.linkedin.com/company/acme-coffee"],
"youtube": [],
"tiktok": []
},
"otherUrls": ["https://acme-coffee.com/menu"],
"pagesScanned": ["https://acme-coffee.com/", "https://acme-coffee.com/contact", "https://acme-coffee.com/about"],
"scrapedAt": "2026-06-20T10:00:00.000Z"
}
FieldDescription
urlThe URL you supplied.
finalUrlWhere it landed after redirects.
emailsDeduped, junk-filtered email addresses (drops noreply@, asset filenames, placeholder domains, etc.).
phonesDeduped, loosely normalized phone numbers.
socialsLinks grouped by platform: instagram, facebook, twitter, linkedin, youtube, tiktok.
otherUrlsOther outbound links found on the page (non-social, non-asset).
pagesScannedWhich pages were actually read for this record.
scrapedAtISO timestamp of the scan.

Cost

Pay-per-result: $4 per 1,000 websites scanned (≈ $0.004 per input URL), with automatic volume discounts down to $2 per 1,000 at higher usage tiers. Platform usage costs are included — the price you see is all you pay — and you're charged once per input URL, regardless of how many contact/about pages it reads for that site.

For comparison: per-contact data tools (Apollo, Hunter, Lusha) charge $0.40–0.80 per verified contact — roughly $400–800 to cover 1,000 sites — and their coverage thins out on smaller, independent domains. This extractor reads what each site already publishes, so 1,000 sites costs a few dollars, not a few hundred. It's a different tool for a different job: bulk public-contact extraction over your list, not metered per-contact lookups.

FAQ

How do I extract emails from a list of websites?

Paste your website or domain list into the urls field and run the actor. Each URL is read for published email addresses, phone numbers, and social links, and you get one deduped record per input URL. With crawlContactPages on (the default), it also checks each site's contact and about pages, where contact details are most often published.

Does it work on German, French, Spanish or Italian websites?

Yes, and that is where it pulls ahead. Sites in those markets keep their contact details on an imprint or legal page (/impressum, /mentions-legales, /aviso-legal), not on /contact. German commercial sites are legally required to publish one. On a 40-site German sample, reading those pages took the share of sites returning an email from 55% to 82%.

Why do other scrapers return "[email protected]" instead of an address?

That is Cloudflare's email obfuscation: the page ships the address encoded and the browser rebuilds it. A scraper that only reads text copies the placeholder. This Actor decodes it and returns the real address.

Which email should I actually use?

The first one. Results are ranked: an address on the site's own domain with a real inbox name (info@, kontakt@, office@, booking@) sorts above generic providers and far above noreply@, privacy@ or webmaster@.

Email extractor vs an API?

An email-finder API typically charges per lookup and returns a single guessed address per domain. This email extractor reads what each website actually publishes — every email, phone, and social link present on the page and its contact/about pages — in one bulk run, deduped, with no per-contact metering and no contract. You point it at your own list and get back exactly what's public on those sites.

Yes. Alongside emails, every record includes deduped phone numbers and social-media links grouped by platform (instagram, facebook, twitter, linkedin, youtube, tiktok), plus any other outbound links found. It's a full website email and contact extractor, not just emails.

What kind of websites work best?

Conventional content and business sites where contact details are published in the page. Pages that only reveal contacts after heavy in-browser loading may show less. All extracted data is public information published on the pages you point it at.

Pair these with the email extractor to turn event listings into contactable leads — the event actors give you organizer and venue websites, and this actor enriches them with emails, phones, and socials: