Website Lead Extractor - Emails, Phones & Social Profiles
Pricing
Pay per usage
Website Lead Extractor - Emails, Phones & Social Profiles
Crawl a company website and extract publicly listed emails, phone numbers, and social profile links (LinkedIn, X/Twitter, Facebook, Instagram, GitHub) as clean JSON.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Timothy Kelvin
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Website Lead Extractor — Emails, Phones & Social Profiles
Give it a company website. It crawls the site (within the same domain, up to a configurable depth) and returns every publicly listed email address, phone number, and social profile link (LinkedIn, X/Twitter, Facebook, Instagram, GitHub) it finds, as clean JSON.
Built for sales teams, recruiters, and researchers who need contact info from a list of company sites without manually opening each "Contact" or "About" page.
Status: live on Apify, pending public Store listing approval. Code and README here are the source of truth in the meantime.
Run it
Via the Apify API (once the Store listing is approved, this works for anyone with an Apify account):
curl "https://api.apify.com/v2/acts/website-lead-extractor/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-X POST \-H "Content-Type: application/json" \-d '{"startUrls": [{ "url": "https://example.com" }],"maxDepth": 1,"maxPagesPerDomain": 20}'
Or clone this repo and run it locally with the Apify CLI:
git clone https://github.com/timmKal01/website-lead-extractor.gitcd website-lead-extractornpm installapify run
Input
| Field | Type | Description |
|---|---|---|
startUrls | array of URLs | Website(s) to scan. |
maxDepth | integer (default 1) | How many link-hops from each start URL to follow within the same domain, e.g. to reach a Contact page. |
maxPagesPerDomain | integer (default 20) | Safety cap on pages visited per domain. |
{"startUrls": [{ "url": "https://example.com" }],"maxDepth": 1,"maxPagesPerDomain": 20}
Output
One record per page where contact info was found:
{"url": "https://example.com/contact","domain": "example.com","emails": ["hello@example.com"],"phones": ["+1 415-555-0132"],"socialProfiles": {"linkedin": "https://linkedin.com/company/example","twitter": "https://x.com/example"}}
How it works
Plain HTTP crawl via Crawlee's CheerioCrawler — no
headless browser, no proxy. It reads only what's already rendered in the raw
HTML response, so it works on static/server-rendered sites; heavily
JS-rendered sites may need a browser-based crawler instead.
Notes
- Only extracts information the site itself publishes publicly (e.g. a "Contact us" page) — it does not access anything gated behind a login.
- Respects a per-domain page cap so it won't run away on large sites.