๐Ÿ“ง Website Email Extractor โ€” Bulk Contact Scraper avatar

๐Ÿ“ง Website Email Extractor โ€” Bulk Contact Scraper

Pricing

from $20.00 / 1,000 email extracteds

Go to Apify Store
๐Ÿ“ง Website Email Extractor โ€” Bulk Contact Scraper

๐Ÿ“ง 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

NexGenData

Maintained by Community

Actor stats

0

Bookmarked

39

Total users

2

Monthly active users

10 days ago

Last modified

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

EventPrice
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:

FieldMeaning
urlthe site as you supplied it (normalised to https:// if you omitted the scheme)
domainhost of that URL
emailssorted, deduped, lowercased list of every email address found
emailCountlength of emails
phonessorted list of phone numbers found
socialProfilesobject keyed by platform (linkedin, twitter, facebook, instagram, youtube, github); empty platforms are omitted
contactPageUrlthe contact page the crawler identified, if it found one
pagesScannedhow many pages were successfully fetched for this site

Input

ParameterTypeDefaultDescription
urlsarray / stringโ€”Websites to crawl. Aliases accepted: startUrls, domains, websites, url, domain. Comma- or newline-separated strings work too.
maxPagesPerSiteinteger3Pages to fetch per site (1โ€“50). Raise it for deeper crawls.
extractEmailsbooleantrueCollect email addresses.
extractPhonesbooleantrueCollect phone numbers.
extractSocialsbooleantrueCollect social profile links.
notionConnector / notionParentIdstringโ€”Optional MCP delivery into your Notion workspace.
supabaseConnector / supabaseTable / supabaseProjectIdstringโ€”Optional MCP delivery into your Supabase project.
deliveryDedupbooleantrueSkip records already delivered in a previous run.

Quick start (Python)

from apify_client import ApifyClient
client = 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.

Use caseActor
Contact info scraper (emails + phones + socials)contact-info-scraper
Find emails on a domaincompany-email-finder
Email syntax + MX checkingemail-verification-tool
B2B leads finder (multi-source)b2b-leads-finder
Company enrichment from domaincompany-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