๐ง Website Email Extractor โ Bulk Contact Scraper
Pricing
from $20.00 / 1,000 email extracteds
๐ง Website Email Extractor โ Bulk Contact Scraper
Extract emails, phone numbers & social profiles from any website. Crawls contact/about pages automatically. Hunter.io alternative for lead generation.
Pricing
from $20.00 / 1,000 email extracteds
Rating
0.0
(0)
Developer
NexGenData
Maintained by CommunityActor stats
0
Bookmarked
39
Total users
2
Monthly active users
10 days ago
Last modified
Categories
Share
๐ Website Email Extractor โ public contact details from any website
Optional delivery: Send results straight to your own Notion database or Supabase table in the same run, via Apify's native MCP connectors โ the Actor never sees your credentials. One-click connect: Notion or Supabase. Leave blank to get the dataset as usual.
Give it a list of websites. It crawls the homepage plus the contact / about / team pages and returns every publicly published email address, phone number and social profile it finds there โ deduped and lowercased. Built for lead-gen, outbound sales and CRM enrichment as a pay-per-result alternative to seat-priced tools like Hunter.io, Snov.io, VoilaNorbert and FindThatLead.
What this Actor does โ and what it does not
- โ It extracts contact details that a site publishes in its own HTML.
- โ It does not verify the addresses it finds. There is no SMTP probe, no mailbox check and no deliverability scoring in this Actor. Nothing it returns is "verified".
- โ It does not guess or pattern-generate addresses (no
firstname.lastname@construction). Every address in the output was literally present on a page it fetched.
If you need a deliverability signal, run the returned addresses through a validator afterwards โ for example email-verification-tool, which does syntax + DNS MX-record checks (also not an SMTP probe).
Pricing โ the live, current prices
| Event | Price |
|---|---|
| Actor start | $0.005 (per GB of run memory, minimum one) |
| Result row in the dataset | $0.02 |
One website that yields contacts = one row = $0.02. All of that site's emails, phones and socials arrive inside that single row, so a site with twelve addresses still costs $0.02.
Worked examples at the live price:
- 100 websites that all yield contacts = $0.005 + (100 ร $0.02) = $2.005
- a daily 50-domain sweep = $0.005 + (50 ร $0.02) = $1.005/day
You are not charged for:
- a website that answered but publishes no email, phone or social profile โ it produces no row
- a website that was blocked, timed out or 404'd โ it produces no row
- retries, proxy rotation and failed sub-requests โ those are absorbed by the platform
No monthly minimum, no seats.
What you get per website
One row per website that yielded at least one contact:
| Field | Meaning |
|---|---|
url | the site as you supplied it (normalised to https:// if you omitted the scheme) |
domain | host of that URL |
emails | sorted, deduped, lowercased list of every email address found |
emailCount | length of emails |
phones | sorted list of phone numbers found |
socialProfiles | object keyed by platform (linkedin, twitter, facebook, instagram, youtube, github); empty platforms are omitted |
contactPageUrl | the contact page the crawler identified, if it found one |
pagesScanned | how many pages were successfully fetched for this site |
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
urls | array / string | โ | Websites to crawl. Aliases accepted: startUrls, domains, websites, url, domain. Comma- or newline-separated strings work too. |
maxPagesPerSite | integer | 3 | Pages to fetch per site (1โ50). Raise it for deeper crawls. |
extractEmails | boolean | true | Collect email addresses. |
extractPhones | boolean | true | Collect phone numbers. |
extractSocials | boolean | true | Collect social profile links. |
notionConnector / notionParentId | string | โ | Optional MCP delivery into your Notion workspace. |
supabaseConnector / supabaseTable / supabaseProjectId | string | โ | Optional MCP delivery into your Supabase project. |
deliveryDedup | boolean | true | Skip records already delivered in a previous run. |
Quick start (Python)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("nexgendata/website-email-extractor").call(run_input={"urls": ["https://www.apify.com/contact", "https://vercel.com"],"maxPagesPerSite": 3})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["domain"], item["emails"])
Example row (real shape, from a live run against https://www.apify.com/contact):
{"url": "https://www.apify.com/contact","domain": "www.apify.com","emails": ["hello@apify.com", "support@apify.com"],"emailCount": 2,"phones": [],"socialProfiles": {"linkedin": ["https://www.linkedin.com/company/apify"],"twitter": ["https://x.com/apify"]},"contactPageUrl": "https://www.apify.com/contact","pagesScanned": 3}
How the run ends
The Actor always tells you what happened, in plain English, in the run's status message:
- Rows returned โ "Returned N website row(s) carrying M email address(es)โฆ", plus a count of sites that had no contacts and of sites that could not be reached. Only the delivered rows were charged.
- Nothing found โ the run succeeds with 0 rows and says the sites were crawled but publish no public contacts. Nothing was charged.
- Every site unreachable โ the run fails with a message saying every page request was blocked, refused or timed out. Nothing was charged. Re-run with the Apify proxy enabled if the target blocks datacentre IPs.
- No input โ the run succeeds with 0 rows and names the field to supply (
urls). Nothing was charged. - Time limit โ the crawl stops cleanly and the message says it stopped early at the run time limit; only rows already delivered were charged.
Use cases
- Outbound sales โ turn a domain list into a contact list in one run
- Cold-email agencies โ build per-client lead lists without a per-seat subscription
- Lead enrichment โ fill missing contact fields during a CRM cleanup
- Recruiting โ surface HR and hiring contacts from company career pages
- PR / press outreach โ collect press@ and media@ contacts across a list of news sites
FAQ
Q: Are the emails verified? A: No. This Actor extracts what a site publishes; it performs no SMTP probe and no mailbox check. Validate separately if you need a deliverability signal.
Q: How deep does it crawl?
A: maxPagesPerSite pages per site (default 3, max 50), prioritising contact / about / team links plus the standard /contact, /about-us, /team, /impressum paths.
Q: Why did a site return no row?
A: Either it published no contact details, or it could not be fetched. The status message and the run's OUTPUT record break the two apart.
Q: GDPR / CCPA / CAN-SPAM? A: Addresses on a public page are publicly published. You are the data controller for downstream outreach โ follow your jurisdiction's prospecting and opt-out rules.
Related NexGenData Actors
| Use case | Actor |
|---|---|
| Contact info scraper (emails + phones + socials) | contact-info-scraper |
| Find emails on a domain | company-email-finder |
| Email syntax + MX checking | email-verification-tool |
| B2B leads finder (multi-source) | b2b-leads-finder |
| Company enrichment from domain | company-enrichment-tool |
| Lead-list enricher (CSV in โ CSV out) | lead-list-enricher |
Integration surface
Apify console, Apify API (REST + webhooks), Python / JS SDKs, Zapier, Make.com, n8n, MCP, and built-in schedules.
Support
NexGenData ships updates regularly. Bug reports via the Apify console issues tab get a response within 24 hours.
Home: thenextgennexus.com Full catalog: apify.com/nexgendata