Contact Details Scraper - Emails, Phones and Social Links
Pricing
from $3.00 / 1,000 website with contact details
Contact Details Scraper - Emails, Phones and Social Links
Contact details scraper and email extractor for any list of websites: emails, phones in E.164, LinkedIn, X, Facebook, Instagram, YouTube, TikTok and GitHub profiles, address and company name from contact, Impressum and legal pages. Lead generation, no login.
Pricing
from $3.00 / 1,000 website with contact details
Rating
0.0
(0)
Developer
CrawlKit
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Security
Limited permissionsShare
Extract the public contact details of companies from a list of websites: email addresses, phone numbers, social profiles (LinkedIn, X/Twitter, Facebook, Instagram, YouTube, TikTok, GitHub, Pinterest), postal address and company name. One flat record per website.
No browser, no login, no API key, no start fee.
What it does
For each website in startUrls:
- Checks the site's
robots.txt(on by default) and reads the home page. - Finds the contact-type pages of the same domain from the home page links, using multilingual keywords: contact, kontakt, contacto, contatti, impressum, imprint, mentions legales, legal notice, aviso legal, about, a propos, uber uns, quienes somos, team, equipe... If the home page links to none, the site's sitemap is used.
- Reads up to
maxPagesPerSitepages (home page included), contact pages first, then legal notice / Impressum, about and team pages. - Extracts:
- Emails from
mailto:links, the page text (including simple obfuscation such asinfo [at] acme [dot] comorinfo(at)acme.de), Cloudflare-protected addresses, schema.org data, and addresses of the site's own domain found in the page source. - Phones from
tel:links, schema.org data and the page text, normalised to E.164 (+4998315050) when the country can be deduced (schema.org address, country domain such as.fr/.de/.co.uk, or the page language). - Social profiles: the profile or company page most linked from the site, per network. Share buttons, posts, videos and repositories are ignored.
- Address and company name from schema.org
Organization/LocalBusinessJSON-LD; company name falls back toog:site_name, then to the home page title.
- Emails from
- Pushes one record per website, as soon as that website is done.
False positives are filtered: image file names that look like emails (logo@2x.png), placeholder and example addresses (name@example.com, your@email.com), error-tracking addresses (Sentry, Wix), dates, order numbers, prices, fax numbers and template numbers (+44 7123 123456).
Websites are read with plain HTTP first. A website that answers with a simple anti-bot page or refuses the connection is retried with a browser TLS fingerprint through a datacenter proxy, then through a residential proxy. No captcha is solved and no login is used.
Input
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
startUrls | array | Yes | - | Websites to scan: home page URLs or bare domains (acme.com). One record per domain, duplicates ignored. |
maxItems | integer | No | 20 | Maximum number of websites to process (1-5000). |
maxPagesPerSite | integer | No | 5 | Pages read per website, home page included (1-30). |
sameDomainOnly | boolean | No | true | Only read pages of the website's domain and subdomains. |
respectRobotsTxt | boolean | No | true | Skip pages disallowed by the website's robots.txt. |
Example:
{"startUrls": [{"url": "https://www.hetzner.com"},{"url": "https://wikimediafoundation.org"},{"url": "paul.fr"}],"maxItems": 3,"maxPagesPerSite": 5}
Output
One dataset item per website (real output, October 2026):
{"domain": "hetzner.com","url": "https://www.hetzner.com","inputUrl": "https://www.hetzner.com","companyName": "Hetzner","emails": ["product-feedback@hetzner.com", "info@hetzner.com", "tco@hetzner.com", "dsa-authorities@hetzner.com", "contact-fi@hetzner.com"],"phones": ["+4998315050", "+358753259100", "+49911234226100", "+49374574447100", "+3587532590"],"primaryEmail": "info@hetzner.com","primaryPhone": "+4998315050","linkedin": "https://www.linkedin.com/company/hetzner-online","twitter": "https://twitter.com/Hetzner_Online","facebook": "https://www.facebook.com/hetzner.de","instagram": "https://www.instagram.com/hetzner.online","youtube": "https://www.youtube.com/channel/UC5GXP-_6UWl5I9pisIDohUA","tiktok": null,"github": null,"pinterest": null,"address": null,"pagesCrawled": 5,"sourcePages": ["https://www.hetzner.com", "https://www.hetzner.com/support/", "https://www.hetzner.com/legal/legal-notice/", "https://www.hetzner.com/unternehmen/downloads/", "https://www.hetzner.com/unternehmen/ueber-uns/"],"error": null,"scrapedAt": "2026-10-28T21:42:42.384890+00:00"}
| Field | Description |
|---|---|
domain | Website domain without www. |
url / inputUrl | Home page after redirects / URL as given |
companyName | schema.org name, else og:site_name, else home page title |
emails | All distinct addresses found, lower case, mailto: links first |
phones | Distinct numbers, E.164 when the country is known, else the digits as written |
primaryEmail | Address on the site's own domain, generic role (contact@, info@, hello@...) preferred |
primaryPhone | First number found (tel: links first) |
linkedin ... pinterest | One profile URL per network, or null |
address | Postal address from schema.org data, or null |
pagesCrawled | Pages read on the website (0 when it could not be read) |
sourcePages | Pages where at least one email, phone or social profile was found |
error | Why the website could not be read, else null |
A website without any contact detail still returns a record, with empty lists and null values: it is not charged. A website that cannot be read (DNS error, HTTP error, anti-bot page, home page disallowed by robots.txt) returns a record with pagesCrawled: 0 and the reason in error: it is not charged either. The run fails only if none of the websites could be read.
Pricing
Pay-per-event, no start fee: $5.00 per 1,000 websites with contact details on the Apify Free plan, lower on paid plans. One WEBSITE event is charged per website for which at least one email, phone or social profile was found; websites with no result or that could not be read are free.
| Event | Free | Starter | Scale | Business | Enterprise |
|---|---|---|---|---|---|
Website with contact details (WEBSITE) | $5.00 | $4.30 | $3.70 | $3.00 | $3.00 |
Prices in USD per 1,000 events. The price per website does not depend on maxPagesPerSite.
Limitations
- JavaScript-only websites: pages are read as HTML, without a browser. Contact details that are only rendered by JavaScript (single-page apps, contact widgets, some site builders) are not seen.
- Emails shown as images, contact forms without a written address, and strongly obfuscated addresses (JavaScript assembly, CSS tricks) are not extracted.
- Protected websites: sites behind a JavaScript challenge or captcha (for example some Cloudflare, DataDome or Akamai configurations) are returned with an
errorand not charged. - robots.txt: with
respectRobotsTxton (default), websites that disallow all crawlers are skipped. - Address is only filled when the website publishes schema.org
Organization/LocalBusinessdata (about a third of company sites in our tests). - Phones without a deducible country (no country domain, no address data, no page language) are returned as written digits instead of E.164.
- Emails of other domains found on the pages (web agency credits, parent company, hosting provider) are kept in
emails;primaryEmailprefers the site's own domain. - Large sites with many local offices may list more contacts than
maxPagesPerSitepages can cover.
Data protection
The Actor only reads publicly available pages and returns contact details that companies publish about themselves (legal notice, contact page). Some pages also list named employees with their business email or phone. You are responsible for using the data in line with the GDPR and other applicable laws (legal basis, information of the persons, opt-out for marketing, no use of personal data beyond your purpose).