Contact Scraper - Website Emails, Phones & Socials avatar

Contact Scraper - Website Emails, Phones & Socials

Pricing

from $2.50 / 1,000 website with contacts

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

Contact Scraper - Website Emails, Phones & Socials

Extract emails, phone numbers and social media profiles (LinkedIn, Facebook, Instagram, X, YouTube, TikTok...) from any list of company websites or domains. One clean row per website, contact-page aware, email provider (MX) detection. Pay only for websites with contacts.

Pricing

from $2.50 / 1,000 website with contacts

Rating

0.0

(0)

Developer

Wrenfield Data

Wrenfield Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 hours ago

Last modified

Share

Website Contact Scraper - Emails, Phones & Social Links

Turn a list of company websites or domains into contact data. For every website you get emails, phone numbers (E.164), LinkedIn, Facebook, Instagram, X/Twitter, YouTube, TikTok and other social profiles, the contact page, postal address, and the domain's email provider (Google Workspace, Microsoft 365...). You get one clean row per website, ready for your CRM, Clay, n8n, Make, Zapier or an AI agent.

  • 🎯 Contact-page aware: starts at the homepage, then visits only the pages most likely to list contacts (Contact, About, Team, Locations, Impressum / Mentions légales / Aviso legal...) in 20+ languages. It doesn't crawl the whole site.
  • 💸 Pay only for websites with contacts: a flat price per website, no matter how many pages were checked. Dead domains, blocked sites and sites with no contacts return a free row that says why.
  • ✅ Clean data: decodes Cloudflare-protected and name [at] domain [dot] com emails. It drops junk like image@2x.png, Sentry/Wix IDs, example.com and template placeholders, and filters out emails whose domain can't receive mail. Phones are validated and normalised to E.164.
  • 🏷️ Email labels: each email is tagged role (info@, sales@), personal (jane.doe@) or free (gmail.com), with onDomain and the page it was found on. One switch keeps only role-based emails.
  • 📬 Email provider detection: from MX records you get Google Workspace, Microsoft 365, Zoho... plus security gateways (Proofpoint, Mimecast, Barracuda), which is useful for segmenting cold-email lists.
  • ⚡ Fast and light: plain HTTP with a real-browser TLS fingerprint, no headless browser. In our cloud tests 3-25 websites took 7-20 s, and 500 mixed websites took about 3 minutes (1 GB memory).

💸 $4 per 1,000 websites with contacts found. Websites with no emails, phones or social links are free. Try it on Apify's free plan ($5 of monthly credit, no credit card).

Sample output

DomainEmailPhoneLinkedInInstagram
levainbakery.commedia@levainbakery.com+18779322161linkedin.com/company/levain-bakeryinstagram.com/levainbakery
katzsdelicatessen.comcs@katzsdelicatessen.com+12122542246–instagram.com/katzsdeli

What data do you get?

Field groupFields
ContactsprimaryEmail, emails, primaryPhone, phones, address, contactPageUrl, hasContactForm
Sociallinkedin, facebook, instagram, twitter, youtube, tiktok, pinterest, github, threads, whatsapp, telegram, discord, yelp, trustpilot, socialProfiles (all)
Companydomain, url, companyName, legalName, logo, title, description, language
Email infrastructureemailProvider, emailSecurityGateway, mxRecords
DetailsemailDetails (email, type, onDomain, source, page, domainAcceptsMail), phoneDetails (phone, international, country, source, page)
Run infostatus, error, errorType, pagesCrawled, crawledUrls, pagesFailed, proxyUsed, redirectedFrom, sourceName, sourceIndex, scrapedAt

How to use

  1. Paste websites or domains into Websites / domains, one per line: acme.com, https://www.acme.com, acme.com/contact. Email addresses also work (their domain is used).
  2. Or enrich a dataset: put the ID of a dataset from another Actor (for example Google Maps Scraper or Company Name to Domain Finder) into Enrich an existing dataset. The website field is detected automatically (website, url, domain...).
  3. Optionally set Max pages per website (default 6) and the email filters.
  4. Click Start. Download the results as JSON, CSV or Excel. The Leads view is flat and CSV-ready. You can also call the Actor through the API or MCP.

Input example

{
"urls": ["apify.com", "https://www.katzsdelicatessen.com", "levainbakery.com", "bosch.de"],
"maxPagesPerDomain": 6,
"extractPhones": true,
"extractSocials": true,
"onlyRoleEmails": false,
"checkMx": true
}

Output example

A real row from a cloud test run (some fields trimmed):

{
"input": "https://www.katzsdelicatessen.com",
"domain": "katzsdelicatessen.com",
"url": "https://katzsdelicatessen.com/",
"status": "ok",
"companyName": "Katz's Delicatessen",
"primaryEmail": "press@katzsdelicatessen.com",
"emails": ["press@katzsdelicatessen.com", "cs@katzsdelicatessen.com", "events@katzsdelicatessen.com"],
"primaryPhone": "+12122542246",
"phones": ["+12122542246"],
"facebook": "https://www.facebook.com/katzsdeli",
"instagram": "https://www.instagram.com/katzsdeli",
"twitter": "https://x.com/KatzsDeli",
"linkedin": null,
"contactPageUrl": "https://katzsdelicatessen.com/contact",
"hasContactForm": true,
"emailProvider": "Google Workspace",
"emailSecurityGateway": null,
"emailDetails": [
{"email": "press@katzsdelicatessen.com", "type": "role", "onDomain": true, "source": "mailto", "page": "https://katzsdelicatessen.com/", "domainAcceptsMail": true},
{"email": "events@katzsdelicatessen.com", "type": "role", "onDomain": true, "source": "text", "page": "https://katzsdelicatessen.com/faqs", "domainAcceptsMail": true}
],
"phoneDetails": [
{"phone": "+12122542246", "international": "+1 212-254-2246", "country": "US", "source": "tel", "page": "https://katzsdelicatessen.com/"}
],
"pagesCrawled": 6
}

