📧 Contact Details Scraper avatar

📧 Contact Details Scraper

Pricing

Pay per event

Go to Apify Store
📧 Contact Details Scraper

📧 Contact Details Scraper

Extract public emails, phone numbers, and social media links from company websites. Build targeted B2B lead lists for your CRM outreach sequences.

Pricing

Pay per event

Rating

0.0

(0)

Developer

太郎 山田

太郎 山田

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

3

Monthly active users

3 days ago

Last modified

Share

📧 Contact Details Extractor

Extract public emails, phone numbers, and social media profiles directly from company contact and about pages at scale. As the foundational first step in the Lead Enrichment Pack, this high-speed scraper is built specifically for sales development representatives, RevOps teams, and marketers who need to sweep prospect domains before launching an outreach sequence.

Instead of manually searching through websites to find decision-maker contact details, just provide a list of target URLs. The scraper rapidly crawls these pages using an HTTP-only approach, keeping costs incredibly low while processing hundreds of websites in seconds. You will extract critical data points including raw public emails, phone numbers, LinkedIn company pages, Twitter handles, and Facebook profiles.

This tool is the ideal starting point for B2B lead generation workflows. Run your list of target domains through this web scraper to capture all available contact data, then pass the scraped results into downstream tools like email syntax validators and phone deliverability checkers. By capturing raw contact details first, you ensure your CRM is populated with accurate data for multi-channel sales sequences. Whether you are enriching existing accounts, building a fresh prospect list, or gathering social media footprints for targeted advertising campaigns, this extractor delivers reliable results without heavy browser overhead.

Lead Enrichment Pack — 3-step workflow

StepActorJob
1Contact Details Extractor ← you are hereScrape public emails, phones, and social links from company pages
2Email Deliverability CheckerValidate emails: syntax, MX records, disposable detection, deliverability score
3Phone Number ValidatorNormalize and validate phone numbers with type detection (mobile / landline / VoIP)

Run all three actors in sequence, then export the fully enriched, validated dataset to your CRM or outreach tool.

Store Quickstart

Pick the template that matches your job — all use public contact pages so the first run returns visible output.

  • Start with store-input.example.json or Quickstart — 2 Contact Pages for the cheapest proof run.
  • Then use the upgrade ladder from store-input.templates.json:
    1. Quickstart — 2 Contact Pages
    2. Recurring Contact Watch
    3. Webhook → CRM Handoff
  • Side presets stay available for broader sweeps: Sales Prospect Enrichment and Investor / Due Diligence Sweep.
  • Buyer-facing proof assets live in sample-output.example.json and live-proof.example.json.

Key Features

  • 📧 Email extraction — Regex + DOM scan, filters junk patterns (example@, noreply@)
  • 📞 Phone number detection — International formats, with country context
  • 🔗 Social media links — LinkedIn, Twitter/X, Facebook, Instagram, GitHub
  • 🧩 JSON-LD contacts — Structured contact data from schema.org markup
  • 🚫 Junk filtering — Excludes obvious placeholders and spam patterns
  • Bulk processing — Up to 500 URLs per run, HTTP-only (fast)

Use Cases

WhoWhy
Sales teamsBuild outbound lead lists from industry directories
RecruitersFind hiring manager contacts from company sites
Marketing agenciesCompile contact databases for campaign targeting
B2B platformsEnrich company profiles with verified contact info
Investigation teamsGather public contact info for due diligence

Input

FieldTypeDefaultDescription
urlsstring[](required)URLs to extract from (max 500)
concurrencyinteger5Parallel requests (1-10)

Input Example

{
"urls": [
"https://www.mozilla.org/en-US/contact/",
"https://about.gitlab.com/company/contact/",
"https://automattic.com/contact/"
],
"concurrency": 5,
"timeoutMs": 15000,
"delivery": "dataset"
}

Output

FieldTypeDescription
urlstringPage URL scanned
emailsstring[]Unique email addresses found (junk-filtered)
phonesstring[]Unique phone numbers (digit-validated)
socialLinksobjectSocial profile URLs by platform
socialLinks.twitterstring[]Twitter/X profile URLs
socialLinks.linkedinstring[]LinkedIn profile URLs
socialLinks.facebookstring[]Facebook page URLs
socialLinks.instagramstring[]Instagram profile URLs
socialLinks.githubstring[]GitHub profile URLs
jsonLdContactsobject[]Structured contacts from schema.org JSON-LD markup
contactCountintegerTotal contacts found (emails + phones) — use to filter empty pages
hasAnyContactsbooleantrue if at least one email or phone was found
checkedAtstringISO timestamp of when this page was scanned

