Public B2B Email Finder & MX Verifier
Pricing
from $1.07 / 1,000 item processeds
Public B2B Email Finder & MX Verifier
Find person-bound business emails visibly published on company websites and verify syntax and public MX routing.
Pricing
from $1.07 / 1,000 item processeds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
B2B Email Finder & Public MX Verifier
Find business emails only when a company has visibly published an address beside the requested person's name on its own public website. Every result preserves the public evidence page and checks syntax plus public DNS MX routing.
This is an evidence-first alternative to guessed address patterns. It is designed for B2B research where a buyer needs to review the source before contacting anyone.
Who is it for
- Sales and partnership researchers checking published business contacts.
- Compliance teams that require a source URL and name context.
- Agencies enriching a known list of people and company domains.
- AI agents that need a conservative, auditable public-contact lookup.
What you get
For each requested person and company domain, the Actor returns one outcome row. A found email must be publicly visible on that company domain in bounded context with the requested full name.
- Public source URL and short evidence snippets.
- Normalized email and conservative role/disposable classification.
- Syntax validation and public MX routing result.
- Explicit
NOT_FOUNDorBLOCKED_OR_UNAVAILABLEoutcomes instead of generated alternatives.
Input recipe
Use a small, specific batch first. Domains must be company website domains, without paths.
{"people": [{"firstName": "Jane","lastName": "Smith","domain": "company.com"}],"maxPagesPerDomain": 4}
Input settings
| Input | Type | Default | Description |
|---|---|---|---|
people | array | required | One to 100 person and company-domain targets. Duplicate targets are merged. |
people[].firstName | string | required | Requested person's first name. |
people[].lastName | string | required | Requested person's last name. |
people[].domain | string | required | Company website domain, without a path. |
maxPagesPerDomain | integer | 8 | One to 20 root, team, leadership, contact, and sitemap-discovered pages to inspect. |
Output example
{"firstName": "Jane","lastName": "Smith","fullName": "Jane Smith","companyDomain": "company.com","email": "jane.smith@company.com","normalizedEmail": "jane.smith@company.com","status": "PUBLIC_EVIDENCE_MX_READY","emailSourceUrl": "https://company.com/team","emailEvidence": "Contact Jane Smith at jane.smith@company.com","identityEvidence": "Jane Smith, Partnerships","validSyntax": true,"mxFound": true,"mxRecords": ["mail.company.com"],"isDisposable": false,"isRoleAccount": false,"verificationScope": "Public syntax and DNS MX routing only; no SMTP mailbox probe.","checkedAt": "2026-08-29T00:00:00.000Z"}
Output fields
| Field | Meaning |
|---|---|
firstName, lastName, fullName | Requested and normalized person context. |
companyDomain | Requested company website domain. |
email, normalizedEmail | Public person-bound email, or null when none was found. |
status | PUBLIC_EVIDENCE_MX_READY, PUBLIC_EVIDENCE_NO_MX, NOT_FOUND, or BLOCKED_OR_UNAVAILABLE. |
emailSourceUrl | Company page that visibly published the matching email. |
emailEvidence, identityEvidence | Short same-page public context for the address and requested name. |
validSyntax | Whether the returned value has valid email syntax. |
mxFound, mxRecords | Public DNS mail-routing result; this is not mailbox deliverability. |
isDisposable, isRoleAccount | Conservative local classifications of a returned address. |
verificationScope | Boundaries of this verification result. |
checkedAt | ISO timestamp for the lookup. |
Pricing
The Actor charges a small one-time Start event per run and an Item processed event for each dataset row produced. The per-item price has volume discounts by Apify plan; see the live Pricing tab for current rates. A row is produced for every requested target, including an explicit no-result outcome.
Input recipes
Check a single public contact
Use the input recipe above with maxPagesPerDomain: 4 for a quick evidence-first lookup.
Enrich a research batch
Provide multiple people from known company domains. Start with four pages per domain, then increase the page limit only where the company uses a large public team directory.
{"people": [{"firstName":"Jane","lastName":"Smith","domain":"company.com"},{"firstName":"Alex","lastName":"Lee","domain":"example.org"}],"maxPagesPerDomain": 8}
API usage
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('fetch_cat/email-finder-api-scraper').call({people: [{ firstName: 'Jane', lastName: 'Smith', domain: 'company.com' }],maxPagesPerDomain: 4,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("fetch_cat/email-finder-api-scraper").call(run_input={"people": [{"firstName": "Jane", "lastName": "Smith", "domain": "company.com"}],"maxPagesPerDomain": 4,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~email-finder-api-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"people":[{"firstName":"Jane","lastName":"Smith","domain":"company.com"}],"maxPagesPerDomain":4}'
MCP and AI agents
Add Apify MCP to Claude Code, then ask for source-cited public contact research.
$claude mcp add apify -- npx -y @apify/mcp-server
{"mcpServers": {"apify": {"command": "npx","args": ["-y", "@apify/mcp-server"],"env": {"APIFY_TOKEN": "YOUR_APIFY_TOKEN"}}}}
Example prompt: “Run fetch_cat/email-finder-api-scraper for Jane Smith at company.com and return only rows with source URLs and MX status.”
Use the hosted MCP tool catalog at Apify MCP when your client supports it.
Tips
- Use the legal company domain, not a social profile or a URL path.
- Keep names specific; initials reduce reliable same-page identity matching.
- Begin with four pages per domain to control run scope.
- Filter exports by
statusand retainemailSourceUrlfor review.
Limits and responsible use
The Actor checks only public company-web content. It does not generate email patterns, use people databases, sign in, bypass access controls, or test SMTP recipients. MX routing indicates that a domain advertises mail routing; it does not prove a mailbox exists, accepts mail, or grants permission to contact a person.
Respect applicable privacy, marketing, and data-protection obligations before using any contact data.
FAQ
Why is email empty?
The inspected public pages did not visibly contain both the requested full name and a same-domain email in the required bounded context.
Does MX verification mean an address is deliverable?
No. It only checks public DNS mail-routing records for the email domain. It does not perform SMTP recipient verification.
Why did I receive BLOCKED_OR_UNAVAILABLE?
The company site could not be inspected reliably within the configured scope. Keep the source URL/status in your workflow and retry later if appropriate.
Can I use a larger batch?
Yes, up to 100 targets. Start with a smaller representative batch so you can review source evidence and output statuses first.
Related Actors
- Decision Maker Email Finder for public company-site contact discovery.
- Website Contact Finder for domain-level public contact extraction.
- Company Website Scraper for source-page collection.
- Email MX Deliverability Checker for domain routing checks.
- Sitemap URL Extractor for public site URL discovery.
Support
For help, include the target domain, returned status, and emailSourceUrl when present. Do not send credentials or private contact lists in a support request.