Company Contact Enricher - Website to B2B Leads
Pricing
from $0.01 / 1,000 results
Company Contact Enricher - Website to B2B Leads
Transform company website URLs into enriched B2B contact data. Automatically scrapes team pages, detects email patterns, cross-references LinkedIn & identifies decision makers. - Website Scanning - Contact Extraction - Email Pattern Detection - LinkedIn Integration - Title Filtering - Webhooks
Pricing
from $0.01 / 1,000 results
Rating
1.0
(1)
Developer
The Howlers
Actor stats
3
Bookmarked
119
Total users
43
Monthly active users
4 days ago
Last modified
Categories
Share
Transform company website URLs into enriched B2B contact data. Scrapes team pages, detects email patterns, cross-references LinkedIn profiles, and identifies decision makers.
BYOK (Bring Your Own Key) -- you provide your own API credentials.
Before You Start
This actor requires your own API credentials to fetch real data.
Where to get your key: Your Apollo.io API key for B2B contact lookup (primary source)
You can test with Demo Mode first (free, no key needed) to see the output format before committing.
Quick Start
Test with Demo Mode (free, no API key needed)
{"demoMode": true,"websiteUrls": ["https://apify.com"],"targetTitles": ["CEO","CTO","Founder","Owner","VP","Director"],"targetRoles": ["CEO","Owner","Founder","Marketing Director"]}
Run with real data
{"demoMode": false,"websiteUrls": ["https://apify.com"],"targetTitles": ["CEO","CTO","Founder","Owner","VP","Director"],"maxContactsPerSite": 10,"apolloApiKey": "YOUR_API_KEY_HERE","hunterApiKey": "YOUR_API_KEY_HERE","anthropicApiKey": "YOUR_API_KEY_HERE","firecrawlApiKey": "YOUR_API_KEY_HERE","enableHunterFallback": true,"enableBBB": true,"enableSocialLookup": false,"enableStateSOS": true,"decisionMakerMode": false,"targetRoles": ["CEO","Owner","Founder","Marketing Director"],"seniorityFilter": "any","lookupLinkedIn": false,"detectEmailPattern": true,"includePhoneNumbers": true,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Input Parameters
| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
demoMode | boolean | true | No | Return sample data for testing (no charges). Set to false for live data. |
websiteUrls | array | - | No | Company website URLs to enrich (e.g., https://example.com) |
targetTitles | array | ["CEO","CTO","Founder","Owner","VP","Director"] | No | Filter contacts by job titles (e.g., CEO, CTO, VP) |
maxContactsPerSite | integer | 10 | No | Maximum contacts to return per company |
apolloApiKey | string | - | Yes* | Your Apollo.io API key for B2B contact lookup (primary source) |
hunterApiKey | string | - | Yes* | Hunter.io API key for email finding (SMB fallback + email verification) |
anthropicApiKey | string | - | Yes* | Anthropic API key for AI-powered contact extraction from websites |
firecrawlApiKey | string | - | Yes* | Firecrawl API key for fetching website content (required for AI extraction) |
enableHunterFallback | boolean | true | No | Use Hunter.io domain search when Apollo has no results |
enableBBB | boolean | true | No | Search Better Business Bureau for owner/principal info |
enableSocialLookup | boolean | false | No | Cross-reference LinkedIn/Facebook business pages for owner info |
enableStateSOS | boolean | true | No | Search state Secretary of State business registrations for all 50 states. Uses 3-tier cascade: direct HTML scrapers for FL/NJ, Firecrawl+AI extraction for all states (with state-specific URLs + OpenCorporates fallback), and Google SERP for remaining coverage. Filters out corporate registered agents to find real business owners. |
companyCity | string | - | No | City for BBB lookup (e.g., Austin) |
companyState | string | - | No | State code for SOS/BBB lookup (e.g., TX, CA) |
gbpData | array | - | No | GBP data from google-maps-scraper (auto-populated in pipelines) |
socialProfiles | object | - | No | Social profiles for cross-reference (linkedin, facebook, instagram, twitter) |
decisionMakerMode | boolean | false | No | When enabled, prioritizes decision makers and filters out contacts without recognizable decision-making titles. Each contact gets a seniorityLevel and decisionMakerScore (0-100). Results are sorted by score descending (most senior first). |
targetRoles | array | [] | No | Only return contacts matching these roles (fuzzy match — 'CEO' matches 'Chief Executive Officer', 'Dir. of Marketing' matches 'Director'). Leave empty to return all roles. |
seniorityFilter | string | "any" | No | Only return contacts at or above this seniority level. C-Level includes CEO, CTO, CFO, President, etc. VP includes Vice President, SVP, EVP. Director includes Director, Head of. Manager includes Manager, Lead, Supervisor. 'Any' returns all contacts. |
lookupLinkedIn | boolean | false | No | Cross-reference contacts with LinkedIn (additional charge per lookup) |
detectEmailPattern | boolean | true | No | Generate emails using detected company pattern (first.last@domain.com) |
includePhoneNumbers | boolean | true | No | Include phone numbers when found |
webhookUrl | string | - | No | URL to send results when complete (Zapier, Make, n8n) |
proxyConfiguration | object | {"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]} | No | Proxy settings for web scraping fallback |
*Required when Demo Mode is off.
Pricing
This actor uses pay-per-event billing:
| Event | Description | Price |
|---|---|---|
| Website Scanned | Charged for each company website scanned for contact information | $0.10 |
| Contact Enriched | Charged for each contact found with email or LinkedIn profile | $0.15 |
| LinkedIn Lookup | Charged when calling LinkedIn Profile Scraper for additional data | $0.10 |
Demo mode is free -- no charges for sample data.
Troubleshooting
"API key is required"
You have Demo Mode turned off but didn't provide an API key. Either:
- Turn Demo Mode on to test with sample data
- Add your API key in the input
"API error 403" or "Unauthorized"
Your API key is invalid, expired, or doesn't have access to this specific API endpoint. Double-check your key and account permissions.
"API error 429" or "Rate limit"
Too many requests. Wait a minute and try again, or reduce the number of items per run.
No results or empty dataset
Check the run log for error messages. Common causes:
- Invalid input format (check the examples above)
- API key without proper permissions
- The target data doesn't exist or is too small to track
How do I test without an API key?
Enable Demo Mode in the input. This returns realistic sample data so you can verify the output format works for your workflow.
Built by John Rippy | Actor Arsenal