Website Contact Finder: Emails, Phones and Socials by Domain avatar

Website Contact Finder: Emails, Phones and Socials by Domain

Pricing

from $9.70 / 1,000 website with a contacts

Go to Apify Store
Website Contact Finder: Emails, Phones and Socials by Domain

Website Contact Finder: Emails, Phones and Socials by Domain

Paste a list of company websites and get their contact details: emails including obfuscated ones, validated phone numbers in E.164, social profiles, postal addresses and the contact form URL. Crawls contact, about and team pages within a strict time budget.

Pricing

from $9.70 / 1,000 website with a contacts

Rating

5.0

(1)

Developer

Oski

Oski

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

Website Contact Finder

Paste a list of websites and get back the emails, phone numbers, social profiles, postal addresses and contact form for each one, read from the homepage and the pages that hold contact details (contact, about, team, imprint). Built for agencies, sales teams and founders who need a clean contact list from a pile of domains. In a live test on monzo.com it returned 3 emails, 9 validated UK phone numbers and the London office address in one record.

You pay only for websites that return a contact. Empty, blocked and unreachable sites are listed in your results for free.

Part of the UK B2B lead suite. UK Planning Applications Scraper finds the building job, Website Contact Finder finds the company's published contacts, and UK Decision Maker Finder names the director who signs off.

What you can use it for

  • Agencies enriching a prospect list of 500 local business websites before a campaign.
  • Sales teams turning a list of target accounts into a phone and email sheet for the CRM.
  • Founders building a partner or supplier list from domains found in directories.
  • Recruiters finding the careers or general inbox for a list of employers.
  • Data teams checking which sites in a list are dead, blocked or missing contact details.

How to use it

  1. Paste websites under Websites, one per line: example.com, www.example.com or a full link. Email addresses work too; the website is taken from them.
  2. If most sites are in one country, set Country for phone numbers (for example United Kingdom).
  3. Click Start. Each website takes a few seconds.
  4. When it finishes, open the Output tab and download as CSV, Excel or JSON. The status column explains every row.

While it runs, the status line at the top of the run page shows progress (for example "Website 12 of 50. 9 with contacts so far."). When it finishes, the same line says what was found and explains anything that was skipped, so you never have to read the log.

How much does it cost?

A $0.002 start fee per run, then $0.01 per website that returns at least one contact (an email, phone number, social profile or contact form). Sites that return nothing, block the request or do not load cost nothing.

Websites that return a contactCost
100about $1.00
1,000about $10.00
10,000about $100.00

The maths: $0.002 + (1,000 x $0.01) = $10.002 for 1,000 matched sites. Because misses are free, you can paste hundreds of domains without cleaning the list first. If you paste 1,000 domains and 700 return a contact, you pay about $7.

Input

FieldWhat it does
domainsWebsites, one per line: example.com, www.example.com, a full link, or an email address (its domain is used).
defaultRegionCountry used to read phone numbers without an international code: United Kingdom, UK or US.
maxPagesPerDomainAdvanced. Pages to crawl per site: homepage plus the most contact-relevant internal pages (default 5, max 20).
maxSecondsPerDomainAdvanced. Hard time stop per site (default 45 seconds).
proxyConfigurationAdvanced. Rotates IPs if a site blocks datacenter traffic. Datacenter by default; switch to Residential for tough sites.

A real job is a list of a few hundred sites in the same shape as this (mixed formats are fine):

{
"domains": [
"monzo.com",
"https://www.apify.com",
"python.org",
"www.basecamp.com"
],
"defaultRegion": "GB",
"maxPagesPerDomain": 5
}

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 ok (contacts found), no_contacts (reachable, nothing found), blocked (site refused the request) or unreachable (DNS or connection failed). Only ok rows are charged. A social_links list with every profile found is also included.

What makes the data clean:

  • Obfuscated emails decoded. sales [at] acme [dot] co [dot] uk and info(at)example(dot)com are read, as are mailto: links.
  • Phones validated by Google's libphonenumber and returned in E.164 format, so dates, prices and order numbers are never mistaken for phones.
  • Junk dropped: asset filenames like logo@2x.png, tracking addresses (Sentry, Wix) and placeholders like your@email.com.
  • Socials de-shared: LinkedIn, X/Twitter, Facebook, Instagram, YouTube, TikTok, GitHub and Pinterest, with share and intent links removed.
  • Provenance: every email and phone records the page it was found on.

Tips for bigger runs

  • Paste the whole list. Hundreds or thousands of domains in one run is fine. Misses are free, so there is no need to pre-filter dead sites.
  • Keep the default 5 pages per site. Contact pages are ranked first, so extra pages mostly add run time. Raise it only for large sites where contacts sit deep.
  • Set a per-run cost cap in the run options if you want a hard budget. The actor stops cleanly when the cap is reached.
  • Switch the proxy to Residential only if you see many blocked rows. Most business sites work on the default datacenter proxy.
  • Invalid entries (text that is not a domain, or private and internal addresses) are skipped and listed in the run log.

Scheduling and integrations

Save your list as a task and run it on a schedule in Apify, then send results to Google Sheets, a webhook, Make, Zapier or your own code through the Apify API. A minimal API call:

curl -X POST "https://api.apify.com/v2/acts/oski~website-contact-finder/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"domains": ["monzo.com", "apify.com"], "defaultRegion": "GB"}'

The sync endpoint waits up to 5 minutes. For long lists, start the run with /runs and read the dataset when it finishes.

If something looks wrong

The status line at the end of every run explains anything that was skipped or came back empty. The common messages:

MessageWhat to do
Input problem: ...Something in the input needs changing, and the message says what. The run stopped before anything was charged.
N had no public email or phoneThe site does not publish contact details on its main pages. You are not charged for these.
N blocked usSwitch Proxy to Residential under Advanced settings and run those sites again.
N could not be openedThe site is down or the domain does not exist. You are not charged.
Skipped (not a website): ...The line was not a website or email. Check for typos.

Still stuck? Open an issue on the actor page with the run link and it gets looked at quickly.

FAQ

Is it legal? It reads only public pages, with no login. You are responsible for how you use the results. Contact details of named people are personal data, so follow UK GDPR, PECR or your local privacy law, including your lawful basis and opt-outs.

Do I need an account or API key? Only an Apify account. No third-party API key or login is needed.

Why did some sites return nothing? Some sites publish no contact details, block automated visits, or render everything in JavaScript with no readable HTML. These are reported honestly as no_contacts, blocked or unreachable, and you are not charged.

How fresh is the data? Every run fetches the live website at that moment.

Does it guess emails? No. Every email was published on the site, and source_url shows where.

What if it breaks? Open an issue on the actor page and it gets fixed fast.

Other scrapers from Oski