Website Contact & Email Scraper
Pricing
$3.00 / 1,000 result items
Website Contact & Email Scraper
Extract emails, phone numbers and social links from any list of websites — with contact-page crawling and email validation. Bulk B2B lead enrichment, pay per result.
Pricing
$3.00 / 1,000 result items
Rating
0.0
(0)
Developer
ziv shay
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Extract emails, phone numbers and social links from any list of websites — with contact-page crawling, a JS-render fallback for SPA sites, and email validation. Built for bulk B2B lead enrichment. Pay per result.
What it does
Give it a list of websites (plain URLs, bare domains, or objects with a
url/website field). For each site it:
- Fetches the homepage.
- Optionally crawls common contact pages (
/contact,/contact-us,/about,/about-us). - Extracts every email, phone number and social profile — LinkedIn, Facebook,
Twitter/X, Instagram, YouTube, TikTok, Telegram, WhatsApp, GitHub and
Pinterest — from
mailto:/tel:links, visible text, and inline JSON/JSON-LD (many sites only ship their socials inside a Next.js data blob, which an anchor-only scraper misses). - Validates each email (syntax), tags role (
info@,sales@) andno-replyaddresses, and can drop them on request. - JS-render fallback: when a homepage is an empty single-page-app shell, it re-fetches with a full browser profile to recover contacts the plain crawler would miss.
One row is pushed per website → pay-per-result ready, export to CSV/JSON/Excel.
Input
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array (required) | — | Websites to scrape. URLs, bare domains, or { url } objects. |
crawlContactPages | boolean | true | Also fetch contact/about pages. |
contactPaths | array | /contact, /contact-us, /about, /about-us | Extra relative paths to probe. |
dropRoleEmails | boolean | false | Exclude role + no-reply addresses, keep personal only. |
renderJs | boolean | true | Browser-profile retry for JS-rendered/SPA homepages. |
maxConcurrency | integer | 10 | Sites crawled in parallel. |
requestTimeoutSecs | integer | 20 | Per-page fetch timeout. |
proxyConfiguration | object | Apify Proxy | Outbound proxy. |
Output (one row per site)
{"website": "https://acme.com","domain": "acme.com","emails": ["jane@acme.com", "info@acme.com"],"emailDetails": [{ "email": "jane@acme.com", "type": "personal", "valid": true },{ "email": "info@acme.com", "type": "role", "valid": true }],"phones": ["+15125550123"],"linkedin": "https://linkedin.com/company/acme","facebook": null, "twitter": "https://x.com/acme", "instagram": null,"youtube": "https://www.youtube.com/acme", "tiktok": null,"telegram": null, "whatsapp": null, "github": null, "pinterest": null,"hasEmail": true, "hasPhone": true,"emailCount": 2, "phoneCount": 1,"pagesScanned": 3, "jsFallbackUsed": false,"status": "scraped", "error": null,"scrapedAt": "2026-06-20T00:00:00.000Z"}
status is one of scraped, no_contacts_found, unreachable, error — so a
single bad site never breaks the run.
Notes on accuracy
Social detection is host-anchored (parses each link's host) rather than naive
substring matching, so a URL like measure-ux.com is never mis-tagged as Twitter/X
— a class of false positive that simple .includes("x.com") scrapers produce.
The biggest entrenched incumbent in this category is very strong (15+ platforms,
optional paid email verification); this actor is the cheaper, no-add-on option with
solid 10-platform coverage, the JSON-blob fallback above, and per-email role/no-reply
typing for clean segmentation.