Website Contact & Email Extractor – Emails, Phones, Socials avatar

Website Contact & Email Extractor – Emails, Phones, Socials

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Website Contact & Email Extractor – Emails, Phones, Socials

Website Contact & Email Extractor – Emails, Phones, Socials

Extract emails, phone numbers and LinkedIn, Facebook, X, Instagram, YouTube & TikTok links from any list of websites, incl. contact/about pages. For B2B lead gen, sales & CRM enrichment.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

ninhothedev

ninhothedev

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

1

Monthly active users

5 days ago

Last modified

Share

Website Contact & Email Extractor – Emails, Phones & Social Links in Bulk

Website Contact & Email Extractor visits a list of company websites and pulls out every published email address, phone number and social media profile (LinkedIn, Facebook, X/Twitter, Instagram, YouTube, TikTok, Pinterest). It checks the homepage and automatically follows up to 4 contact, about, team, imprint or impressum pages on the same site, then returns one clean row per website that you can export to CSV, Excel, JSON or Google Sheets. No API key, no browser extension, and you pay only per website delivered.

Built for B2B lead generation, sales and marketing teams, agencies enriching prospect lists, recruiters and researchers who need contact details for hundreds of domains without copying them by hand.

What data can you extract?

FieldExampleDescription
urlhttps://www.eff.org/Website you asked to check (normalized)
domaineff.orgHostname without www.
titleElectronic Frontier Foundation | Defending your rights…Homepage <title>
emails["info@eff.org", "press@eff.org"]Deduplicated, lowercased emails from mailto links and page text (null if none)
phones["+1-510-243-8020", "(415) 436-9333"]Phone candidates from tel: links and international/bracketed numbers in text
linkedinhttps://www.linkedin.com/company/EFFCompany LinkedIn profile
facebookhttps://www.facebook.com/effFacebook page
twitterhttps://twitter.com/ThePSFX / Twitter profile
instagramhttps://www.instagram.com/efforg/Instagram profile
youtubehttps://www.youtube.com/efforgYouTube channel
tiktok / pinteresthttps://www.tiktok.com/@efforgTikTok and Pinterest profiles
statusokok = contacts found, empty = no contacts, partial = a follow-up page failed or more contact pages existed than were checked
pages_crawled5Pages successfully inspected for this website
source_pages["https://www.eff.org/about/contact", …]Exact pages the contacts were collected from
errors[]Follow-up pages that could not be loaded
scraped_at2026-10-15T18:02:12+00:00UTC time of extraction

Each row also contains id, source_url, pages_attempted, coverage_limited and crawl_contact_pages for auditing.

