Contact Details Scraper - Emails, Phones & Socials
Pricing
from $1.20 / 1,000 websites
Contact Details Scraper - Emails, Phones & Socials
Extract emails, phone numbers and social profiles (LinkedIn, Facebook, Instagram, X, YouTube) from company websites. One row per website, contact and imprint pages crawled automatically. Pay per website, not per page.
Pricing
from $1.20 / 1,000 websites
Rating
0.0
(0)
Developer
Kamer Ozkan
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
5
Monthly active users
a day ago
Last modified
Categories
Share
Extract emails, phone numbers and social media profiles from any list of company websites. Paste domains or URLs and get one clean row per website: published email addresses, phone numbers, LinkedIn company page, Facebook, Instagram, X (Twitter), YouTube, TikTok, Pinterest, GitHub and XING, plus the company name. The Actor finds and opens the site's contact, imprint (Impressum) and about pages for you.
You pay per website, not per page, and websites that cannot be opened are never charged. No API key, account or proxy setup needed.
What does Contact Details Scraper do?
For every website you give it, it loads the homepage, picks the pages on the same domain that usually hold contact data (Contact, Kontakt, Impressum, Imprint, Legal notice, About us, Support) and collects:
- email addresses from
mailto:links, page text and structured data (schema.org), - phone numbers from
tel:links, structured data and labelled text such as "Tel.:" or "Phone:", - the company's own social profiles,
- the company name from structured data or the site title.
All results for one website are merged, de-duplicated and sorted (addresses on the site's own domain first), so you get a lead-ready row instead of hundreds of page rows to clean up.
Who is it for?
- Sales and lead generation teams: enrich a list of target companies with emails, phones and LinkedIn pages before outreach.
- Agencies: turn a Google Maps or directory export of business websites into a contact list.
- Marketers: find the Instagram, TikTok, YouTube and Facebook accounts of brands, shops or partners.
- CRM and data teams: fill missing contact fields for existing accounts on a schedule.
What data can you extract?
| Field | Example |
|---|---|
domain | moz.com |
companyName | Moz |
emails | ["help@moz.com"] |
phones | ["+49 30 577 00 820"] (format as published) |
linkedin | https://www.linkedin.com/company/moz (company pages only) |
facebook, instagram, twitter, youtube, tiktok, pinterest, github, xing | profile links, or null |
website | final homepage URL after redirects |
contactPages | the contact, imprint and about pages that were crawled |
pagesCrawled | pages opened for this website |
input | the website exactly as you entered it |
scrapedAt | 2026-10-09T19:36:21Z |
How much does it cost to scrape contact details?
You pay only for websites saved to your dataset: $1.50 per 1,000 websites on the Free plan ($0.0015 per website), with lower prices on paid Apify plans (up to 20% off). Platform usage is included. The price is the same whether the Actor opens 1 or 10 pages of a website.
Worked example: enriching 500 company websites costs 500 x $0.0015 = $0.75. A list of 30 websites costs $0.045.
Websites that are offline, return an error or show a bot check page are not saved and not charged; they are listed in the FAILED_WEBSITES record of the run's key-value store. Turn on Only websites with contacts to also skip (and not pay for) websites where nothing was found. Set Max websites or a maximum cost per run to cap spending.
How to scrape emails and phone numbers from websites
- Click Try for free.
- Paste your websites, one per line (
apify.com,https://www.haribo.com, ...). From another Actor or integration, pass them as Start URLs in the{"url": "..."}format. - Optionally change Max pages per website (default 4) and turn on Only websites with contacts.
- Click Start. 100 websites usually take one to two minutes; up to 10 websites are crawled in parallel.
- Download the results as JSON, CSV or Excel, or read them through the API.
Input example
{"websites": ["apify.com", "https://www.python.org", "haribo.com", "moz.com", "ritter-sport.de"],"maxPagesPerSite": 4,"onlyWebsitesWithContacts": false,"maxItems": 100}
| Parameter | Type | Default | Description |
|---|---|---|---|
websites | array of strings | 5 sample sites | Domains or URLs, one per website. Duplicate domains are removed. |
startUrls | array of {"url"} | empty | Same as websites, for integrations and other Actors' output. |
maxPagesPerSite | integer 1 to 10 | 4 | Homepage plus contact, imprint and about pages on the same domain. |
onlyWebsitesWithContacts | boolean | false | Save and charge only websites with at least one email, phone or social profile. |
maxItems | integer | 100 | Maximum websites in the dataset; caps the cost of the run. |
Output example
A real row from a test run on 2026-10-09:
{"input": "moz.com","website": "https://moz.com/","domain": "moz.com","companyName": "Moz","emails": ["help@moz.com"],"phones": [],"linkedin": "https://www.linkedin.com/company/moz","facebook": "https://www.facebook.com/moz","instagram": "https://www.instagram.com/moz_hq","twitter": "https://twitter.com/Moz","youtube": "https://www.youtube.com/channel/UCs26XZBwrSZLiTEH8wcoVXw","tiktok": null,"pinterest": null,"github": null,"xing": null,"contactPages": ["https://moz.com/about/contact", "https://moz.com/help"],"pagesCrawled": 3,"scrapedAt": "2026-10-09T19:36:21Z"}
The dataset has two views: Overview (domain, company, emails, phones, main social profiles) and All social profiles.
Integrations and API
Run it from your code with the Apify API or the apify-client package, chain it after a Google Maps or directory scraper, schedule it, or connect it to Make, n8n, Zapier, Google Sheets or a webhook.
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("kamerozkan/contact-details-scraper").call(run_input={"websites": ["apify.com", "moz.com", "haribo.com"],"onlyWebsitesWithContacts": True,})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row["domain"], row["emails"], row["phones"], row["linkedin"])
curl -X POST "https://api.apify.com/v2/acts/kamerozkan~contact-details-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"websites": ["apify.com", "moz.com"]}'
FAQ
Which pages does it open? The homepage, then up to maxPagesPerSite - 1 pages on the same domain whose link or address mentions contact, Kontakt, Impressum, imprint, legal notice, about or support. Contact and imprint pages come first. It never leaves the website's domain.
Why was a website not found or not charged? Some sites are offline, block automated visitors or show a bot check. The Actor does not try to get around such checks; the website is skipped, not charged and listed in FAILED_WEBSITES.
Does it find hidden or obfuscated emails? No. It returns addresses the company publishes in links, page text or structured data. Addresses hidden behind email protection scripts are not decoded.
Does it return personal profiles? No. LinkedIn results are company, school or showcase pages; personal /in/ profiles are skipped. Use the data for business contacts only.
Is it legal to collect this data? It collects contact details that companies publish on their own websites so that people can reach them. You are responsible for how you use the data, including GDPR, anti-spam rules such as CAN-SPAM, and the websites' terms.
Something is not working? Open an issue on the Issues tab with your run link and it will be fixed quickly.
Support and feedback
- Found a bug or missing a field? Open an issue on the Issues tab of this Actor. We reply within 48 hours and ship most fixes within a few days.
- Have an idea for a feature? Issues are the fastest way to get it built.
- If the Actor saves you time, a short review on this page helps other users find it.