Leads Finder: Public Business Contacts

Find public businesses by city and business type, or supply website URLs. Export published emails, phones, social links, and source pages as CSV or JSON.

Data fields

FieldTypeDescription
companyNamestringPublic business name.
domainstring | nullValue exported as domain.
websitestring | nullValue exported as website.
countrystring | nullValue exported as country.
sectorstring | nullValue exported as sector.
addressstring | nullValue exported as address.
discoveryUrlstringValue exported as discoveryUrl.
companyEmailsarrayValue exported as companyEmails.

Input preview

sectorBusiness type
countryCountry
citiesCities
startUrlsPublic business website URLs
maxLeadsMaximum businesses
maxPagesPerSiteMaximum public pages per site

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

Ready-to-run examples

Open a saved Apify example, adjust the input, and run the actor in your own Apify account.

View all examples

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Build source-backed B2B leads lists of public businesses by city and business type. This B2B leads scraper exports business websites, publicly published emails and phones, plus the exact public pages used for each record.

This Actor finds companies, not people. It does not use Apollo, ZoomInfo, Lusha, a private contact database, login credentials, or guessed contact data.

What you get

  • City-bounded public business discovery
  • Public website, phone, address, and source record URL
  • Emails visibly published on a business site or source tag
  • Optional domain MX status (not a mailbox deliverability claim)
  • Linked business social links and fetched-page provenance

Example input

{
  "sector": "dentist",
  "country": "United States",
  "cities": ["Chicago"],
  "maxLeads": 10,
  "maxPagesPerSite": 2,
  "requireEmail": true,
  "verifyMx": true
}

You can also supply startUrls for a bounded list of public business websites.

Example output

{
  "companyName": "Example Dental",
  "domain": "example.com",
  "website": "https://example.com/",
  "country": "United States",
  "sector": "dentist",
  "address": "123 Main St, Chicago, IL",
  "discoveryUrl": "https://www.openstreetmap.org/node/123",
  "companyEmails": [{"email": "hello@example.com", "sourceUrl": "https://example.com/contact"}],
  "primaryEmail": "hello@example.com",
  "emailMxStatus": "mx_present",
  "phones": ["+1 555 0100"],
  "socials": {"linkedin": null, "facebook": null, "instagram": null, "twitter": null},
  "pagesScraped": ["https://example.com/", "https://example.com/contact"],
  "scrapedAt": "2026-08-30T00:00:00.000Z"
}

Input settings

Field Purpose
sector, country, cities Bound public business discovery.
maxLeads Maximum distinct company rows to save.
maxPagesPerSite Maximum public pages to inspect per site.
requireEmail Save only companies with a visibly public email.
startUrls Public business sites to process instead of discovery.
verifyMx Check MX records for the public business domain.
customOffset Skip discovered rows for a bounded follow-up batch.

Tips and limits

Start with one city and a small maximum. Not every public business has a website or publishes an email; disable requireEmail when you need a company-research list rather than an email-ready list. Public source availability can change or rate-limit requests, so valid partial results are retained with their provenance.

Who is it for?

  • Local sales and outreach teams building a source-backed company list before personal contact.
  • Agencies and researchers who need repeatable city-and-sector discovery with exportable provenance.
  • Operations teams that already have a list of public company sites and want to collect only visible business contacts.

API Usage

Use the same JSON as the input example with the Apify API.

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/leads-finder').call({
  sector: 'dentist', country: 'United States', cities: ['Chicago'], maxLeads: 10,
});
console.log(`Dataset: ${run.defaultDatasetId}`);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('fetch_cat/leads-finder').call(run_input={
    'sector': 'dentist', 'country': 'United States', 'cities': ['Chicago'], 'maxLeads': 10,
})
print(run['defaultDatasetId'])

cURL

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~leads-finder/runs?token=<token>" \
  -H "Content-Type: application/json" -d @input.json

MCP and AI agents

Add this Actor to an MCP client such as Claude Desktop, Cursor, or VS Code:

{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=fetch_cat/leads-finder"
    }
  }
}

Claude Code can use the same server:

claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/leads-finder"

Example prompts: “Find up to 10 dentist businesses in Chicago that publish an email” or “Enrich these public company websites and return visible phones, emails, and source URLs.”

Support

For a reproducible issue, include your non-sensitive input, run ID, and an example source URL.

Common questions

Questions and answers reused from the canonical actor README.

What data can I export with B2B leads?

Company name, public website, address, published business emails and phones, linked social profiles, and source-page provenance when available.

Can I run this B2B leads scraper through an API, schedule, or MCP client?

Yes. Use the API JSON shown above, schedule the same input in Apify, or connect the MCP URL with this Actor selected.

How much does it cost to use Leads Finder: Public Business Contacts?

A run-start event and each saved business are charged at the current rates in the Actor Pricing tab.

Are emails verified?

No. The Actor returns only visibly public values; optional MX status only confirms a domain's mail routing.

Can it find decision makers?

No. This release returns public company contacts, not person profiles or inferred titles.