How to use the Website Contact Extractor

  1. Paste your websites into Website URLs – full URLs (https://www.example.com/) or bare domains (example.com). One row is produced per website; www. and HTTP/HTTPS duplicates of the same hostname are merged.
  2. Keep Crawl contact / about pages enabled to also scan up to 4 contact, about, team or imprint pages per site, and set Max websites to the number of sites you want processed.
  3. Click Start, then download the results as CSV, Excel, JSON or HTML, or send them to Google Sheets, your CRM, Make, Zapier or n8n.

Example input:

{
"startUrls": ["https://www.eff.org/", "python.org", "https://www.fsf.org/"],
"crawlContactPages": true,
"maxItems": 100
}

Output example

Real output from a local test run (email and phone lists shortened):

[
{
"url": "https://www.eff.org/",
"domain": "eff.org",
"title": "Electronic Frontier Foundation | Defending your rights in the digital world",
"emails": ["info@eff.org", "press@eff.org", "membership@eff.org", "activist@eff.org"],
"phones": ["+1-510-243-8020", "(415) 436-9333", "+1-415-436-9333"],
"facebook": "https://www.facebook.com/eff",
"twitter": null,
"linkedin": "https://www.linkedin.com/company/EFF",
"instagram": "https://www.instagram.com/efforg/",
"youtube": "https://www.youtube.com/efforg",
"tiktok": "https://www.tiktok.com/@efforg",
"pinterest": null,
"pages_crawled": 5,
"scraped_at": "2026-10-15T18:02:12.999643+00:00",
"id": "website:ed4fd82507666e35cf54a5d36cd67e0f6d3475a14c025f24232c2a30fa27ec70",
"source_url": "https://www.eff.org/",
"status": "partial",
"pages_attempted": 5,
"source_pages": [
"https://www.eff.org/",
"https://www.eff.org/about",
"https://www.eff.org/about/contact",
"https://www.eff.org/press/contact",
"https://www.eff.org/about/staff"
],
"errors": [],
"coverage_limited": true,
"crawl_contact_pages": true
},
{
"url": "https://www.python.org/",
"domain": "python.org",
"title": "Welcome to Python.org",
"emails": null,
"phones": null,
"twitter": "https://twitter.com/ThePSF",
"linkedin": "https://www.linkedin.com/company/python-software-foundation/",
"pages_crawled": 5,
"status": "partial",
"coverage_limited": true
}
]

Websites with no published contacts still get a row (status: "empty"), so you can see exactly which domains were checked. A homepage that cannot be loaded at all is not billed and is listed in the RUN_SUMMARY record of the run's key-value store.

Pricing

This actor uses pay-per-event pricing – you pay only for websites delivered to the dataset:

  • $0.002 per website (one result row, however many emails/phones it contains)
  • $2.00 per 1,000 websites
  • $0.00005 per actor start
ScenarioCost
100 websites, one run≈ $0.20
1,000 websites, one run≈ $2.00
10,000 websites (lead list enrichment)≈ $20.00
500 websites re-checked weekly for a month (4 runs)≈ $4.00

No proxies or paid third-party APIs are used, so there are no hidden extra costs. Use Max websites and Apify's maximum cost per run setting to cap spending.

Use cases

  • B2B lead generation – turn a list of company domains into emails, phone numbers and LinkedIn pages for outreach.
  • CRM enrichment – fill missing contact and social fields for accounts already in HubSpot, Salesforce or Pipedrive.
  • Agency prospecting – collect contact details of local businesses, shops or SaaS companies found via directories or Google Maps.
  • Partner and supplier research – find the right press, sales or info mailbox for hundreds of vendors at once.
  • Social media audits – check which brands link to LinkedIn, Instagram, TikTok or YouTube from their website.
  • Data quality checks – verify that the contact details published on your own websites are complete and consistent.

Integrations and API

Run the contact extractor from the Apify API, CLI or any integration: Make, Zapier, n8n, Google Sheets, Slack, Airbyte or webhooks. A common workflow is: Google Sheet of domains → this actor → enriched rows back into the sheet or CRM.

Python example with the official apify-client:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("ninhothedev/website-contact-extractor").call(
run_input={"startUrls": ["https://www.eff.org/", "python.org"], "crawlContactPages": True, "maxItems": 100}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["domain"], item["emails"], item["phones"], item["linkedin"])

FAQ

Is it legal to extract contact details from websites? The actor only reads information that companies publish openly on their public web pages. Personal data (e.g. named employee emails) may still be protected by GDPR, CCPA or similar laws, so make sure you have a legitimate reason to process it and follow anti-spam rules when contacting people.

Which pages are scanned? The homepage plus up to 4 same-site links whose URL or link text looks like contact, about, team, imprint or impressum. Links to other domains are not followed. Turn off Crawl contact / about pages for a faster homepage-only check.

How many websites can I process? Up to 1,000 websites per run (maxItems 1–1000). For larger lists, split them across several runs or tasks.

Are emails verified? No. Emails are extracted as published on the site, and phone numbers are plausible candidates, not validated numbers. To guess and DNS-check addresses for a domain, use the Email Finder & Verifier.

Does it render JavaScript or use proxies? No. It fetches static HTML with a browser-like HTTP client, which keeps it fast and cheap. Contacts that only appear after JavaScript runs, or that are obfuscated (e.g. "info [at] domain"), can be missed. There is no proxy rotation, so sites that block automated requests will show up as errors.

What does status: "partial" mean? Contacts were extracted, but either a follow-up page failed to load or the site had more contact-like pages than the 4-page limit. If any follow-up page fails, the run is marked as failed so you notice it, but all delivered rows are kept.

Can I schedule it? Yes. Save your input as a task and add an Apify Schedule (daily, weekly, monthly) to keep contact data fresh.

Something does not work? Open an issue on the actor's Issues tab with the run ID and an example URL – we usually respond within a day.