Output Example

{
"url": "https://about.gitlab.com/company/contact/",
"emails": ["press@gitlab.com", "security@gitlab.com"],
"phones": [],
"socialLinks": {
"twitter": ["https://twitter.com/gitlab"],
"linkedin": ["https://linkedin.com/company/gitlab-com"],
"github": ["https://github.com/gitlabhq"]
},
"jsonLdContacts": [
{
"type": "Organization",
"email": "press@gitlab.com",
"sameAs": ["https://twitter.com/gitlab", "https://linkedin.com/company/gitlab-com"]
}
],
"contactCount": 2,
"hasAnyContacts": true,
"checkedAt": "2026-04-20T09:00:00.000Z"
}

API Usage

Run this actor programmatically using the Apify API. Replace YOUR_API_TOKEN with your token from Apify Console → Settings → Integrations.

cURL

curl -X POST "https://api.apify.com/v2/acts/taroyamada~contact-details-extractor/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"urls": [
"https://www.mozilla.org/en-US/contact/",
"https://about.gitlab.com/company/contact/"
],
"concurrency": 5
}'

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("taroyamada/contact-details-extractor").call(run_input={
"urls": [
"https://www.mozilla.org/en-US/contact/",
"https://about.gitlab.com/company/contact/",
],
"concurrency": 5,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item.get("hasAnyContacts"):
print(item["url"], item["emails"], item["phones"])

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('taroyamada/contact-details-extractor').call({
urls: [
'https://www.mozilla.org/en-US/contact/',
'https://about.gitlab.com/company/contact/',
],
concurrency: 5,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const withContacts = items.filter(i => i.hasAnyContacts);
console.log(`Found contacts on ${withContacts.length} of ${items.length} pages`);

Tips & Limitations

  • Target company About/Contact pages for the highest hit rate. Generic home pages often have no contact data.
  • Filter by hasAnyContacts: true after extraction to skip empty pages before passing emails to the validator.
  • Use contactCount to prioritize pages — higher counts usually indicate richer contact pages.
  • Next step: feed emails into Email Deliverability Checker and phones into Phone Number Validator to get CRM-ready, validated leads.
  • Schedule recurring runs against the same URL list to detect contact changes (use Recurring Contact Watch).
  • Respect GDPR/CCPA — contact data scraping has legal restrictions in many regions; only process publicly available business contacts.

FAQ

Does it handle email obfuscation?

Basic obfuscation (at, dot, [at]) is detected. JavaScript-rendered emails or images are missed.

Is scraping contact info legal?

Public contact info on business sites is generally acceptable, but verify GDPR/CCPA compliance for EU/CA data usage.

Can it find contacts behind login walls?

No — only publicly accessible pages. Authentication is not supported.

How accurate is phone detection?

90%+ for international formats. US/EU/UK numbers most accurate. Verify before dialing.

Does it find emails hidden in images?

No — text-based extraction only. OCR is not supported.

Will it bypass Cloudflare email protection?

It can decode the basic Cloudflare obfuscation, but not all anti-scraping protections.

This actor is Step 1 of the Lead Enrichment Pack. After extraction, validate what you found:

StepActorWhat it does
Step 2📩 Email Deliverability CheckerSyntax check, MX lookup, disposable detection, 0-100 deliverability score
Step 3📞 Phone Number ValidatorE.164 normalization, type detection (mobile/landline/VoIP), 250+ countries

Add these adjacent actors when contact rows alone are not enough:

  • 📄 Website Content Extractor — Use this first when the value is the docs, pricing, help, or policy copy itself; add Contact Details Extractor only for the contact / about / support routes on the same domain.
  • Shopify Store Intelligence API — Add when the target account runs on Shopify and you also need catalog, collection, and storefront context before outreach.
  • Domain Security Audit API — Add when you need sender-trust or vendor-risk checks such as SSL, expiry, SPF, DMARC, and headers on the domains behind the contacts you found.
  • Email Deliverability Portfolio Audit API — Add when you need portfolio-level sender-readiness checks across the same domain set, not just row-by-row email validation.

Cost

Pay Per Event:

  • actor-start: $0.01 (flat fee per run)
  • dataset-item: $0.005 per output item

Example: 1,000 items = $0.01 + (1,000 × $0.005) = $5.01

No subscription required — you only pay for what you use.

⭐ Was this helpful?

If this actor saved you time, please leave a ★ rating on Apify Store. It takes 10 seconds, helps other developers discover it, and keeps updates free.

Bug report or feature request? Open an issue on the Issues tab of this actor.