A website without contacts, or one that fails, returns a free row:

{"input": "notarealdomain-xyz123.com", "domain": "notarealdomain-xyz123.com", "status": "error", "errorType": "dns_not_found", "error": "Domain does not resolve (DNS lookup failed). Not charged.", "emails": [], "phones": [], "socialProfiles": []}
statusMeaningCharged?
okAt least one email, phone or social profile foundYes
no_contactsThe website loaded but showed no contact details on the pages checkedNo
errorDNS failure, timeout, blocked, HTTP error, not an HTML site (errorType says which)No
robots_disallowedThe site's robots.txt disallows all crawlers (see the Advanced setting)No
invalid_inputNot a website (e.g. a Facebook page URL, an IP address)No

How it works

  1. Homepage: it tries https://domain, then www. and then http://, and follows redirects. If the site moved to another domain, you get redirectedFrom.
  2. Page selection: links are ranked by how likely they hold contacts (contact > impressum/legal > about > team > locations > support), using the URL and the link text in 20+ languages. Blog posts and deep paths are skipped. If there's no contact link, /contact and /contact-us are tried.
  3. Extraction:
    • Emails come from mailto: links, schema.org JSON-LD, Cloudflare email protection, visible text, and obfuscated [at]/(at) forms.
    • Phones come from tel: links, JSON-LD, and text next to a phone label. Each is validated with Google's libphonenumber.
    • Socials come from profile links and JSON-LD sameAs. Share buttons and single posts are ignored.
  4. Clean-up: junk emails are filtered out, and email domains are checked in DNS. Results are ranked so the best contact comes first: own domain, explicit mailto, found on the contact page.
  5. Blocking: pages are fetched directly with a real-browser TLS fingerprint. A website that answers with a bot check, 403 or 429 is retried through Apify Proxy. You can also enable a residential fallback.

Pricing

This Actor uses pay-per-event pricing. You pay for website-contacts: one website that returned at least one email, phone number or social profile. The price is per website, not per page or per email. Proxy and compute are included. Websites with no contacts, errors, invalid inputs and robots-disallowed sites are free. Check the Pricing tab for the current price.

You can cap spending with Max websites with contacts or the run's maximum cost. The Actor stops cleanly at the limit and doesn't start websites it can't charge for.

Start from company names, then add contacts, tech stack and traffic to every lead.

All of these are maintained by the same developer and export flat JSON, CSV or Excel, so you can feed one tool's dataset into the next.

FAQ

Do I need a login, cookies or an API key? No. The Actor only reads public company websites.

Why did a website return no emails? Many companies publish only a contact form or a phone number. Others hide the email in an image or load it with JavaScript after the page renders, and this Actor doesn't run a browser. You still get phones, socials, hasContactForm and contactPageUrl when available. If nothing at all is found, the row is free.

Does it find personal emails of employees? Only if the company publishes them on its own website (for example a team page). It doesn't guess email patterns, query third-party databases, or scrape LinkedIn. Use Only role-based emails to keep just info@/sales@/support@-style addresses.

Can I enrich my Google Maps results? Yes. Put the Google Maps run's dataset ID into Enrich an existing dataset. The website field is read automatically, and each row gets sourceName (the place name) and sourceIndex so you can join the results back.

How accurate is the email provider? It comes straight from the domain's public MX records. When a security gateway (Proofpoint, Mimecast...) sits in front of the mailbox provider, emailSecurityGateway is set and emailProvider may be empty.

Are the emails verified? Each email's domain is checked to accept mail (MX record), which removes typos and dead domains. Individual mailboxes are not SMTP-probed. Run a dedicated email verifier before large cold-email sends.

What about websites behind Cloudflare or other bot protection? Requests use a real-browser TLS fingerprint, and blocked requests are retried through Apify Proxy. Sites that only show content after a JavaScript challenge may still fail. They return a free error row with errorType: blocked.

Can I use it from an AI agent, n8n, Make or Zapier? Yes. Call it through the Apify API, the MCP server or any integration with a single domain and read the first dataset row. Rows are small and flat.

Is it legal to scrape contact details from websites? The Actor collects information that businesses publish on their own public websites, respects robots.txt by default, and doesn't log in. Business contact data can still be personal data under GDPR, CCPA and similar laws, especially named emails like jane.doe@company.com. You are responsible for having a lawful basis for processing it and for following anti-spam laws (CAN-SPAM, PECR, CASL) when you contact people. If you are unsure, consult a lawyer.

Something didn't work? Open an issue on the Issues tab with the run ID and the website. We usually fix things within a day.