Build a source-backed B2B prospect list from public business websites. Discover businesses in an OpenStreetMap-bounded city or enrich a list of public website URLs, then export only contact channels visibly published by those businesses.
This is for public, no-login business research. It does not access Apollo, ZoomInfo, Lusha, private contact databases, or guessed personal email addresses.
Who is it for?
Sales operations, agencies, recruiters, researchers, and local-business teams that need a reviewable list of public business contact channels before a compliant outreach or market-research workflow. Use it as a business email scraper when public-source provenance matters, or as a lead generation scraper for bounded local-business research.
What you get
Default discovery exports only businesses with a visibly published public email, including its source page. Each row also has the business name, website/domain when public data provides it, phone links, explicit linked social profiles, and the exact pages inspected. Optional MX checks report whether the domain publishes MX records; they do not verify inbox ownership or deliverability.
Input recipes
Find Chicago dentists
{
"sector": "dentist",
"country": "United States",
"cities": ["Chicago"],
"maxLeads": 10,
"maxPagesPerSite": 2,
"requireEmail": true,
"verifyMx": true
}
Enrich public business websites
{
"startUrls": [{ "url": "https://www.freshworksdental.com/" }],
"maxLeads": 1,
"maxPagesPerSite": 2,
"requireEmail": false,
"verifyMx": true
}
Input settings
| Field | Description |
|---|---|
sector |
OpenStreetMap business tag/value to find, such as dentist. |
country and cities |
Location boundary for public business discovery. The first supplied city is used. |
startUrls |
Optional public business websites to process directly instead of discovery. |
maxLeads |
Maximum unique business rows to save (1–100). |
maxPagesPerSite |
Homepage plus same-site contact, about, or team pages to inspect (1–5). |
requireEmail |
Enabled by default. Keep only businesses with a visibly published email address. Disable only for public business-directory research where contact availability is optional. |
verifyMx |
Check a domain’s MX records; this is not mailbox validation. |
customOffset |
Skip discovered records to resume a bounded batch. |
Use cases
- Build a public supplier or local-business outreach list.
- Find published business contact channels for market research.
- Enrich a buyer-owned list of public websites with source-page provenance.
- Export public business data for CRM review, Google Sheets, or compliant outreach.
Tips and limits
- Use direct
startUrlswhen you already know the businesses to research. - The default email-only mode can return fewer rows because many public sites do not publish an email address. Increase the city scope or use a buyer-owned public website list when you need more qualifying businesses.
- The Actor inspects only a bounded number of same-site contact, about, and team pages.
- Availability depends on public source data. Empty optional fields are never inferred.
- Respect website terms, applicable law, and your outreach obligations.
API usage
Node.js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/lead-scraper-apollo-zoominfo-lusha-ppe-scraper').call({
sector: 'dentist', country: 'United States', cities: ['Chicago'], maxLeads: 10,
});
console.log((await client.dataset(run.defaultDatasetId).listItems()).items);
Python
from apify_client import ApifyClient
client = ApifyClient("APIFY_TOKEN")
run = client.actor("fetch_cat/lead-scraper-apollo-zoominfo-lusha-ppe-scraper").call(run_input={"sector": "dentist", "cities": ["Chicago"], "maxLeads": 10})
print(client.dataset(run["defaultDatasetId"]).list_items().items)
cURL
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~lead-scraper-apollo-zoominfo-lusha-ppe-scraper/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"sector":"dentist","cities":["Chicago"],"maxLeads":10}'
MCP and automation
Add this Actor as an MCP tool:
claude mcp add apify -- npx -y @apify/mcp-server
{
"mcpServers": {
"apify": {
"command": "npx",
"args": ["-y", "@apify/mcp-server"],
"env": { "APIFY_TOKEN": "${APIFY_TOKEN}" }
}
}
}
Use https://mcp.apify.com?tools=fetch_cat/lead-scraper-apollo-zoominfo-lusha-ppe-scraper.
Example prompts:
- “Find 10 Chicago dentists with a publicly listed email and include source pages.”
- “Enrich these public business websites and return phones, explicit social links, and MX status.”
Support
For a reproducible issue, include your non-sensitive input, run URL, and affected public URL in the Actor’s Issues tab.