Contact Details Scraper
Pricing
from $1.50 / 1,000 results
Contact Details Scraper
Email extractor and lead scraper to extract and download emails, phone numbers, Facebook, Twitter, LinkedIn, Instagram, Threads, Snapchat, and Telegram profiles from any website. Extract contact information at scale from lists of URLs and download the data as Excel, CSV, JSON, HTML, and XML.
Pricing
from $1.50 / 1,000 results
Rating
5.0
(2)
Developer
Nogards
Maintained by CommunityActor stats
1
Bookmarked
9
Total users
2
Monthly active users
16 days ago
Last modified
Categories
Share
What does Website Contact Scraper do?
Website Contact Scraper is a business email, phone number, and social profile finder — an alternative to manually opening every "Contact" or "About" page on a list of websites. Give it a list of domains, get back one clean record per domain with every email, phone number, WhatsApp link, and social profile it found on that site.
It does not verify emails via SMTP and does not guess or generate contact data — it only extracts what's already published on the pages it crawls.
No headless browser. No Playwright. No slow JavaScript rendering. Just raw HTTP requests via Crawlee's CheerioCrawler.
Why use Website Contact Scraper?
- Lead generation at scale — turn a list of company domains into a list of contacts, ready for outreach
- Runs on the Apify platform — schedule recurring runs, trigger it via API or integrations (Zapier, Make, n8n), and monitor runs from the Apify Console
- Optional proxy support — route requests through Apify Proxy if a site blocks datacenter IPs
- No code required — configure everything from the Input tab in Apify Console; a JSON API is also available for developers
Features
- Emails — extracted from page text and
mailto:links, deduplicated, spam-filtered - Phone numbers — from
tel:links and visible text, no SVG/CSS false positives - WhatsApp — detects
wa.meandapi.whatsapp.comlinks, extracts the number - Social profiles — LinkedIn, Facebook, Instagram, Twitter/X, YouTube, TikTok (share buttons excluded)
- Smart crawl order — contact and about pages are visited first, so you get results faster
- Early stop — stops crawling a domain the moment contacts are found (saves credits)
- One result per domain — clean, structured output, no duplicates
- Proxy support — optionally route requests through Apify Proxy to avoid blocks
How to scrape contact details from a website
- Open the Actor and paste one or more website URLs into Start URLs (any page on the domain works — the actor finds the contact/about pages itself)
- Leave Max pages per domain and Max crawl depth at their defaults unless you have a specific reason to crawl deeper
- Keep Early stop on (default) so the actor stops as soon as it finds contacts on a domain — this keeps runs fast and cheap
- Click Start and wait for the run to finish
- Open the Dataset tab to view, filter, or export the results as JSON, CSV, or Excel
See the Input tab for the full list of configuration options.
How much will it cost?
This Actor uses Apify's pay-per-event pricing: you pay a small fee when a run starts, plus a fee for each domain result written to the dataset. There's no charge for pages that fail to load or domains that time out beyond what's already been charged for the run start.
Check the Pricing tab on this Actor's page for the current per-result price. The Apify free plan includes monthly platform credits, so you can test the actor on a small list at no cost.
Input
See the Input tab for the full list of fields, defaults, and validation ranges. Quick summary:
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | — | List of website URLs to scrape (required) |
maxPagesPerDomain | integer | 10 | Max pages crawled per domain (1–50) |
maxDepth | integer | 2 | How deep to follow internal links (1–5) |
earlyStop | boolean | true | Stop as soon as contacts are found |
maxConcurrency | integer | 10 | Max pages fetched in parallel (1–50) |
proxyConfiguration | object | — | Apify proxy settings (optional) |
Example input
{"startUrls": [{ "url": "https://example-agency.com" },{ "url": "https://another-company.io" }],"maxPagesPerDomain": 10,"maxDepth": 2,"earlyStop": true}
Output
One flat record per domain. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel, or filter it directly in the Apify dataset viewer.
{"domain": "example-agency.com","startUrl": "https://example-agency.com","finalUrl": "https://www.example-agency.com","emails": "info@example-agency.com, sales@example-agency.com","phones": "+39 02 1234567","whatsapps": "+393331234567","linkedin_url": "https://linkedin.com/company/example-agency","facebook_url": "","instagram_url": "https://instagram.com/exampleagency","twitter_url": "","youtube_url": "","tiktok_url": "","pagesVisited": 3,"stoppedReason": "early-stop","updatedAt": "2026-05-25T10:30:00.000Z"}
Fields
| Field | Description |
|---|---|
domain | Cleaned domain (no www) |
startUrl | The URL you provided as input |
finalUrl | The last URL loaded (after redirects) |
emails | Comma-separated list of found emails |
phones | Comma-separated list of found phone numbers |
whatsapps | Comma-separated list of WhatsApp numbers |
linkedin_url | First LinkedIn company/profile URL found |
facebook_url | First Facebook page URL found |
instagram_url | First Instagram profile URL found |
twitter_url | First Twitter/X profile URL found |
youtube_url | First YouTube channel URL found |
tiktok_url | First TikTok profile URL found |
pagesVisited | Number of pages crawled for this domain |
stoppedReason | Why crawling stopped (see below) |
updatedAt | ISO timestamp of when the record was saved |
stoppedReason values
| Value | Meaning |
|---|---|
early-stop | Contacts found, crawl stopped early (saves credits) |
max-pages | Reached the maxPagesPerDomain limit |
no-more-links | Ran out of internal links to follow |
error | Site was unreachable |
Use cases
- Lead generation — build prospect lists with published contact info at scale
- Sales outreach — enrich a list of company domains before cold emailing
- Marketing agencies — research competitor contacts and partner directories
- Recruitment — find HR and hiring manager contacts on company websites
- Data enrichment — add emails and socials to existing domain lists
Tips
- If a site blocks requests, try enabling
proxyConfigurationwith Apify Proxy - Set
earlyStop: true(default) to minimize credit usage on large lists - Set
maxDepth: 1if you only want to check the homepage and direct links - URLs with or without
https://are both accepted — the actor normalises them automatically
Technical notes
- Built with Crawlee
CheerioCrawleronapify/actor-node:22— pure HTTP, no browser overhead - Priority crawl order: contact → about → legal → team → homepage → other
- Phone extraction runs only on visible text nodes — no false positives from SVG or CSS
- Social share buttons (
/sharer,/intent/tweet, etc.) are excluded from social results
FAQ
Does this actor verify that emails are real?
No. It extracts email addresses that are already published on the crawled pages (in text or mailto: links) and filters out obvious spam/placeholder addresses. It does not perform SMTP or deliverability verification.
Why did a domain return no contacts?
The site may not publish any contact info on the pages within maxDepth / maxPagesPerDomain, may block non-browser HTTP requests, or may require JavaScript to render its content — this actor doesn't render JavaScript. Check stoppedReason in the output for that record, and try increasing maxPagesPerDomain or maxDepth, or enabling proxyConfiguration.
Can I run this on a large list of domains?
Yes — pass multiple entries in startUrls. Keep earlyStop enabled to keep large runs fast and cost-efficient.
Found a bug or have a feature request? Use the Issues tab on this Actor's page. For programmatic access, see the API tab.
Disclaimer
Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.