Website Contact Finder avatar

Website Contact Finder

Pricing

from $5.00 / 1,000 results

Go to Apify Store
Website Contact Finder

Website Contact Finder

Turn a list of domains into contacts: emails (even obfuscated), phone numbers, social profiles, and addresses. Crawls the contact and about pages. No API key.

Pricing

from $5.00 / 1,000 results

Rating

0.0

(0)

Developer

Oski

Oski

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Turn a list of websites into contacts. Give it domains, get back emails, phone numbers, social profiles, and postal addresses for each one, pulled from the homepage and the pages that actually hold contact details (contact, about, team, imprint). No API key, no third-party data source, no setup.

One clean record per website, ready for a CRM, an outreach list, or enrichment.

Why this one

Most contact scrapers either wrap a third-party API that breaks when the upstream throttles, or spray a page with a naive email regex and hand you logo@2x.png. This one is built for the two things that actually matter: finding the contact, and being right about it.

  • Finds obfuscated emails. sales [at] acme [dot] co [dot] uk and info(at)example(dot)com are decoded, not missed. mailto: links are read directly.
  • Real phone numbers, not noise. Every number is validated by Google's libphonenumber against the site's country, so dates, prices and order IDs are never returned as phones. Output is clean E.164 (+441134960000).
  • Junk filtered out. Asset filenames (logo@2x.png), analytics/telemetry (sentry, wix), and template placeholders (your@email.com) are dropped.
  • Social profiles, de-shared. LinkedIn, X/Twitter, Facebook, Instagram, YouTube, TikTok, GitHub, Pinterest, one profile per platform, with share/intent links removed.
  • Provenance on every item. Each email and phone records the exact page it was found on.
  • Never hangs. A hard page and time budget per site means one slow or hostile website can't stall your run.
  • Honest nulls. A site with no discoverable contacts is reported as no_contacts, not padded with guesses, and you are not charged for it.

Input

FieldWhat it does
domainsWebsites to process: bare domain (example.com), www host, or full URL. One record per site.
maxPagesPerDomainPages to crawl per site: homepage + the most contact-relevant internal pages (default 5, max 20).
defaultRegionCountry code (e.g. GB, US, DE) for validating phone numbers with no country code. The site's own ccTLD (.co.uk, .de) overrides it automatically.
maxSecondsPerDomainHard time stop per site (default 45s).
proxyConfigurationRotates IPs if a site blocks datacenter traffic. Datacenter by default; switch to Residential for tough sites.
{
"domains": ["apify.com", "https://www.monzo.com"],
"maxPagesPerDomain": 5,
"defaultRegion": "GB"
}

Output

One record per website:

{
"domain": "monzo.com",
"input_url": "https://www.monzo.com",
"final_url": "https://monzo.com/",
"status": "ok",
"http_status": 200,
"company_name": "Monzo Bank",
"primary_email": "help@monzo.com",
"emails": ["help@monzo.com", "bereavements@monzo.com"],
"primary_phone": "+441722580180",
"phones": ["+441722580180", "+443444111444"],
"socials": {
"instagram": "https://instagram.com/monzo",
"facebook": "https://facebook.com/monzobank",
"linkedin": "https://linkedin.com/company/monzo-bank"
},
"contact_form_url": "https://monzo.com/contact",
"addresses": ["Broadwalk House, 5 Appold St, London, EC2A 2AG"],
"emails_detail": [
{"value": "help@monzo.com", "on_domain": true, "obfuscated": false, "source_url": "https://monzo.com/money-worries"}
],
"phones_detail": [
{"value": "+441722580180", "source": "text", "source_url": "https://monzo.com/money-worries"}
],
"pages_crawled": ["https://monzo.com/", "https://monzo.com/money-worries"],
"pages_count": 2,
"error": null,
"scraped_at": "2026-07-21T18:30:00+00:00"
}

status is one of ok (contacts found), no_contacts (reachable, nothing found), blocked (site refused the request), unreachable (DNS/connection failed), or invalid (not a usable domain).

Pricing

Pay per event: a tiny charge to start the run, then a per-website charge only for websites that return at least one contact. Empty, blocked and unreachable sites are still reported for your records, but you are never charged for them.

Good to know

  • Reads only public pages. No login, no private data, polite rate limits and a small page budget per site.
  • Sites rendered entirely in JavaScript with no server-side HTML are best-effort; if a homepage ships no readable content, the site is reported honestly rather than guessed at.
  • Phone region defaults to defaultRegion but is overridden by the site's country domain when it has one.