Website Email & Contact Scraper avatar

Website Email & Contact Scraper

Pricing

$5.80 / 1,000 email addresses

Go to Apify Store
Website Email & Contact Scraper

Website Email & Contact Scraper

Find public contact email addresses from the website URLs you submit. Get one unique, normalized email per dataset row with the source and seed URLs attached.

Pricing

$5.80 / 1,000 email addresses

Rating

5.0

(2)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

28

Bookmarked

1.2K

Total users

57

Monthly active users

18 hours ago

Last modified

Share

✉️ Find public contact emails from website pages

For sales teams, lead researchers, and developers who already have public website URLs, Website Emails Scraper finds public contact email addresses. It returns one clean row for each unique, normalized email, with the source page and submitted seed URL. Rows can also include public phone numbers, social profile links, and MX records found for the email domain. This helps you review contact data without opening every page by hand.

📬 See clean email rows with their source pages

Each saved row has an email address, the page where it was first found, and the submitted seed URL. The email is accepted, normalized, and unique within the run. A row can also include public phone numbers, social profile links, and MX records found for the email domain. The Actor does not return nearby page text.

🚀 Crawl a small set of pages first

Quick start

  1. Open the Input tab and add public website URLs.
  2. Leave the email limit empty to return all available results until the source is exhausted. Set a limit when you want a smaller first run.
  3. Run the Actor and open the dataset from the Output tab.

What happens in a run

The Actor checks submitted public URLs and linked contact and about pages allowed by your page settings. A blocked or unreadable page does not show whether the site has an email, and it does not create a saved email row. The first eligible occurrence of each normalized email is saved. Later matches are ignored, so they do not create another row.

⚙️ Input

Add one or more public website URLs. This example is copied from the public input of a successful current-beta default-input run.

Input example

{
"urls": [
{
"url": "https://www.w3.org/contact/"
},
{
"url": "https://www.apache.org/foundation/contact"
},
{
"url": "https://www.ietf.org/contact/"
},
{
"url": "https://www.freebsd.org/administration/"
},
{
"url": "https://www.openbsd.org/mail.html"
}
],
"maxNbEmailsToScrape": 10
}

Input fields

FieldTypeWhat it does
urlsarray of objectsList one or more complete public website URLs to check.
urls[].urlstringOne complete public website URL. The Actor checks it and linked contact and about pages.
maxNbEmailsToScrapeintegerOptional maximum number of accepted emails for the whole run. Leave it empty to return all available results until the source is exhausted.
phoneCountryCodestringCountry code with two uppercase ISO letters for local phone numbers. Numbers that start with + keep their own country code.
includePathsarray of stringsLimit linked contact and about pages to these path prefixes. Leave empty to allow all paths; submitted URLs are still checked.
excludePathsarray of stringsSkip linked contact and about pages with these path prefixes. Leave empty to skip none; submitted URLs are still checked.
includeSubdomainsbooleanAllow linked contact and about pages on subdomains. Leave off to stay on each submitted URL's host.

Input rules

Set the email limit for the whole run to a positive integer. Leave it empty to return all available results until the source is exhausted. Path filters do not skip submitted URLs.

🧾 Output

The Output tab exposes results, a link to the default dataset. Each dataset row has the same public shape. Optional fields appear when the source page or MX check provides them.

Output fields

FieldTypeWhat it does
resultsstringLink to the default dataset of saved email addresses.

Dataset fields

FieldTypeWhat it does
emailstringOne accepted, normalized email address. It appears at most once per run.
urlstringPage URL where the first accepted match was found.
seedUrlstringSubmitted website URL that produced the row.
phoneNumbersarray of stringsPublic phone numbers found on the source page, when available.
socialLinksarray of stringsPublic social profile links found on the source page, when available.
domainReachablebooleanWhether MX records were found for the email domain. This field is omitted when the check is unavailable.

Output example

This complete row came from the newest successful current-beta run. It shows a saved email with its source and seed URLs, social links, and MX status.

{
"url": "https://www.glassdoor.com/about/newsroom/",
"seedUrl": "https://www.glassdoor.com/about/newsroom/",
"email": "pr@glassdoor.com",
"socialLinks": [
"https://www.linkedin.com/company/glassdoor",
"https://www.facebook.com/Glassdoor/",
"https://twitter.com/Glassdoor",
"https://www.youtube.com/Glassdoor",
"https://www.instagram.com/glassdoor",
"https://youtube.com/Glassdoor",
"https://instagram.com/glassdoor",
"https://tiktok.com/@glassdoor"
],
"domainReachable": true
}

💳 Pricing

This Actor uses pay-per-event pricing. You are charged one event for each accepted, unique email address saved to the default dataset. See the Apify pricing panel for current rates.

Buyer-facing event

Email address

One accepted, unique email address is saved to your dataset.

🔌 Integrations

Review rows in the Apify Console, read the default dataset with the Apify API, or export the dataset. This short guide shows a connected Actor workflow:

❓ FAQ

Will the Actor return phone numbers or nearby page text?

It saves accepted, normalized email addresses. A row can also include public phone numbers and social profile links when they are returned with the source page. It does not include nearby page text.

What happens when the same email appears on more than one page?

The Actor saves the first eligible occurrence of a normalized address. Later matches are ignored, so the saved row keeps the first source page and seed URL. Later matches do not create another row or charged event.

How far does it crawl?

It checks submitted URLs and linked contact and about pages allowed by your path settings. It does not promise to crawl every page on a site.

Can I limit the number of emails?

Yes. Set the email limit for the whole run to a positive integer. Leave it empty to return all available results until the source is exhausted.

What if a submitted URL has no email or cannot be read?

Only accepted emails from public pages are saved. A blocked or unreadable page does not show whether the site has an email, and a missing row by itself does not explain why no email was saved.

Does it access private pages or verify mailboxes?

No. It reads public pages only. MX records show that the email domain can route mail; they do not show that a specific mailbox is active or accepts messages.

How does this differ from an email finder?

This Actor starts with website URLs you submit and finds emails published on those public pages. It does not find websites by keyword.

What do url and seedUrl mean?

url is the page where the first accepted email match was found. seedUrl is the website URL you submitted that led to the row.


📝 Actor Release Notes

v4.0 (08-10-2026)

  • Choose a country code to read local phone numbers.
  • Filter linked contact and about pages by path and, if needed, include subdomains.
  • Find emails in structured page data and some click-to-reveal links.
  • Pages blocked by robots.txt are skipped.
  • domainReachable now reports whether MX records were found. The emailRole output is removed.
  • Runs need at least 2048 MB of memory.

v3.0 (07-10-2026)

  • Runs now need at least 512 MB of memory.
  • You can enter a website domain without adding https://.

v2.1 (27-09-2026)

  • Email rows can include public phone numbers, social profile links, domain reachability, and email role context when available.
  • Each website starts with datacenter access and can move to residential access when a clear source access block remains after retries.

v2.0 (10-09-2026)

  • Proxy settings are no longer part of the input. The Actor uses its managed connection for public pages.
  • Fixed template addresses such as support@yourdomain.com and hello@yourdomain.com are not saved or charged.

v1.0 (05-09-2026)

  • You can limit emails for each website. Other valid sites keep running if one site fails.
  • Each accepted email includes the page where it was found and the website URL you submitted.

v0.0

  • Initial release.

🆘 Support

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



Made with ❤️ by Maxime Dupré