Business Website Contact Enrichment Scraper
Pricing
Pay per usage
Business Website Contact Enrichment Scraper
Turn company websites and public business pages into structured contact records: company name, phone, email, address, website, and domain. Output is a clean dataset formatted for CRM import, outreach lists, and sequence-appended prospecting workflows.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Rupesh
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
25 days ago
Last modified
Categories
Share
Lead Enrichment Actor
Business contact enrichment: discovery → extraction → verification → CRM-ready output
Turn a list of business URLs or a natural search query into structured contact records. The Lead Enrichment Actor discovers candidate business pages, extracts contact details from each page, optionally verifies emails via DNS, filters low-confidence rows, and emits clean records with email, emailStatus, phone, social profiles, and company metadata.
What it does
- Discovery — use explicit
startUrls, or run DuckDuckGo-backed search discovery from asearchQuery - Direct enrichment — fetch candidate pages via HTTP and extract company name, email, phone, address, and social links
- Subpage expansion — follow high-value internal subpaths such as
/contact,/about,/team,/locations, plus data-attribute/meta/JSON-LD contact signals - Homepage-first ranking — prefer business homepages and high-value subpages over directory/listing pages before extraction
- Directory handling — detect directory/listing pages and extract individual business candidates from them, bounded by a per-directory-domain cap
- Validation — drop non-business rows, blacklisted domains, and low-confidence records before emitting
- Telemetry — emit discovery, filtering, and contact-quality stats for every run
- Output —
rawdataset rows, plus optional CSV / HubSpot / Salesforce export files
How it works
Input├─ startUrls provided? ── Yes ──► Normalize URLs│ │└─ No ▼searchQuery ─► DuckDuckGo discovery│▼Filter DDG redirectors / blacklisted domains│▼Homepage-first candidate ranking├─ Boost root /contact /about /team /locations├─ Deprioritize /search /find /listings /directory└─ Collapse to best-scoring URL per domain│▼Direct enrichment path├─ Fetch page via HTTP├─ Extract company name, website, domain, address├─ Follow high-value subpages up to depth limit├─ Merge main + subpage HTML├─ Extract email, phone, social links└─ Populate emailStatus and completenessScore│▼Confidence gate├─ Low confidence / aggregator / social / no contact?│ └─► Drop row└─ Pass│▼Emit row│▼outputFormat csv/hubspot/salesforce?├─ Yes ──► Write mapped CSV└─ No ──► FinishDirectory/listing pages:├─ Detect directory/listing page├─ Extract business cards inline from listing rows├─ Enrich cards with deeper contact/social extraction├─ Keep only qualified business names└─ Emit candidate records directlyAggregator/Directory domain handling:├─ Hard-blacklist known social and directory hosts├─ Per-directory-domain cap prevents one host from dominating├─ Same-domain locality subpages allowed up to the cap└─ Low-confidence aggregator rows are dropped
Usage examples
Example 1 — enrich a single business website
{"startUrls": ["https://www.retaildogma.com"],"maxRequestsPerCrawl": 20}
Example 2 — batch append to CRM
{"startUrls": ["https://www.retaildogma.com","https://www.prisync.com","https://www.shopify.com"],"maxRequestsPerCrawl": 50,"outputFormat": "hubspot"}
Example 3 — search-to-lead with email verification
{"searchQuery": "dentists in Sydney","maxRequestsPerCrawl": 30,"verifyEmails": true,"outputFormat": "salesforce","proxyConfiguration": {"useApifyProxy": true,"groups": ["RESIDENTIAL"]}}
Example 4 — raw output with deduplication across runs
{"searchQuery": "plumbers in Austin TX","maxRequestsPerCrawl": 25,"dedupeAcrossRuns": true,"outputFormat": "raw"}
Example 5 — search-to-lead with proxy
{"searchQuery": "dentists in Sydney","maxRequestsPerCrawl": 20,"verifyEmails": true,"outputFormat": "salesforce","proxyConfiguration": {"useApifyProxy": true,"groups": ["RESIDENTIAL"]}}
Commands
Run via Apify CLI
# Run with a search queryapify call ev2BXp2HWlPCmQFWg \-i '{"searchQuery":"dentists in Sydney","maxRequestsPerCrawl":20}'# Run with explicit start URLsapify call ev2BXp2HWlPCmQFWg \-i '{"startUrls":["https://www.retaildogma.com"],"maxRequestsPerCrawl":20}'# Run with email verification and Salesforce exportapify call ev2BXp2HWlPCmQFWg \-i '{"searchQuery":"dentists in Sydney","verifyEmails":true,"outputFormat":"salesforce"}'
Run via Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("kind_cordial/lead-enrichment-lite").call(run_input={"searchQuery": "dentists in Sydney","maxRequestsPerCrawl": 20,"verifyEmails": False,"outputFormat": "raw",})dataset_id = run["defaultDatasetId"]for item in client.dataset(dataset_id).iterate_items():print(item)
Build and run locally
# Install dependenciespip install -r requirements.txt# Run actor locallypython -m src# Or with explicit input JSONecho '{"searchQuery":"dentists in Sydney","maxRequestsPerCrawl":20}' | python -m src
Output fields
| Field | Description |
|---|---|
sourceUrl | Discovered or submitted URL |
companyName | Detected business or brand name |
website | Canonical website URL |
domain | Bare domain |
email | Extracted email address(es) |
emailStatus | found / not_found / DNS verification result |
phone | Extracted phone number(s) |
address | Postal address snippet when available |
linkedin | LinkedIn profile/company URL(s) |
facebook | Facebook page URL(s) |
instagram | Instagram profile URL(s) |
twitter | X / Twitter URL(s) |
completenessScore | Record completeness score |
When outputFormat is csv, hubspot, or salesforce, an additional field-mapped CSV is saved to the key-value store as contacts.csv, contacts_hubspot.csv, or contacts_salesforce.csv.
Behavior summary
- Default mode is fast HTTP extraction.
- Search discovery ranks business homepages and high-value subpages ahead of directory/listing pages, then collapses to the best-scoring URL per domain.
- Directory/listing pages are used as sources to extract candidate individual business records; they are not emitted as final rows.
- Known aggregator and social domains are blacklisted from direct enrichment.
- A per-directory-domain cap prevents any single listing host from dominating the run.
- Failed fetches, low-confidence rows, and blacklisted domains are filtered before emission; output count reflects processed qualified businesses, not raw input count.