Domain Contact Finder — Emails, Phones & Socials from Websites
Pricing
from $2.00 / 1,000 contact founds
Domain Contact Finder — Emails, Phones & Socials from Websites
Turn a list of company domains into usable contacts. Extracts emails, phone numbers, and social profile links from websites — structured output for CRM, outreach, and agent workflows. Pay only when a contact is found ($0.002 per contact-found).
Pricing
from $2.00 / 1,000 contact founds
Rating
0.0
(0)
Developer
Industrial AI
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 hours ago
Last modified
Categories
Share
Find Company Emails, Phones & Socials from Domains
When to call this Actor
Use when a human or agent needs public contact details from company websites:
- "Get emails from these company websites"
- "Find phone numbers and LinkedIn for these domains"
- "Enrich this domain list with public emails/socials"
Do not use for: inbox scraping, CRM exports, LinkedIn Sales Nav, CAPTCHA/login bypass, or people-search APIs.
Agent quickstart
Input (prefer): { "domains": ["acme.com", "https://example.com"] }
Also accepted: startUrls (RequestList sources)
Output: one dataset item per domain → emails, externalEmails, phones, socials, status
Example prompts → input
| User says | Pass |
|---|---|
| Get emails from acme.com and globex.io | domains: ["acme.com","globex.io"] |
| Contacts from https://www.acme.com/about | domains: ["https://www.acme.com/about"] |
| First 25 of this list only | domains: [...], maxDomains: 25 |
Pricing (PPE): domain-processed per domain; contact-found when emails/phones > 0 (socials alone do not bill contact-found).
What this Actor does
Given one or more company domains or website URLs, the Actor:
- Normalizes each domain to
https:// - Crawls high-signal pages:
/,/contact,/contact-us,/about,/about-us,/team,/impressum,/legal,/support - Extracts emails (including obfuscated
[at]/(dot)/mailto:/ HTML entities) - Extracts phone numbers (
tel:links + patterns) - Extracts social profiles: LinkedIn, X/Twitter, Facebook, Instagram, YouTube, GitHub, TikTok
- Filters junk / placeholder emails and splits same-domain emails vs externalEmails
- Optionally verifies emails with format + DNS MX/A checks (no third-party API)
Output: one dataset item per domain.
Uses CheerioCrawler (HTTP + HTML parse) instead of a full browser — lower compute cost and faster runs.
Input
| Field | Type | Default | Description |
|---|---|---|---|
domains | string[] | — | Domains or URLs (acme.com, https://www.acme.com) |
startUrls | RequestListSources | — | Alternative URL list |
maxPagesPerDomain | integer | 8 | Contact-ish paths to fetch per domain (1–20) |
maxDomains | integer | — | Optional cap on domains processed |
includeEmailVerification | boolean | false | Format + MX/A DNS verification |
proxyConfiguration | object | Apify Proxy on | Recommended for larger batches |
Example input
{"domains": ["apify.com", "crawlee.dev"],"maxPagesPerDomain": 8,"includeEmailVerification": false,"proxyConfiguration": { "useApifyProxy": true }}
Output
One item per domain:
{"domain": "apify.com","urls": ["https://apify.com/", "https://apify.com/contact"],"emails": ["hello@apify.com"],"externalEmails": [],"phones": ["+420123456789"],"socials": {"linkedin": ["https://www.linkedin.com/company/apifytech"],"twitter": ["https://twitter.com/apify"],"facebook": [],"instagram": [],"youtube": [],"github": ["https://github.com/apify"],"tiktok": []},"pagesScanned": 6,"status": "ok","error": null}
emails— addresses on the same domain (or subdomain)externalEmails— other addresses found on the pages (partners, tools, etc.)status—ok|partial|failed
Pricing (Pay-per-event)
Suggested Store pricing (configure in Apify Console → Actor → Monetization):
| Event | When charged | Suggested price |
|---|---|---|
contact-found (primary) | Domain finished with ≥1 email or phone | ~$2.00 / 1,000 events ($0.002 each) |
domain-processed | Every finished domain | ~$0.50 / 1,000 events ($0.0005 each) |
Do not enable pay-per-event + usage pass-through — keep PPE-only so agent budgets stay predictable.
Synthetic platform events (e.g. actor start) may appear separately; leave defaults unless you have a reason to change them.
Cost example
- 1,000 domains with contacts → ~$2.00 on
contact-found(+ smalldomain-processedfee) - Domains with no email/phone still emit
domain-processedonly
For AI agents / MCP
- Actor name:
gary_sells/domain-contact-finder(IDcvhnTR9Q5TvW2qWRH) - Prefer input field:
domains(string list of domains or URLs) - PPE events:
domain-processed(every finished domain),contact-found(emails or phones found; socials alone do not bill) - Constraints: public HTML only — no inbox access, no login/CAPTCHA bypass
- Discoverable via Apify Store / MCP
search-actorsonce published with PPE-only + Limited permissions + Standby off (allowsAgenticUsers)
API & agent usage
curl "https://api.apify.com/v2/acts/USERNAME~domain-contact-finder/runs" \-H "Authorization: Bearer $APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"domains":["example.com"],"maxPagesPerDomain":8}'
Or use the Apify client / Store “Try for free” / AI agent tool integrations. Charge events map cleanly to tool-call budgets.
Local PPE dry-run:
$ACTOR_TEST_PAY_PER_EVENT=true apify run -p
Inspect storage/datasets/charging_log/ for charged events (local default price $1/event).
Legal & ethics disclaimer
This Actor collects publicly available information from websites you specify. It does not bypass logins, CAPTCHAs, or access private inboxes.
You are responsible for complying with applicable laws (including GDPR/CCPA where relevant), website terms, and anti-spam rules (e.g. CAN-SPAM). Use contact data only for lawful purposes. The authors provide no warranty and accept no liability for misuse.
How it works (technical)
- Runtime: Node.js + Crawlee
CheerioCrawler+ Apify SDK - PPE:
Actor.charge({ eventName: 'domain-processed' | 'contact-found' }) - Permissions: Designed for limited Actor permissions (default). No Standby mode.
- Email decode:
[at]/(at)/[dot]/mailto:/ HTML entities - Junk filters: noreply, example.com placeholders, asset false-positives, etc.
Local development
cd domain-contact-findernpm install# dry-run on sample domainsnpm run dry-run# orapify run -p
Deploy (after apify login):
$apify push
Then set PPE prices and keep Limited permissions in Apify Console.
Changelog
- 1.0.3 — Agent-findability: richer input descriptions, Store/MCP title & description, README when-to-call + AI/MCP blurb.
- 1.0.2 — README charging_log path fix; dataset schema
emailVerification. - 1.0 — Initial Store-ready release: Cheerio crawl, PPE events, MX optional verify, social extractors.