Email ✉️ & Phone 📞 Extractor avatar

Email ✉️ & Phone 📞 Extractor

Pricing

from $2.99 / 1,000 results

Go to Apify Store
Email ✉️ & Phone 📞 Extractor

Email ✉️ & Phone 📞 Extractor

Crawl any website and extract emails, phone numbers, and social media profiles (LinkedIn, X/Twitter, Instagram, Facebook, YouTube). Built for lead generation and data enrichment.

Pricing

from $2.99 / 1,000 results

Rating

0.0

(0)

Developer

ScrapAPI

ScrapAPI

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

✉️ Email & Phone Extractor 📞 — Contact Details Scraper

Extract emails, phone numbers, and social media profiles from any website. Point this actor at one website or thousands — it crawls each one, follows the links you allow, and pulls out every public contact detail it can find. Built for lead generation, sales prospecting, and data enrichment.


💡 Why Choose This Actor?

  • 🧠 Smart proxy escalation — starts with no proxy for speed, and only escalates to a datacenter and then residential proxy if a website blocks it. You pay for heavy proxies only when you actually need them.
  • 🎭 JavaScript fallback — pages that need a browser are automatically re-rendered with a real Chromium browser, so dynamic contact details are never missed.
  • ☎️ Real phone validation — numbers are verified against actual numbering plans (libphonenumber), so you get clean +E.164 numbers instead of random digit soup.
  • 📡 Live results — every page is saved to the dataset the moment it is scraped, and the run log streams real-time progress.
  • 🌐 Social profiles too — LinkedIn, X/Twitter, Instagram, Facebook & YouTube.
  • 📥 Bulk input — paste a list, upload a file, or link a Google Sheet.

✨ Key Features

FeatureDescription
📧 Email extractionFrom visible text and mailto: links
📞 Phone extractiontel: links + validated free-text numbers (E.164)
🌐 Social profilesLinkedIn, X/Twitter, Instagram, Facebook, YouTube
🪜 Deep crawlingFollow links to a configurable depth
🎯 Link filteringRegex patterns + same-domain restriction
🖼️ IFRAME probingReads contact details embedded in child frames
🛡️ Auto proxy fallbackNo proxy → datacenter → residential, automatically
🎭 JS renderingReal-browser fallback for dynamic websites

📥 Input

FieldTypeDescription
startUrlsarrayWebsite URLs to crawl. Bulk paste / file / Google Sheet supported.
maxRequestsintegerTotal maximum pages to load (default 20).
maxDepthintegerHow deep to follow links (default 2).
maxRequestsPerStartUrlintegerOptional per-website page limit.
maxConcurrencyintegerPages fetched in parallel (default 5).
requestDelaynumberPolite delay between requests, seconds (default 1.0).
sameDomainbooleanOnly follow links on the same domain (default true).
pseudoUrlsarrayRegex link filters (default [".*"]).
considerChildFramesbooleanProbe IFRAMEs for contacts (default true).
onlyEmailsbooleanExtract only emails (default false).
onlyOneEmailPerDomainbooleanStop a site after the first email (default false).
defaultPhoneRegionstringRegion for local-format phone numbers (default auto).
usePlaywrightFallbackbooleanRe-render JS-heavy pages (default true).
proxyConfigurationobjectProxy settings — disabled by default.

Example input

{
"startUrls": [{ "url": "https://apify.com/contact" }],
"maxRequests": 20,
"maxDepth": 2,
"sameDomain": true,
"onlyEmails": false,
"proxyConfiguration": { "useApifyProxy": false }
}

📤 Output

Each crawled page becomes one dataset record:

{
"depth": 0,
"referrerUrl": null,
"url": "https://apify.com/contact",
"domain": "apify.com",
"image": "https://apify.com/favicon.ico",
"emails": ["hello@apify.com"],
"phones": [],
"phonesUncertain": [],
"linkedIns": ["https://www.linkedin.com/company/apify/"],
"twitters": ["https://x.com/apify"],
"instagrams": [],
"facebooks": [],
"youtubes": ["https://www.youtube.com/apify"]
}
FieldDescription
depthLink distance from the start URL (0 = start page).
referrerUrlThe page this URL was discovered on.
url / domainThe scraped page and its domain.
imageThe website favicon.
emailsEmail addresses found.
phonesValidated phone numbers in +E.164 format.
phonesUncertainPlausible numbers that did not fully validate.
linkedIns / twitters / instagrams / facebooks / youtubesSocial profile URLs.

The Output tab shows the data split into handy views: 🗂️ Contact Overview, 📧 Emails, 📞 Phone Numbers, and 🌐 Social Profiles.


🚀 How to Use (Apify Console)

  1. Log in at console.apify.comActors.
  2. Open Email & Phone Extractor.
  3. Paste your website URLs into 🔗 Website URLs.
  4. Adjust crawl depth, page limit, and filters if needed.
  5. Click Start.
  6. Watch the run log stream live progress.
  7. Open the Output tab when the run finishes.
  8. Export to JSON / CSV / Excel.

🤖 Use via API

curl -X POST "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"startUrls": [{ "url": "https://apify.com/contact" }],
"maxRequests": 20,
"maxDepth": 2
}'

🛡️ How Proxy Fallback Works

  1. Direct first — requests go out with no proxy for maximum speed.
  2. Datacenter — if a website blocks the request, every following request switches to a datacenter proxy.
  3. Residential — if blocking continues, the run upgrades to residential proxies and retries up to 3 times per page.
  4. The escalation is sticky — once upgraded, it stays upgraded.

Every proxy switch is logged clearly so you always know what happened.


🎯 Best Use Cases

  • 🧲 Lead generation and sales prospecting lists
  • 🗂️ CRM data enrichment
  • 🔎 Market & competitor research
  • 🏢 Building agency / supplier contact directories

💳 Pricing

This actor uses the pay-per-event model and bills a single event:

EventWhat it bills for
apify-default-dataset-itemOne scraped page saved to the dataset

You are billed per page of results. Results are saved live, page by page, so if a run reaches your charge limit the platform stops it automatically and everything collected so far is kept.


❓ Frequently Asked Questions

Does it find every email on a website? It finds every publicly visible email in page text, mailto: links, and IFRAMEs, up to the crawl depth and page limit you set. Increase maxDepth and maxRequests to dig deeper.

Why are some numbers in phonesUncertain? Those are plausible-looking numbers that did not fully pass numbering-plan validation. Set defaultPhoneRegion to the country of the websites you scrape to validate more local-format numbers.

A website blocked the actor — what now? Nothing to do — the actor automatically escalates to datacenter and then residential proxies. You can also pre-select a proxy in the input.

Can I scrape thousands of websites at once? Yes. Paste them all, upload a file, or link a Google Sheet in the 🔗 Website URLs field.


This actor collects only publicly available information. You are responsible for using the data in compliance with applicable laws (GDPR, CCPA, anti-spam regulations) and the target websites' terms of service.


🆘 Support & Feedback

Found a bug or have a feature request? Open an issue on the actor's Issues tab in the Apify Console — feedback is always welcome.