Website Contact Scraper - Emails, Phones & Socials avatar

Website Contact Scraper - Emails, Phones & Socials

Pricing

from $0.15 / 1,000 results

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

Website Contact Scraper - Emails, Phones & Socials

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. No login or API key.

Pricing

from $0.15 / 1,000 results

Rating

5.0

(1)

Developer

Mary Lou

Mary Lou

Maintained by Community

Actor stats

2

Bookmarked

2

Total users

1

Monthly active users

2 days 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.

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.


Input

FieldWhat it does
WebsitesThe domains to scan, one per line
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.

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.

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.


Pricing

Pay per website delivered, plus Apify platform usage.

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 — a dead domain, a DNS failure — 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.

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.

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