Website Emails Scraper avatar

Website Emails Scraper

Pricing

from $5.00 / 1,000 scraped emails

Go to Apify Store
Website Emails Scraper

Website Emails Scraper

It goes to a website and extracts every email addresses. Super simple.

Pricing

from $5.00 / 1,000 scraped emails

Rating

4.6

(3)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

13

Bookmarked

758

Total users

132

Monthly active users

0.42 hours

Issues response

4 days ago

Last modified

Share

Find website contact emails without manual digging

Website Emails Scraper shallow-crawls the sites you already care about and emits one row per unique email, tied back to the first seed URL that found it. Start with 1 to 3 sites in URLs to scrape, keep the crawl shallow by default, and set Max emails to scrape when you want a smaller first batch.

  • One row per unique email - each emitted address keeps the first source seed URL attached for exports, QA, and follow-up.
  • Shallow by default - checks the seed plus a limited set of internal pages instead of spidering an entire site.
  • Duplicate-safe billing - the same normalized email is emitted and charged once per run, even if it appears on multiple submitted URLs or internal pages.
  • Small seed list first - test 1 to 3 sites or add a run-wide or per-site cap before you scale up.

⚡️ TRY IT FOR FREE


🏆 Benefits

  • 📬 Turn a curated list of websites into contact-email rows without opening contact pages one by one.
  • 🧭 Keep the first source context attached to every unique email so downstream CRMs, enrichment jobs, and audits stay traceable.
  • 🧪 Start with a small bounded run before you commit a larger list or automation.
  • ♻️ Avoid duplicate rows and duplicate charges when the same email appears more than once in a run.

🚀 Quick start

  1. Open the Input tab and add 1 to 3 sites to URLs to scrape.

    For the fastest trust check, start with a site where you already know a public contact email should exist.

  2. If you want a bounded first run, set Max emails to scrape. Leave it empty or 0 to keep all deduplicated emails until the input finishes or the run reaches its platform cost limit.
  3. Leave Proxy configuration on the default Apify proxy settings unless you intentionally want direct mode.
  4. Run the actor, then review the finished dataset in that run, or pull the same rows through the API.

⚙️ Features

  • 🌐 Shallow-crawls each seed URL plus a limited set of internal pages instead of attempting a full-site crawl.
  • 🧹 Deduplicates emails across the whole run, so repeated addresses do not inflate the dataset or your row charges.
  • 📄 Emits one dataset row per unique email and keeps the first source seed attached for traceable exports.
  • 🛡️ Supports Apify proxy settings by default and explicit direct mode when you pass null for proxyConfiguration.
  • 🎚️ Lets you bound first runs with an optional run-wide email cap and optional per-URL caps.

📊 Output

See the full Output tab for the complete contract.

Example

{
"url": "https://apify.com/contact",
"seedUrl": "https://apify.com/contact",
"email": "hello@apify.com"
}

Params

FieldTypeDescription
urlstringThe first source website URL that produced this unique email row.
seedUrlstringThe first input seed URL whose shallow crawl found the email.
emailstringOne normalized email address, deduplicated across the whole actor run.

🛠️ Input

Example

This example is from the same live run that produced the output example above.

{
"urls": [
{
"url": "https://apify.com/contact",
"userData": {
"maxNbEmailsToScrape": 3
}
}
],
"maxNbEmailsToScrape": 25,
"proxyConfiguration": null
}

Params

FieldTypeDescriptionDefault / empty behavior
urlsarray<object>Required list of seed website URLs to shallow-crawl. Each unique email found in the run becomes its own dataset row.Must contain at least 1 item.
urls[*].urlstringWebsite URL to crawl for contact emails.Required for each seed.
urls[*].userDataobjectOptional per-URL settings container.Omit it when you do not need per-seed overrides.
urls[*].userData.maxNbEmailsToScrapeintegerOptional per-URL cap for emitted email rows from that seed after duplicate emails are skipped.Empty or 0 keeps all deduplicated emails for that seed.
maxNbEmailsToScrapeintegerOptional cap for emitted email rows across the whole run.Omit it, leave it empty, or set 0 to scrape all available emails.
proxyConfigurationobject or nullApify proxy settings used for the seed URLs and their shallow internal links.Defaults to Apify Proxy with the US country; pass null for direct mode.

Important

  • Malformed urls[*].url entries are skipped with a warning before crawl. Remaining valid seeds still run in the same actor run.
  • maxNbEmailsToScrape: 0 emits all matching email rows until the input is finished or the run reaches its platform cost limit.
  • Duplicate normalized URLs are crawled once. If duplicates disagree on Max emails to scrape, the first valid entry wins and later conflicting duplicates are skipped with a warning.
  • Duplicate normalized emails are emitted once per run. Later matches from other seeds or internal pages are skipped before they can consume a row cap or charge.
  • This actor always crawls for emails, so there is no separate scrape-emails toggle or public concurrency field to configure.

🔍 Error handling

  • Malformed seed entries are skipped with a warning that points to the bad urls[*].url path, while the remaining valid URLs continue.
  • Invalid maxNbEmailsToScrape values stop the run cleanly with zero emitted emails and explain that the value must be 0 or a positive integer.
  • Invalid urls[*].userData.maxNbEmailsToScrape values skip only the affected seed and explain that the value must be 0 or a positive integer.
  • Duplicate normalized URLs with conflicting per-URL caps keep the first valid entry and warn about the skipped duplicates.
  • 403 and 404 responses are ignored for extraction purposes, so those pages simply emit no email rows and do not fail the whole run.
  • If cleanup leaves no valid seed URLs, the actor finishes successfully with zero dataset items and a concise warning.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡


🔗 Other actors

  • Product Hunt Scraper to source startup and product-launch sites before you crawl them for emails.
  • Tiny Startups Scraper to pull startup homepages you can enrich for contact emails next.
  • TinySeed Scraper to export portfolio-company sites, descriptions, and optional emails in one run.
  • Uneed Scraper to collect fresh tool sites plus maker links before deeper outreach enrichment.
  • Twitter Scraper to find accounts, posts, and company sites worth sending through this email crawler.
  • Reddit Scraper to find communities and companies worth enriching with website-email discovery.

Made with ❤️ by Maxime Dupré