Public websites

Website API

Published email
addresses with evidence

Scan public website pages for published email addresses and keep the exact source page and surrounding evidence.

  • Homepage plus contact, about, team and legal pages
  • Free-mail and same-domain addresses labelled separately
  • Source URL and surrounding text for each address

No saved response · published contract fields only

POST/acts/meka.im~website-email-finder/run-sync-get-dataset-items

Website Email Finder

Published request and response contract

No saved response

Published request input

{
  "domains": [
    "apify.com",
    "example-shop.co.uk"
  ],
  "maxPages": 5,
  "includeFreeMail": true,
  "checkMx": true
}

Response contract fields

domain
string
status
string
emailCount
integer
sameDomainCount
integer
No capture date or sample values are availableContract only

Overview

What this API returns

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

01

Send domains

Provide domains or specific website URLs to scan, with optional page and free-mail settings.

02

Read public pages

The Actor fetches the selected public pages and records each address with its source evidence.

03

Read one scan row per domain

The Dataset summarizes status, counts, addresses and the pages that were fetched.

Use cases

Where these records fit

The record is designed to sit inside research and review workflows. The examples below are starting points, not packaged scores.

Contact discovery

Find publicly published contact addresses and keep the exact page where each address appeared.

  • emails
  • websiteUrl
  • source URL

Domain hygiene review

Separate same-domain, free-mail and other-domain addresses in a public-site scan.

  • sameDomainCount
  • freeMailCount
  • otherDomainCount

Crawl QA

Review homepage outcomes and the pages that were fetched or failed.

  • status
  • outcome
  • pagesScraped

Try it

Inspect the email finder contract

No response sample is saved for this product. The form, request examples and field lists show the published contract only.

Checking live preview

No recorded response. No response has been saved yet. You can review the request and response contract below.

Checking live preview availability… Review the request and response contract instead.

Enter a domain such as example.com. The Actor scans public pages only.

POSThttps://api.apify.com/v2/acts/meka.im~website-email-finder/run-sync-get-dataset-items
No preview output
Copyable cURL uses the current preview input and the Actor endpoint.

Rendered

Contract only
No recorded example

Published contract

Website Email Finder

Contract onlyNo saved response

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.

Published request fields

Inputs accepted by the Actor. They are documentation only here; no request is sent from this view.

FieldTypeDescription
domainsstring[]One domain per line, for example acme-widgets.de. A full URL works too; www. is stripped and duplicates are removed.
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.

Fetch outcome

status is the service result (only contacts_found is charged); outcome is the homepage fetch result. Published values are shown without interpretation.

FieldTypeDescription
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, …

Discovered emails

Counts are the service's own classifications. Email entries keep their returned structure because nested field names are part of the response contract.

FieldTypeDescription
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.

Email entries

FieldTypeDescription
emailsobject[]One entry per address, each with its source URL, page type and surrounding text.

Crawl evidence

Pages fetched and how each fetch ended, plus the service's request and elapsed-time measurements.

FieldTypeDescription
requestsintegerrequests Minimum: 0.
tookMsintegertookMs Minimum: 0.
contractVersionintegercontractVersion Minimum: 1.

Pages scraped

FieldTypeDescription
pagesScrapedobject[]Every page that was fetched and how it ended.
No capture date or sample values are availableContract only

JSON

application/json

No preview JSON

Run a live request or choose a saved sample.

Reference

Request and response contract

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.

Parameters

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.

maxResultsinteger

Hard cap on how many domains are written to the dataset across the whole run, including a resumed run. Minimum: 1. Maximum: 1000000.

maxPagesinteger

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.

includeFreeMailboolean

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.

checkMxboolean

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.

concurrencyinteger

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.

Response

Published response fields. Example properties are taken from one historical record; they describe that record, not a guaranteed schema for every response.

No recorded response is saved for this product. The field list below is the published contract; it does not contain sample values.
domainstring

The input domain, lower-cased and without www.

inputValuestring

Exactly what you passed in.

websiteUrlstring

The URL that was actually reached, after redirects.

statusstring

Only contacts_found is charged. Accepted: "contacts_found", "no_contacts_found", "unreachable".

outcomestring

Fetch result of the homepage: ok, http_403, http_429, dns_failed, timeout, tls_failed, challenged, http_5xx, …

emailCountinteger

emailCount Minimum: 0.

sameDomainCountinteger

Addresses on the input domain, subdomains included. Minimum: 0.

freeMailCountinteger

gmail, outlook and similar, published as the site contact address. Minimum: 0.

otherDomainCountinteger

otherDomainCount Minimum: 0.

excludedVendorCountinteger

Website-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.

requestsinteger

requests Minimum: 0.

tookMsinteger

tookMs Minimum: 0.

contractVersioninteger

contractVersion 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

Usage is billed through the Actor

Published FREE-plan event rates from public Apify metadata. Plan-specific rates and usage terms remain on the Actor's pricing page.

Pricing

Pay per delivered event

Apify FREE-plan rate

$4.00per 1,000 domains with at least one email

Per domain where at least one email is found. No-email domains are free.

Checked 19 Oct 2026Apify pricing

Access

One POST endpoint

  • Authenticate with an Apify Bearer token.
  • Send a JSON body to the posted Actor endpoint.
  • Read the Dataset items array returned by the run.

https://api.apify.com/v2/acts/meka.im~website-email-finder/run-sync-get-dataset-items

FAQ

Questions about the contract

Authentication, response shape, recorded data and availability.

Does checkMx verify a mailbox?

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.

How many pages are scanned?

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.

Why is there no recorded response?

No response sample has been saved yet. You can review the request and response fields in the Reference section.

How do I authenticate requests?

Send an Apify token as a Bearer token in the Authorization header, as shown in the request examples.

Are the results on this page live?

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.

Where can I find current pricing?

Current pricing and usage terms are published on the Apify Actor page.