Email ✉️ & Phone 📞 Extractor
Pricing
from $3.99 / 1,000 results
Email ✉️ & Phone 📞 Extractor
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
ScrapeBase
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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.164numbers 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
| Feature | Description |
|---|---|
| 📧 Email extraction | From visible text and mailto: links |
| 📞 Phone extraction | tel: links + validated free-text numbers (E.164) |
| 🌐 Social profiles | LinkedIn, X/Twitter, Instagram, Facebook, YouTube |
| 🪜 Deep crawling | Follow links to a configurable depth |
| 🎯 Link filtering | Regex patterns + same-domain restriction |
| 🖼️ IFRAME probing | Reads contact details embedded in child frames |
| 🛡️ Auto proxy fallback | No proxy → datacenter → residential, automatically |
| 🎭 JS rendering | Real-browser fallback for dynamic websites |
📥 Input
| Field | Type | Description |
|---|---|---|
startUrls ✅ | array | Website URLs to crawl. Bulk paste / file / Google Sheet supported. |
maxRequests | integer | Total maximum pages to load (default 20). |
maxDepth | integer | How deep to follow links (default 2). |
maxRequestsPerStartUrl | integer | Optional per-website page limit. |
maxConcurrency | integer | Pages fetched in parallel (default 5). |
requestDelay | number | Polite delay between requests, seconds (default 1.0). |
sameDomain | boolean | Only follow links on the same domain (default true). |
pseudoUrls | array | Regex link filters (default [".*"]). |
considerChildFrames | boolean | Probe IFRAMEs for contacts (default true). |
onlyEmails | boolean | Extract only emails (default false). |
onlyOneEmailPerDomain | boolean | Stop a site after the first email (default false). |
defaultPhoneRegion | string | Region for local-format phone numbers (default auto). |
usePlaywrightFallback | boolean | Re-render JS-heavy pages (default true). |
proxyConfiguration | object | Proxy 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"]}
| Field | Description |
|---|---|
depth | Link distance from the start URL (0 = start page). |
referrerUrl | The page this URL was discovered on. |
url / domain | The scraped page and its domain. |
image | The website favicon. |
emails | Email addresses found. |
phones | Validated phone numbers in +E.164 format. |
phonesUncertain | Plausible numbers that did not fully validate. |
linkedIns / twitters / instagrams / facebooks / youtubes | Social 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)
- Log in at console.apify.com → Actors.
- Open Email & Phone Extractor.
- Paste your website URLs into 🔗 Website URLs.
- Adjust crawl depth, page limit, and filters if needed.
- Click Start.
- Watch the run log stream live progress.
- Open the Output tab when the run finishes.
- 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
- Direct first — requests go out with no proxy for maximum speed.
- Datacenter — if a website blocks the request, every following request switches to a datacenter proxy.
- Residential — if blocking continues, the run upgrades to residential proxies and retries up to 3 times per page.
- 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:
| Event | What it bills for |
|---|---|
apify-default-dataset-item | One 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.
⚖️ Legal & Fair Use
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.