Website Email Finder - Optional Email Verification avatar

Website Email Finder - Optional Email Verification

Pricing

from $5.00 / 1,000 email founds

Go to Apify Store
Website Email Finder - Optional Email Verification

Website Email Finder - Optional Email Verification

Find publicly listed email addresses on business websites, with source URLs. Scan a website list or CSV and optionally verify the extracted emails. Email verification is off by default.

Pricing

from $5.00 / 1,000 email founds

Rating

0.0

(0)

Developer

Lead Proof

Lead Proof

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

21 hours ago

Last modified

Share

Find email addresses published on company websites. Paste domains or supply a CSV file. Each email comes with its source pages. Turn on mailbox verification only when you need it.

This is useful when you already have a list of companies from a CRM, directory, spreadsheet, or another scraper and want to fill in their contact emails.

How to use

  1. Enter website URLs or domains in Websites or domains, or provide a CSV file URL.
  2. Leave Verify found email addresses off for extraction only. This mode makes no verification requests and requires no verification-service credentials.
  3. Optionally enable verification. The developer supplies the verification integration; customers do not need an API key.
  4. Set website, page and email limits, then run the Actor.
  5. Export the dataset as JSON or CSV. Read SUMMARY to check coverage and stop reasons.

Extraction only:

{
"websites": ["https://www.python.org/"],
"verifyEmails": false,
"maxWebsites": 10,
"maxPagesPerWebsite": 5,
"maxEmailsPerWebsite": 10
}

With verification, use the same input with "verifyEmails": true.

For CSV input, set csvUrl to a public or signed file URL and websiteColumn to the exact column header (default: website). UTF-8 CSV, quoted fields, and a UTF-8 BOM are supported. Files are limited to 2 MB and 1,000 nonempty website entries. CSV and direct inputs are combined.

Output

One row per website/email pair. Repeated occurrences on the same site are combined into one row with all observed source pages. A domain supplied more than once is scanned once. The same email published by different domains may produce one row for each domain. The verifier caches repeated addresses during a run.

If a site yields no email, an uncharged diagnostic row is returned with email: null. no_email_found means the fetched pages had no usable email; it is not proof that the entire website has no email. website_failed means no content page could be read.

FieldMeaning
website, domainInput website and normalized domain
emailPublished email, or null on diagnostics
sourceUrls, methodsSource pages and extraction methods
verificationStatusnot_requested, ok, catch_all, unknown, invalid, disposable, error, not_applicable
isDeliverableTrue for provider ok, false for invalid/disposable, null otherwise
verificationReasonSanitized reason when verification fails
scanStatussucceeded, partial, or failed
resultTypeemail, no_email_found, or website_failed
pagesAttempted, pagesSucceededContent-page coverage; excludes robots.txt and redirects
errorsURLs and failure categories for unreadable/disallowed pages
crawlLimitedMore pages or addresses remained beyond the configured limits
billingEventemail-found, email-checked, or null on diagnostics
scrapedAtUTC timestamp

ok is a mailbox verification result at the time of checking, not a guarantee of future delivery. Catch-all and unknown results never set isDeliverable to true. In extraction-only mode, every returned email has verificationStatus: "not_requested" and isDeliverable: null.

What it scans

  • The starting page and discovered contact, about, team, staff, and international equivalents.
  • Common contact/about paths as fallbacks, within the same page limit.
  • Visible text, mailto: links, JSON-LD email fields, and Cloudflare's encoded public emails.
  • HTTP(S) sites on standard ports, with TLS validation, response limits, and bounded redirects.
  • robots.txt rules, including crawl delays up to 10 seconds. Longer delays are reported as unsupported instead of ignored. An unavailable robots file fails the site conservatively.

The Actor does not guess mailbox names, log in, execute JavaScript, solve challenges, OCR images, or crawl social networks. JS-only email displays and protected pages can be missed. Navigation stays on the input hostname, allowing its www/non-www equivalent. Redirects to other domains are reported. Free-provider addresses such as Gmail are included unless sameDomainOnly is enabled. A published address can belong to a vendor or partner; the source page is evidence of publication, not proof of ownership.

Pricing behavior

Extraction costs $5 per 1,000 returned email rows. Extraction with a completed verification costs $10 per 1,000 rows, including extraction. The two events are mutually exclusive:

  • email-found: extracted email, no completed verification. Provider-error results also use this event, with verificationStatus: "error".
  • email-checked: extracted email plus a completed provider check, including catch-all, unknown, invalid and disposable results. This replaces email-found; it is not added to it.

Diagnostic rows have no custom event charge. Actor start costs $0.00005 per GB of allocated memory, with a one-event minimum. Platform usage is included. No third-party Actor is run on the customer's account. Missing verification configuration or credits fails before crawling when verification is enabled. Three provider errors stop the run with partial results retained. Spending limits are checked before each provider request and output charge; a batch of at most concurrency websites may already have been scanned when the budget is reached.

Summary and recovery

SUMMARY reports input deduplication, websites omitted by the limit, processed/readable/failed sites, sites without emails, returned email rows, checked rows, provider errors, and stop reason. If every website fails, the Actor fails with diagnostic rows saved instead of claiming a successful empty search. CHECKPOINT records completed sites and an input fingerprint. After migration or restart, already emitted website/email pairs are skipped. Checkpoint and dataset writes are not transactional: a crash between a platform charge and its durable write cannot provide an exactly-once billing guarantee. Start a fresh run when changing input.

Development

python -m pip install -r requirements.txt
python -m unittest discover -s test -v
python -m src

For local input, create storage/key_value_stores/default/INPUT.json. Only verification mode needs the developer's MV_API_KEY secret environment variable. Do not put API keys in input examples, source files, logs, or result datasets.

Use published business contacts responsibly and comply with applicable rules and site terms.

Related LeadProof tools: Google Maps Scraper, Bulk Email Verifier, Google Maps Verified Leads, and LeadProof.