# Business Leads Database — 46M with Phones, Emails & Websites (`wleeaf/business-leads-database`) Actor

Search 46M+ local businesses in 200+ countries by category, city, state and ZIP — with phone, email, website, address and social profiles. Pre-built, results in seconds: an alternative to scraping maps one search at a time. From Overture Maps open data.

- **URL**: https://apify.com/wleeaf/business-leads-database.md
- **Developed by:** [Taceddin Sancak](https://apify.com/wleeaf) (community)
- **Categories:** Lead generation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 businesses

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Business Leads Database — 46M with Phones, Emails & Websites

Search **46 million+ local businesses in 200+ countries** by category, state, city and ZIP code — each with
**phone, email, website, full address, coordinates and social profiles** where available. The database is
pre-built, so a search returns in seconds and you can pull thousands of leads per run: no map scraping one
query at a time, no proxies, no blocked runs.

| Coverage (current release) | |
|---|---|
| Businesses with at least one contact | **46.6M** |
| …with phone | 43.6M |
| …with website | 35.3M |
| …with email | 19.3M (role mailboxes only in the EU/EEA, UK and Switzerland) |
| …with social profiles | 32.4M |
| United States | 13.5M businesses, all 50 states (CA 1.5M, TX 1.2M, FL 1.0M, NY 750K…) |
| Also large | Brazil 2.8M · Germany 2.6M · UK 2.5M · Japan 2.2M · Italy 2.0M · India 1.9M · France 1.4M · Mexico 1.3M · Canada 1.1M · Spain 1.1M · Australia 960K |

### What you get per business

| Field | Example |
|---|---|
| `name`, `brand` | Bright Smile Dental · (chain brand if any) |
| `category`, `category_path`, `categories_alt` | dentist · \[health_care, dentist] |
| `phone`, `phones` | +1 512-555-0100 |
| `emails` | info@brightsmile.example |
| `website`, `websites` | https://brightsmile.example |
| `facebook`, `instagram`, `twitter`, `linkedin`, `tiktok`, `youtube` | profile URLs |
| `address`, `city`, `region`, `postcode`, `country` | 100 Congress Ave · Austin · TX · 78701 · US |
| `lat`, `lon` | 30.2646, -97.7448 |
| `confidence`, `operating_status` | 0.93 · open |
| `is_chain`, `chain_locations` | false · null (true · 412 for a franchise) |
| `sources`, `source_licenses`, `source_updated_at` | provenance of each record |

### Example searches

Dentists in Texas with an email address (tick **Health care** under category groups for speed):

```json
{"categories": ["dentist"], "categoryGroups": ["health_care"], "countries": ["US"], "regions": ["TX"], "hasEmail": true, "maxResults": 5000}
```

Independent restaurants in Austin with a phone and Instagram:

```json
{"categories": ["restaurant"], "categoryGroups": ["food_and_drink"], "countries": ["US"], "regions": ["TX"], "cities": ["Austin"], "hasPhone": true, "hasSocials": ["instagram"], "excludeChains": true}
```

Plumbers and electricians in Greater London:

```json
{"categories": ["plumb", "electrician"], "categoryGroups": ["services_and_business"], "countries": ["GB"], "cities": ["London"], "hasWebsite": true}
```

Every hair salon in a list of ZIP code areas:

```json
{"categories": ["hair_salon", "barber"], "countries": ["US"], "postcodePrefixes": ["900", "902", "913"]}
```

### Tips

- **Category groups** let the search skip irrelevant data — always tick the group(s) your categories belong
  to on big searches (e.g. Health care for dentists, Food & drink for cafés).
- Category words match anywhere in the category hierarchy: `dentist` also finds `cosmetic_dentist`,
  `pediatric_dentist`; `plumb` finds `plumbing`.
- For the US, regions are 2-letter state codes. Use `postcodePrefixes` for metro areas.
- **Searching a city? Add its state too** (`"cities": ["Austin"], "regions": ["TX"]`): the search then reads one
  state instead of the whole country and finishes several times faster.
- Duplicate listings of the same business (same name, address and phone) are returned — and charged — only once.

### Pricing

**$1.50 per 1,000 businesses** returned, plus $0.01 per run. Set `maxResults` and your run's
spending limit to control cost.

### Data source, licence and attribution

Built from the **Overture Maps Foundation Places** dataset (monthly releases), filtered to open businesses
with a name, a confidence score of at least 0.6 and at least one contact channel. Overture Places data is
licensed under **CDLA Permissive 2.0**; records sourced from **Foursquare Open Source Places** are licensed
under **Apache 2.0** and records from other contributors under **CC0** — each record's `source_licenses`
field says which apply. Attribution: © Overture Maps Foundation and its contributors (overturemaps.org);
Foursquare Open Source Places © Foursquare Labs, Inc., Apache License 2.0.

For businesses in the EU/EEA, UK and Switzerland, only role mailboxes (info@, office@, contact@ …) are
included. You are responsible for using contact data lawfully (e.g. CAN-SPAM, GDPR/PECR, TCPA, do-not-call
lists). This is an independent product, not affiliated with Google, Meta, Microsoft, Foursquare or the
Overture Maps Foundation.

# Actor input Schema

## `categories` (type: `array`):

Category words matched against each business's category hierarchy, e.g. dentist, plumber, restaurant, lawyer, real_estate, car_dealer, hair_salon, accountant. Leave empty for all.

## `categoryGroups` (type: `array`):

Optional top-level groups. Selecting the group your categories belong to (e.g. Health care for dentists) makes big searches much faster.

## `countries` (type: `array`):

e.g. US, GB, DE, CA, AU. Leave empty for all 200+ countries.

## `regions` (type: `array`):

For the US use 2-letter state codes (TX, CA, NY). Other countries use the region names in the data.

## `cities` (type: `array`):

Exact city names, e.g. Austin, Houston.

## `postcodePrefixes` (type: `array`):

e.g. 787 for Austin-area ZIPs, SW1 for central London.

## `keywords` (type: `array`):

Only businesses whose name contains any of these words.

## `hasEmail` (type: `boolean`):

Only businesses with a public email address.

## `hasPhone` (type: `boolean`):

Only businesses with a phone number.

## `hasWebsite` (type: `boolean`):

Only businesses with a website.

## `hasSocials` (type: `array`):

Only businesses linking all of the selected profiles.

## `excludeChains` (type: `boolean`):

Drop chain locations: places with a brand tag or whose name appears at 8+ locations in the same country (franchises, national brands). Keeps independent businesses.

## `minConfidence` (type: `string`):

Overture's confidence that the place exists. Default 0.6 (everything in the index); try 0.8 for the most certain.

## `maxResults` (type: `integer`):

Maximum number of businesses to return. You are charged per business returned.

## Actor input object example

```json
{
  "categories": [
    "dentist"
  ],
  "countries": [
    "US"
  ],
  "regions": [
    "TX"
  ],
  "hasEmail": false,
  "hasPhone": false,
  "hasWebsite": false,
  "excludeChains": false,
  "maxResults": 100
}
```

# Actor output Schema

## `businesses` (type: `string`):

Matching businesses as a table (name, category, phone, email, website, address, socials).

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "categories": [
        "dentist"
    ],
    "countries": [
        "US"
    ],
    "regions": [
        "TX"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("wleeaf/business-leads-database").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "categories": ["dentist"],
    "countries": ["US"],
    "regions": ["TX"],
}

# Run the Actor and wait for it to finish
run = client.actor("wleeaf/business-leads-database").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "categories": [
    "dentist"
  ],
  "countries": [
    "US"
  ],
  "regions": [
    "TX"
  ]
}' |
apify call wleeaf/business-leads-database --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,wleeaf/business-leads-database"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/1Bat9nuEyUm7HdW8K/builds/bI7uxhcEOcWdtgEbA/openapi.json
