Website Emails Scraper
Pricing
from $5.00 / 1,000 scraped emails
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é
Maintained by CommunityActor stats
13
Bookmarked
758
Total users
132
Monthly active users
0.42 hours
Issues response
4 days ago
Last modified
Categories
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.
🏆 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
- 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.
- If you want a bounded first run, set
Max emails to scrape. Leave it empty or0to keep all deduplicated emails until the input finishes or the run reaches its platform cost limit. - Leave
Proxy configurationon the default Apify proxy settings unless you intentionally want direct mode. - 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
nullforproxyConfiguration. - 🎚️ 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
| Field | Type | Description |
|---|---|---|
url | string | The first source website URL that produced this unique email row. |
seedUrl | string | The first input seed URL whose shallow crawl found the email. |
email | string | One 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
| Field | Type | Description | Default / empty behavior |
|---|---|---|---|
urls | array<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[*].url | string | Website URL to crawl for contact emails. | Required for each seed. |
urls[*].userData | object | Optional per-URL settings container. | Omit it when you do not need per-seed overrides. |
urls[*].userData.maxNbEmailsToScrape | integer | Optional 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. |
maxNbEmailsToScrape | integer | Optional cap for emitted email rows across the whole run. | Omit it, leave it empty, or set 0 to scrape all available emails. |
proxyConfiguration | object or null | Apify 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[*].urlentries are skipped with a warning before crawl. Remaining valid seeds still run in the same actor run. maxNbEmailsToScrape: 0emits 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[*].urlpath, while the remaining valid URLs continue. - Invalid
maxNbEmailsToScrapevalues stop the run cleanly with zero emitted emails and explain that the value must be0or a positive integer. - Invalid
urls[*].userData.maxNbEmailsToScrapevalues skip only the affected seed and explain that the value must be0or a positive integer. - Duplicate normalized URLs with conflicting per-URL caps keep the first valid entry and warn about the skipped duplicates.
403and404responses 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é