Website Contact Scraper - Emails, Phones & Socials avatar

Website Contact Scraper - Emails, Phones & Socials

Pricing

from $0.03 / 1,000 results

Go to Apify Store
Website Contact Scraper - Emails, Phones & Socials

Website Contact Scraper - Emails, Phones & Socials

💰From $0.025/1K results | Extract public contact details from any list of websites. Finds emails, international phone numbers and LinkedIn, X, Facebook, Instagram, YouTube, TikTok and GitHub profiles by reading the pages that actually carry them - contact, about, team and imprint.

Pricing

from $0.03 / 1,000 results

Rating

0.0

(0)

Developer

Mary Lou

Mary Lou

Maintained by Community

Actor stats

3

Bookmarked

10

Total users

5

Monthly active users

a day ago

Last modified

Categories

Share

Website Contact Scraper — emails, phone numbers and social profiles

Give it a list of websites. Get back the email addresses, phone numbers and social media profiles those companies publish — ready for your CRM, your outreach list or your enrichment pipeline.

An email scraper, phone number extractor and social profile finder in one, and it is built around precision: the hard part of contact scraping is not finding strings that look like emails, it is not returning the junk.

No login, no API key, no browser. Paste domains and press Start.


What you can do with it

  • B2B lead generation — turn a list of company domains into contactable leads
  • CRM enrichment — fill in missing contact details for accounts you already have
  • Sales prospecting — take a list from any source and get the contact layer
  • Recruitment outreach — find how to reach the companies you are targeting
  • Agency and partner research — build a contact sheet for a whole market
  • Data cleaning — re-check a stale contact list and see what has changed
  • Pair it with a search or jobs scraper — collect domains there, contacts here

How to scrape contact details

1. Paste your websites into Websites, one per line. https:// is optional — example.com works. So does a row pasted from a spreadsheet, an email address (info@acme.com reads acme.com), or a company name with no website (Gymshark is tried as gymshark.com, and the log says so).

2. Press Start. Every other field has a sensible default.

A list of 500 domains at default settings takes a few minutes.


It reads the right pages, not every page

A contact scraper that spiders an entire website burns a hundred requests to find an address that was in the footer of the homepage. This one scores every internal link and visits only the pages that actually carry contact details, shallowest first:

PriorityPage types
Highest/contact, /contact-us, /kontakt, /contacto, /contatti
/impressum, /imprint, /legal-notice, /mentions-legales
/about, /about-us, /company, /quienes-somos, /ueber-uns, /over-ons
/team, /people, /staff, /leadership, /management
/support, /help, /customer-service
Lowest/press, /media, /newsroom, /privacy, /datenschutz

Default is 8 pages per site, which finds almost everything. Raise Max pages per site for sprawling corporate sites.

Multi-language page names are recognised, so German, French, Spanish, Italian and Dutch sites work as well as English ones.


A site that will not load gets a second try

On a real list of domains, some sites will not load the first time. Before one is reported as failed, it is tried once more, in a way that matches what went wrong:

What went wrongThe second try
The domain does not resolveThe other spelling: www.acme.com for acme.com, and back
Certificate expired, or issued for another namewww., then with certificate checks off, then plain http://
Connection refused on httpsPlain http://, then www.
Timed outA longer timeout, then http://
403, 429 or a bot check page: the site refused the scraperAnother browser's fingerprint, through Apify's proxy when the run had none
The page given is gone (404)The site's home page
The proxy would not connectWithout the proxy

A start page that redirects to another domain has usually moved, so the new address is read: cocacola.com reads coca-cola.com. The exceptions are a domain-parking or for-sale page and a sign-in page. A domain that redirects to its Facebook or Instagram page is delivered with that profile as its contact.

No run fails because of the list. A site that still cannot be read costs only itself: it is listed in the run summary with the reason, and it is not charged. An empty list, or one where no site loads at all, ends the run normally, and the status message says why.


Input

FieldWhat it does
WebsitesThe domains to scan, one per line. Links, bare domains, email addresses and company names all work
Max pages per siteHow deep to go on each site. Default 8
Max resultsHard cap on how many websites are delivered
Skip sites with no contactsLeave empty sites out of the dataset entirely
Max concurrencyHow many sites to scan at once. Default 5
Delay between pagesPoliteness pause within a single site
ProxyOptional. Most sites serve their contact page to anyone

Output

One row per website. Export as JSON, CSV, Excel, XML or RSS.

{
"url": "https://apify.com/",
"domain": "apify.com",
"emails": ["hello@apify.com", "privacy@apify.com"],
"phones": ["+14242545300"],
"socials": [
"https://linkedin.com/company/apify",
"https://x.com/apify",
"https://youtube.com/c/Apify",
"https://github.com/apify"
],
"socials_by_network": { "linkedin": ["https://linkedin.com/company/apify"] },
"has_contact": true,
"pages_crawled": 4,
"pages": ["https://apify.com/", "https://apify.com/contact"],
"errors": []
}
FieldNotes
domainLowercased, no www.. This is the dedup key — one row per domain
emailsDeduplicated and validated. See the filtering below
phonesE.164-style digits, from tel: links and page text
socialsCanonical profile URLs, one entry per profile
socials_by_networkThe same profiles grouped, for when you only want the LinkedIn
has_contactFalse when the site yielded nothing at all
pagesExactly which URLs were read, so any result traces back to its source
errorsPages that could not be read, with the reason

