Contact discovery
Find publicly published contact addresses and keep the exact page where each address appeared.
- emails
- websiteUrl
- source URL
Website API
Scan public website pages for published email addresses and keep the exact source page and surrounding evidence.
No saved response · published contract fields only
Website Email Finder
Published request and response contract
Published request input
{
"domains": [
"apify.com",
"example-shop.co.uk"
],
"maxPages": 5,
"includeFreeMail": true,
"checkMx": true
}Response contract fields
Overview
Scan public website pages for published email addresses and keep the exact source page and surrounding evidence.
domains accepts one domain per line and strips www, while startUrls can target a specific page. maxPages controls how many public pages are checked: the homepage plus up to four more contact, about, team and legal or imprint pages.
Only published addresses are returned. includeFreeMail keeps free-mail addresses labelled separately from the site's own domain. checkMx adds a DNS fact about the email domain, not a mailbox check or a deliverability guarantee.
Input
Domains or start URLs
Output
Domain scan records
Provide domains or specific website URLs to scan, with optional page and free-mail settings.
The Actor fetches the selected public pages and records each address with its source evidence.
The Dataset summarizes status, counts, addresses and the pages that were fetched.
Use cases
The record is designed to sit inside research and review workflows. The examples below are starting points, not packaged scores.
Find publicly published contact addresses and keep the exact page where each address appeared.
Separate same-domain, free-mail and other-domain addresses in a public-site scan.
Review homepage outcomes and the pages that were fetched or failed.
Try it
No response sample is saved for this product. The form, request examples and field lists show the published contract only.
No recorded response. No response has been saved yet. You can review the request and response contract below.
Enter a domain such as example.com. The Actor scans public pages only.
https://api.apify.com/v2/acts/meka.im~website-email-finder/run-sync-get-dataset-itemsPublished contract
No recorded sample is available for this product in this build. The fields below are the published contract, including every published type and description. No response values have been inserted.
Inputs accepted by the Actor. They are documentation only here; no request is sent from this view.
| Field | Type | Description |
|---|---|---|
| domains | string[] | One domain per line, for example acme-widgets.de. A full URL works too; www. is stripped and duplicates are removed. |
| startUrls | Array<string | { url: string }> | Website URLs to start from, when you want a specific page instead of the homepage. Combined with the domains above. |
| maxResults | integer | Hard cap on how many domains are written to the dataset across the whole run, including a resumed run. Minimum: 1. Maximum: 1000000. |
| maxPages | integer | Homepage plus up to four more: contact, about, team and legal/imprint. Lower it to 1 to scan homepages only — that is faster and cheaper, and in our own 1,039-domain test it found addresses on 39.9% of domains instead of 53.7%. Default: 5. Minimum: 1. Maximum: 5. |
| includeFreeMail | boolean | Keep gmail.com, outlook.com and similar addresses when they are published as the site's contact address. Small businesses often use one. They are always labelled separately from addresses on the site's own domain. Default: true. |
| checkMx | boolean | Adds mxAvailable to each address: whether the email domain publishes MX records. This is a DNS fact about the domain, not a check of the individual mailbox and not a deliverability guarantee. Default: true. |
| concurrency | integer | How many batches of 8 domains run at once. Raise it for large lists, lower it if you want a gentler crawl. Default: 4. Minimum: 1. Maximum: 10. |
status is the service result (only contacts_found is charged); outcome is the homepage fetch result. Published values are shown without interpretation.
| Field | Type | Description |
|---|---|---|
| domain | string | The input domain, lower-cased and without www. |
| inputValue | string | Exactly what you passed in. |
| websiteUrl | string | The URL that was actually reached, after redirects. |
| status | string | Only contacts_found is charged. Accepted: "contacts_found", "no_contacts_found", "unreachable". |
| outcome | string | Fetch result of the homepage: ok, http_403, http_429, dns_failed, timeout, tls_failed, challenged, http_5xx, … |
Counts are the service's own classifications. Email entries keep their returned structure because nested field names are part of the response contract.
| Field | Type | Description |
|---|---|---|
| emailCount | integer | emailCount Minimum: 0. |
| sameDomainCount | integer | Addresses on the input domain, subdomains included. Minimum: 0. |
| freeMailCount | integer | gmail, outlook and similar, published as the site contact address. Minimum: 0. |
| otherDomainCount | integer | otherDomainCount Minimum: 0. |
| excludedVendorCount | integer | Website-builder and tooling addresses that were dropped. Minimum: 0. |
| Field | Type | Description |
|---|---|---|
| emails | object[] | One entry per address, each with its source URL, page type and surrounding text. |
Pages fetched and how each fetch ended, plus the service's request and elapsed-time measurements.
| Field | Type | Description |
|---|---|---|
| requests | integer | requests Minimum: 0. |
| tookMs | integer | tookMs Minimum: 0. |
| contractVersion | integer | contractVersion Minimum: 1. |
| Field | Type | Description |
|---|---|---|
| pagesScraped | object[] | Every page that was fetched and how it ended. |
No preview JSON
Run a live request or choose a saved sample.
Reference
POST to the Apify Actor endpoint with a bearer token. Request examples use $APIFY_TOKEN and the current product defaults; response examples come from a saved historical record.
Request fields accepted by the Actor. Preview input is sent only when you run a live request.
domainsstring[]One domain per line, for example acme-widgets.de. A full URL works too; www. is stripped and duplicates are removed.
Example: ["apify.com"]
startUrlsArray<string | { url: string }>Website URLs to start from, when you want a specific page instead of the homepage. Combined with the domains above.
maxResultsintegerHard cap on how many domains are written to the dataset across the whole run, including a resumed run. Minimum: 1. Maximum: 1000000.
maxPagesintegerHomepage plus up to four more: contact, about, team and legal/imprint. Lower it to 1 to scan homepages only — that is faster and cheaper, and in our own 1,039-domain test it found addresses on 39.9% of domains instead of 53.7%. Default: 5. Minimum: 1. Maximum: 5.
includeFreeMailbooleanKeep gmail.com, outlook.com and similar addresses when they are published as the site's contact address. Small businesses often use one. They are always labelled separately from addresses on the site's own domain. Default: true.
checkMxbooleanAdds mxAvailable to each address: whether the email domain publishes MX records. This is a DNS fact about the domain, not a check of the individual mailbox and not a deliverability guarantee. Default: true.
concurrencyintegerHow many batches of 8 domains run at once. Raise it for large lists, lower it if you want a gentler crawl. Default: 4. Minimum: 1. Maximum: 10.
Published response fields. Example properties are taken from one historical record; they describe that record, not a guaranteed schema for every response.
domainstringThe input domain, lower-cased and without www.
inputValuestringExactly what you passed in.
websiteUrlstringThe URL that was actually reached, after redirects.
statusstringOnly contacts_found is charged. Accepted: "contacts_found", "no_contacts_found", "unreachable".
outcomestringFetch result of the homepage: ok, http_403, http_429, dns_failed, timeout, tls_failed, challenged, http_5xx, …
emailCountintegeremailCount Minimum: 0.
sameDomainCountintegerAddresses on the input domain, subdomains included. Minimum: 0.
freeMailCountintegergmail, outlook and similar, published as the site contact address. Minimum: 0.
otherDomainCountintegerotherDomainCount Minimum: 0.
excludedVendorCountintegerWebsite-builder and tooling addresses that were dropped. Minimum: 0.
emailsobject[]One entry per address, each with its source URL, page type and surrounding text.
pagesScrapedobject[]Every page that was fetched and how it ended.
requestsintegerrequests Minimum: 0.
tookMsintegertookMs Minimum: 0.
contractVersionintegercontractVersion Minimum: 1.
curl -X POST 'https://api.apify.com/v2/acts/meka.im~website-email-finder/run-sync-get-dataset-items' \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"domains": [
"apify.com"
],
"maxPages": 5,
"includeFreeMail": true,
"checkMx": true
}'Recorded sample
No recorded response is saved for this product. The request snippets above use the published contract defaults; no sample values are shown here.
Pricing & access
Published FREE-plan event rates from public Apify metadata. Plan-specific rates and usage terms remain on the Actor's pricing page.
Pricing
$4.00per 1,000 domains with at least one email
Per domain where at least one email is found. No-email domains are free.
Access
https://api.apify.com/v2/acts/meka.im~website-email-finder/run-sync-get-dataset-items
FAQ
Authentication, response shape, recorded data and availability.
No. It adds whether the email domain publishes MX records. That is a DNS fact about the domain, not a check of an individual mailbox and not a deliverability guarantee.
maxPages defaults to 5 and covers the homepage plus up to four more contact, about, team and legal or imprint pages. Setting it to 1 scans homepages only.
No response sample has been saved yet. You can review the request and response fields in the Reference section.
Send an Apify token as a Bearer token in the Authorization header, as shown in the request examples.
Not by default. No recorded sample is available for this product; review the request and response contract in the Reference section. Live data is requested directly from the published Apify Actor endpoint with your own token.
Current pricing and usage terms are published on the Apify Actor page.