Website Contact Scraper: Emails, Phones & Social Profiles
Pricing
from $2.00 / 1,000 website with contacts
Website Contact Scraper: Emails, Phones & Social Profiles
Turn a list of websites into one row per company with verified emails, formatted phone numbers, social profiles (LinkedIn, Facebook, Instagram, X), address and contact page. Pay only for results.
Pricing
from $2.00 / 1,000 website with contacts
Rating
0.0
(0)
Developer
Stratum ICS
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
What does Website Contact Scraper do?
Website Contact Scraper turns a list of websites into one clean row per company with email addresses, phone numbers, social media profiles, postal address and the contact page URL. Paste domains like acme.com or full URLs, and it reads each homepage plus the pages most likely to hold contact details (Contact, About, Team, Imprint, Locations), then merges everything it finds.
It works as a contact details scraper, email extractor and phone number finder in one, through the Apify Console, the Apify API or any AI agent connected to Apify.
Why use Website Contact Scraper?
- One row per website, not one row per page. No deduplication work in a spreadsheet afterwards.
- Pay only for results. Websites that are offline, parked or blocked cost nothing.
- Emails you can use. Placeholder addresses (
you@example.com), image file names, tracking IDs and "website by" agency credits are filtered out. Each email domain is checked for an MX record so dead domains do not pollute your list. Addresses hidden by Cloudflare email protection and written asname [at] company [dot] comare decoded. - Phone numbers in a standard format. Every number is validated and returned in international format (
+44 20 7946 0958) and E.164 (+442079460958), with country and line type (mobile or fixed line). Company registration numbers, VAT IDs and order numbers are not mistaken for phones. - Real social profiles only. LinkedIn, Facebook, Instagram, X (Twitter), YouTube, TikTok, Pinterest, GitHub, WhatsApp, Telegram, Discord, Threads, Google Maps and Yelp links, with share buttons, single posts and widget links removed.
- Best contact first.
primaryEmailandprimaryPhonepick the address and number you are most likely to want: on the company's own domain, from a mailto or tel link, general inbox before personal. - Fast and light. Plain HTTP requests, no browser, so thousands of websites finish in minutes.
Typical uses: lead generation and sales prospecting, CRM enrichment, building B2B contact lists from Google Maps or directory exports, checking which suppliers have a public phone line, and giving an AI agent a reliable "find contact details for this company" tool.
What data can you extract?
| Field | Example |
|---|---|
companyName | Lebkuchen-Schmidt |
primaryEmail | service@lebkuchen-schmidt.com |
emails | All deliverable emails, best first |
emailDetails | Type (role or personal), on the company domain or not, domain accepts mail, source, page |
primaryPhone | +49 911 896631 |
phones / phoneDetails | International, national and E.164 formats, country, mobile or fixed line, source, page |
linkedin, facebook, instagram, twitter, youtube, tiktok, ... | Profile URLs |
address / addressDetails | Zollhausstraße 30, Nürnberg, Bayern 90469, DE |
contactPageUrl | The page most likely to be the contact page |
hasContactForm | True when the site has a contact form |
status | ok, unreachable, blocked or parked |
How to scrape contact details from websites
- Open the Input tab and paste your websites into Websites, one per line. Domains (
acme.com), URLs and even email addresses are accepted. - Keep Max pages per website at 6 for small business sites, or raise it for large company sites.
- Choose what to collect: emails, phones, social profiles. All three are on by default.
- Click Start. Results appear in the Output tab as they finish.
- Download the table as CSV, Excel, JSON or HTML, or send it to Google Sheets, HubSpot, Zapier, Make or n8n.
How much does it cost to scrape website contact details?
You pay per website, and only when the scan worked:
| Result | Price |
|---|---|
| Website with at least one email, phone or social profile | $0.003 |
| Website scanned, nothing found | $0.001 |
| Website offline, parked, suspended or blocked | Free |
1,000 websites cost about $3, including up to 6 pages per website. That price covers all pages; you are never charged per page. Apify's free plan includes $5 of monthly credit, enough to try the scraper on well over a thousand websites.
Larger Apify plans pay less automatically: a website with contacts costs $0.0025 on Scale and $0.002 on Business.
Input
See the Input tab for every option. The only required field is Websites. Example:
{"websites": ["apify.com", "https://www.lebkuchen-schmidt.com", "stripe.com"],"maxPagesPerWebsite": 6,"extractEmails": true,"extractPhones": true,"extractSocials": true,"verifyEmailDomains": true,"onlySameDomainEmails": false,"phoneCountry": ""}
- Default country for local phone numbers: numbers written without a country code (for example
(03) 9484 9639) are read using the country of the website's domain (.com.aumeans Australia), then the page language, then the address. Set a two-letter code such asGBto force one. - Only emails on the website's own domain: turn on to drop Gmail and other outside addresses. Leave off for small businesses, many of which use Gmail.
Output
You can download the dataset in various formats such as JSON, HTML, CSV or Excel. A trimmed real result:
{"website": "https://www.lebkuchen-schmidt.com","domain": "lebkuchen-schmidt.com","status": "ok","companyName": "Lebkuchen-Schmidt","primaryEmail": "service@lebkuchen-schmidt.com","emails": ["service@lebkuchen-schmidt.com", "affiliate@lebkuchen-schmidt.com", "info@lebkuchen-schmidt.de"],"primaryPhone": "+49 911 896631","phones": ["+49 911 896631", "+49 69 65009565", "+49 911 89660"],"phoneDetails": [{ "number": "+49911896631", "international": "+49 911 896631", "national": "0911 896631", "country": "DE", "type": "fixed_line", "source": "tel-link", "foundOn": "https://www.lebkuchen-schmidt.com/de/kontakt/kontaktanfrage/" }],"linkedin": "https://linkedin.com/company/lebkuchen-schmidt-business","facebook": "https://facebook.com/lebkuchen.schmidt","instagram": "https://instagram.com/lebkuchenschmidt","youtube": "https://youtube.com/user/SchmidtLebkuchen","address": "Zollhausstraße 30, Nürnberg, Bayern 90469, DE","contactPageUrl": "https://www.lebkuchen-schmidt.com/de/kontakt/","pagesCrawled": 6}
{"website": "https://www.drunkenbarber.com.au","domain": "drunkenbarber.com.au","status": "ok","companyName": "Drunken Barber","primaryEmail": "drunkenbarber3065@gmail.com","primaryPhone": "+61 3 9417 1561","facebook": "https://facebook.com/Drunken-Barber-543923568968459"}
Tips for better results
- Feed it websites from anywhere: Google Maps exports, directory listings, trade show exhibitor lists, CRM exports. Duplicates and
www.variants are merged automatically. - Large company sites spread contacts across many pages. Raise Max pages per website to 10 or 15.
- Sites built entirely in JavaScript (a small share of websites) show little text to a plain HTTP reader, so they may return fewer contacts.
- Seeing many
blockedrows? Turn on Apify Proxy in the Advanced section. - Schedule the scraper in Apify to refresh contact lists every month.
Integrations and API
- API: start runs and download results from any language. Open the API tab for ready code in Python, JavaScript and cURL.
- Python:
from apify_client import ApifyClient, thenclient.actor("stratumics/website-contact-scraper").call(run_input={"websites": ["acme.com"]}). - JavaScript:
import { ApifyClient } from 'apify-client', then the same call withclient.actor('stratumics/website-contact-scraper').call({ websites: ['acme.com'] }). - No-code: Zapier, Make, n8n, Google Sheets, HubSpot and Slack integrations from the Integrations tab.
- AI agents: connect any MCP-capable assistant or agent to Apify's MCP server (
mcp.apify.com) and it can call this scraper as a tool to look up a company's contact details.
FAQ
Is it legal to scrape contact details from websites?
This scraper only reads pages that the website publishes for everyone, and the contact details businesses list there for the purpose of being contacted. Our Actors are ethical and do not extract any private user data. However, you should be aware that your results could contain personal data, such as the work email of a named employee. 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. When you email the contacts you find, follow the anti-spam rules of the recipient's country (for example CAN-SPAM, PECR and the GDPR).
Why did a website return no emails?
Some businesses show only a contact form, or put their address in an image. Check hasContactForm and contactPageUrl to reach them another way, and look at phones and the social profiles.
What do the email types mean?
role means a shared inbox such as info@, sales@ or support@. personal means an address that looks like a person's, such as jane.smith@. sameDomain tells you whether the address is on the company's own website domain.
How is this different from a Google Maps scraper?
A Google Maps scraper finds businesses. This tool reads their websites. Run a Maps scraper first, then pass its website column here to add emails and social profiles.
Found a problem or need a field?
Open an issue in the Issues tab. Every issue is read and usually answered within a day.