Turn a list of websites into a contact list: a website email finder that also returns phones and social profiles. For each website you get e-mail addresses, phone numbers, social profiles (LinkedIn, X/Twitter, Facebook, Instagram, YouTube, TikTok, GitHub), the company name, description and postal address, and the page where the contacts were found - as a clean, spreadsheet-ready table. Export to CSV or Excel, push to your CRM or Google Sheets, or call it as an API.
Built for sales and business-development teams building lead lists, marketers and agencies doing outreach, recruiters, and anyone enriching a list of company domains.
Why this scraper
- Finds contacts where they actually are. It reads the page you give, then picks the pages most likely to list contacts - Contact, Imprint / Impressum, Legal notice, About, Team - instead of crawling blindly. Five pages per site finds most contacts.
- Reads what simple scrapers miss. E-mails from links and text, e-mails hidden by Cloudflare's email protection, and the company's own structured data (the name, e-mail, phone and address a site publishes for search engines).
- Clean results, not noise. Image file names, placeholder addresses (
name@example.com), tracking ids and share buttons are filtered out. Phone numbers come in international format, duplicates removed, and the website's own e-mail addresses are listed first. - Pay only for results. Websites where nothing is found are free. Dead or unreachable domains are skipped in a second instead of wasting run time.
- Fast and cheap to run. Many websites are checked in parallel. Platform usage for a typical run is a fraction of a cent.
- Handles rate limits for you. When a site says "slow down" (HTTP 429) the Actor waits as long as asked and adapts its speed; timeouts and dropped connections are retried automatically.
- Never loses or double-bills work. Each website is saved as soon as it's done; if the platform moves your run to another server it resumes without charging twice, and it stops cleanly at your maximum charge.
How to use it
- Paste websites into Websites - domains (
apify.com) or any page URL. No list? Fill in a city and kinds of business instead (see below). - Optionally change Pages per website (default 5), tick Only the website's own e-mail addresses, or report only websites with an e-mail or a phone number.
- Press Start. Download the results from the Output tab, or connect an integration.
Example input
{
"startUrls": ["apify.com", "zalando.de", "mailchimp.com"],
"maxPagesPerSite": 5,
"sameDomainEmailsOnly": false
}Find businesses by category and city
No list of websites yet? Give a city and the kinds of business and the Actor builds the list for you: every matching business in the area from open map data (name, category, address, phone, listed e-mail, website, position), then each one's website is checked for e-mails, phones and social profiles.
{
"city": "Pune",
"countryCode": "IN",
"categories": ["dentist", "orthodontist"],
"radiusKm": 8,
"requireEmail": true,
"maxItems": 500
}- Kinds of business take everyday words:
dentist,plumber,lawyer,gym,real estate,indian restaurant. Leave empty for every business in the area. - Radius is measured from the city centre (up to 50 km); or give an exact area as
boundingBox. - Only businesses with a website, Skip chains and brands and Minimum confidence (how sure the map data is that the business exists) narrow the list.
- Only new remembers the businesses already delivered, so a weekly run returns only the newly listed ones.
Each row has name, category, address, city, postcode, lat/lon, website, primaryEmail / emails, primaryPhone / phones, social links, emailFoundOnWebsite (the address was found on the business's own site, not only in a listing), websiteReachable (the listed site still works) and licenses. Business listings come from Overture Maps Foundation open data (CDLA-Permissive-2.0, some rows Apache-2.0 or CC0; each row names its licence).
In our tests about 6 in 10 businesses with a website ended up with an e-mail.
Only new websites
Working through a growing lead list? Turn on Only new websites and re-run with the whole list - websites an earlier run already delivered are skipped (and not charged).
Use it as an instant API
The Actor also runs in Standby mode - an always-ready endpoint that returns contacts straight in the response, ideal for enriching leads from your own app, CRM workflow or AI agent. Find the URL on the Standby tab:
curl "https://<standby-url>/?url=apify.com,zalando.de" \ -H "Authorization: Bearer <YOUR_APIFY_TOKEN>"
Any input field works as a query parameter (url is shorthand; separate several websites with commas), or POST the full input as JSON. The response is {"success": true, "count": 2, "items": [ ... ]}.
Use it in Clay
Add a Run Apify Actor column (Clay's Apify integration, connected to your Apify account), pick tacps126/contact-details and use this input. Type / inside the quotes to insert your column (website or domain):
{"startUrls": ["/Website"], "maxPagesPerSite": 5}Each row gets public emails, phone numbers, social profiles and the contact page, read from the company's own site. Keep auto-update off while you test.
More Clay recipes: tacps126.github.io/clay.html.
Pricing
Pay per result: about $1.75 per 1,000 websites with contacts found (lower on higher Apify plans) plus a tiny start fee. Websites with nothing found, and unreachable ones, cost nothing. When searching a city, each business delivered costs about $1.25 per 1,000, plus the website price when contacts were found on its site (about $3 per 1,000 for a fully enriched lead). The business price starts on 6 December 2026; until then city searches bill only the website price. See the Pricing tab for exact rates, and set a maximum charge per run to cap spend.
On Apify's free plan each run returns up to 100 websites - plenty to try everything. Any paid Apify plan removes the limit.