Email & Social Lead Finder
Pricing
from $1.00 / 1,000 pages
Email & Social Lead Finder
Crawl any list of websites and extract emails, phone numbers, social profiles and page metadata for lead generation.
Pricing
from $1.00 / 1,000 pages
Rating
0.0
(0)
Developer
Lucas Bonardo
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Crawl any list of websites and pull out the contact signals that matter for lead generation: email addresses, phone numbers, social media profiles and page metadata — one clean row per page.
Point it at a company's homepage or contact page, let it follow same-domain links a hop or two deep, and export the results as JSON, CSV or Excel.
What it does
- Fetches each start URL with a fast HTTP crawler (no browser overhead).
- Follows same-domain links up to a configurable depth.
- Extracts:
- Emails — from visible text,
mailto:links, and common obfuscations (name [at] domain (dot) com). - Phones — from
tel:links and text, normalised to digits with an optional leading+(7–15 digits, E.164-friendly). - Social profiles — Facebook, Instagram, X/Twitter, LinkedIn, YouTube, TikTok, Pinterest, GitHub, Telegram, WhatsApp, Medium, Threads, Discord. Share/intent widgets are filtered out.
- Metadata — title, description, Open Graph tags, canonical URL, language.
- Emails — from visible text,
- Respects
robots.txt(toggleable) and rate limits (maxRequestsPerMinute,maxConcurrency).
Input
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | — | Pages to crawl (required). |
maxCrawlDepth | integer | 1 | Link hops to follow (0 = start URLs only). |
maxRequestsPerCrawl | integer | 100 | Total page cap per run. |
sameDomainOnly | boolean | true | Keep the crawl on the start domain. |
includeSubdomains | boolean | true | Treat subdomains as the same site. |
extractPhoneNumbers | boolean | true | Toggle phone extraction. |
onlyPagesWithContacts | boolean | false | Drop rows with no contacts found. |
respectRobotsTxt | boolean | true | Honour robots.txt disallow rules. |
maxConcurrency | integer | 10 | Parallel requests. |
maxRequestsPerMinute | integer | 120 | Politeness throttle. |
requestTimeoutSecs | integer | 30 | Per-page navigation timeout. |
proxyConfiguration | object | — | Optional Apify Proxy settings. |
See .actor/input_schema.json for the full schema.
Output
Each dataset row:
{"url": "https://acme.example/contact","depth": 1,"title": "Contact — Acme","emails": ["hello@acme.example", "sales@acme.example"],"phones": ["+12025550143"],"socialProfiles": [{ "platform": "facebook", "url": "https://www.facebook.com/acme" },{ "platform": "linkedin", "url": "https://www.linkedin.com/company/acme" }],"metadata": { "title": "Contact — Acme", "ogSiteName": "Acme Inc", "...": "..." },"emailCount": 2,"phoneCount": 1,"socialCount": 2,"hasContacts": true,"scrapedAt": "2026-07-04T10:00:00.000Z"}
Run it locally
npm install # from the monorepo root (installs all actors)npm start # uses storage/key_value_stores/default/INPUT.jsonnpm test # runs an offline sample execution against a fixture site
Or with the Apify CLI: apify run.
Responsible use
This actor only reads publicly available pages. You are responsible for
complying with each site's terms, robots.txt, and applicable privacy/marketing
laws (GDPR, CAN-SPAM, etc.) when contacting any leads you collect.