Contact Scraper - Website Emails, Phones & Socials
Pricing
from $2.50 / 1,000 website with contacts
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
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] comemails. It drops junk likeimage@2x.png, Sentry/Wix IDs,example.comand 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@) orfree(gmail.com), withonDomainand 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
| Domain | Phone | |||
|---|---|---|---|---|
| levainbakery.com | media@levainbakery.com | +18779322161 | linkedin.com/company/levain-bakery | instagram.com/levainbakery |
| katzsdelicatessen.com | cs@katzsdelicatessen.com | +12122542246 | – | instagram.com/katzsdeli |
What data do you get?
| Field group | Fields |
|---|---|
| Contacts | primaryEmail, emails, primaryPhone, phones, address, contactPageUrl, hasContactForm |
| Social | linkedin, facebook, instagram, twitter, youtube, tiktok, pinterest, github, threads, whatsapp, telegram, discord, yelp, trustpilot, socialProfiles (all) |
| Company | domain, url, companyName, legalName, logo, title, description, language |
| Email infrastructure | emailProvider, emailSecurityGateway, mxRecords |
| Details | emailDetails (email, type, onDomain, source, page, domainAcceptsMail), phoneDetails (phone, international, country, source, page) |
| Run info | status, error, errorType, pagesCrawled, crawledUrls, pagesFailed, proxyUsed, redirectedFrom, sourceName, sourceIndex, scrapedAt |
How to use
- 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). - 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...). - Optionally set Max pages per website (default 6) and the email filters.
- 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": []}
status | Meaning | Charged? |
|---|---|---|
ok | At least one email, phone or social profile found | Yes |
no_contacts | The website loaded but showed no contact details on the pages checked | No |
error | DNS failure, timeout, blocked, HTTP error, not an HTML site (errorType says which) | No |
robots_disallowed | The site's robots.txt disallows all crawlers (see the Advanced setting) | No |
invalid_input | Not a website (e.g. a Facebook page URL, an IP address) | No |
How it works
- Homepage: it tries
https://domain, thenwww.and thenhttp://, and follows redirects. If the site moved to another domain, you getredirectedFrom. - 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,
/contactand/contact-usare tried. - 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.
- Emails come from
- 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.
- 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.
Related tools
Start from company names, then add contacts, tech stack and traffic to every lead.
- Company Name to Domain: turn a list of company names into official website domains
- Tech Stack Detector: see which CMS, ecommerce, analytics and CRM tools a site uses
- Domain Authority & Traffic Checker: bulk domain authority, backlinks and organic traffic
- SEC Form D Scraper: startups that just raised money, from SEC EDGAR
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.