Networks covered: LinkedIn, X/Twitter, Facebook, Instagram, YouTube, TikTok, GitHub.


What makes the output usable

Most contact scrapers hand you a pile of junk to clean up. Every rule below exists because a real page produced a real false positive:

Not emails:

  • icon@2x.png, font@latin.woff2 — sprite and asset filenames parse as addresses
  • Sentry DSNs — every site using Sentry has one whose userinfo looks like an email
  • you@example.com, name@domain.com — template placeholders
  • ...our service@scale.while others... — prose running into an address. Caught by validating the top-level domain against reality rather than trusting the regex

Not phone numbers: years, prices, VAT numbers, product SKUs and timestamps. A number has to be 8–15 digits after normalisation and not be 0000000000.

Not four copies of one profile. Social links arrive escaped inside JavaScript and JSON (...\/company\/acme\\) and with punctuation stuck to them from surrounding prose. Every link is unescaped and canonicalised — apify.com alone produced six spellings of the same LinkedIn page before this was fixed. The same goes for a network's mobile and country hosts (m.facebook.com, uk.linkedin.com) and a YouTube channel's tabs (/videos, /featured).

Not the site it redirected to. A link on a company's own page can redirect anywhere. A naive crawler follows it and quietly returns Google's contact details instead of the company's. Only the start page may move the crawl to a new domain, because then the company itself has moved.

Not third parties quoted in a blog post. The crawler stays on pages about the company itself, so a competitor mentioned in an article does not end up in your row.

Not a bot check page. Some sites answer a scraper with a challenge instead of the site: "Access Denied", or "verify that you're not a robot". A naive crawler delivers that as a company with no contact details, and you pay for the row. Checks from Cloudflare, Akamai, AWS WAF, DataDome, PerimeterX, Imperva, Kasada, SiteGround, Sucuri and Wordfence are recognised, and so is a near-blank page that talks about robots or verification. The same goes for a site whose contact page is walled or refused while its home page loads: with nothing found, "no contacts" would not be the truth. The site gets its second try, and if it is still walled it is reported as failed and not charged. Ordinary pages that merely carry those vendors' scripts are told apart by their content.

Not a "Redirecting..." page. Some sites send visitors on with a script or a meta refresh. Those pages are followed to where they lead. gymshark.com used to come back empty; it now yields its press and support addresses and its social profiles. A language or country chooser is followed into the site the same way: bestbuy.com now reads its contact and support pages.


Pricing

From $0.025 per 1,000 websites, plus Apify platform usage.

Apify planPrice per 1,000 websites
Free, Starter$0.05
Scale, Business, Enterprise$0.025

Worth comparing carefully, because a result here is a whole website, not a page. The widely used alternative charges per 1,000 pages, and this crawler reads up to 8 pages per site — so on a typical site you pay a fraction of what per-page pricing costs, for the same answer.

Platform usage is billed by Apify at your own plan rate and is small here: about $0.08 per 1,000 websites measured, since no proxy is needed by default.

Two ways to keep it tight:

  • Sites that could not be loaded at all, even on the second try (a dead domain, a DNS failure, a site that only ever showed a bot check), are reported as failures and are not charged as results.
  • Turn on Skip sites with no contacts and you are only charged for websites that actually yielded something.

Set Max results to cap any single run exactly.


FAQ

Is scraping contact details legal? It reads pages that companies publish deliberately, with no login and no paywall — the same pages a person visits to find a phone number. Business contact details are exactly what a /contact page is for. What you then do with the data is governed by GDPR, CAN-SPAM and similar rules, and that part is your responsibility: have a lawful basis before you email anyone.

Do I need a proxy? Usually not. Most sites serve their own contact page to anyone. Turn one on if you are scanning thousands of domains or hitting a WAF.

What happens when a site will not load? It is tried once more at the end of the run, in a way matched to the error: the www. spelling, plain http://, the home page, or another browser fingerprint (see the table above). If that fails too, the site is listed in the run summary (SUMMARY.failedSites) with the reason, and it costs nothing. The other sites carry on either way.

I only have company names, not websites. Does it work? Partly. A name with no website is tried as name.com (The North Face -> thenorthface.com), and the log notes it as a guess. That works well for brands and less well for small businesses, so give the website itself whenever you have it. Every entry read this way is listed in SUMMARY.readAs.

Why did a site come back empty? Either it genuinely publishes no contact details, or they are rendered by JavaScript, or they are inside an image to defeat scrapers. Check pages to see what was read and errors for anything that failed. A bot check page is never delivered as an empty row: that site is reported as failed instead, in SUMMARY.failedSites.

Can it find personal emails of specific employees? No. It returns what a company publishes on its own website. It does not guess addresses from name patterns and it does not search anywhere else.

Does it work on non-English websites? Yes. impressum, kontakt, contacto, contatti, over-ons, quienes-somos and others are all recognised page names.

How many pages does it read per site? 8 by default, chosen by relevance rather than crawl order. Raise it for large corporate sites.

How fast is it? Measured: 4 sites in 5 seconds at concurrency 4, including one dead domain correctly reported as a failure.

Can I run it on a schedule? Yes. Re-check a domain list weekly and diff the results to catch changes.


  • LinkedIn Jobs Scraper — job postings without a login or cookie. Companies that are hiring are companies worth contacting
  • Google Search Scraper — build domain lists from site: and intent queries, then enrich them here
  • TikTok Ad Library Scraper, Meta Ads Library Scraper, Google Ads Transparency Center Scraper — competitor ad intelligence