# B2B Local Lead & Website Email Extractor (No API Key) (`technicaltherapist/google-maps-b2b-lead-extractor`) Actor

Extract verified B2B local business leads, emails, phone numbers, websites, and street addresses across any city worldwide using OpenStreetMap spatial discovery and live website contact crawling.

- **URL**: https://apify.com/technicaltherapist/google-maps-b2b-lead-extractor.md
- **Developed by:** [The Infosiast](https://apify.com/technicaltherapist) (community)
- **Categories:** Lead generation, Automation, Business
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 verified b2b lead extracteds

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

## B2B Local Lead & Website Email Extractor (No API Key Required)

> ### Don't Want to Configure Scrapers? Order a Done-For-You Verified Data Vault!
>
> Need clean, deduplicated B2B leads with **verified emails, phone numbers, websites, and street addresses** delivered straight to your inbox as a ready-to-import CSV & JSON file?
>
> | Package | Volume | Includes | Price (USD / INR) | How to Order Instantly |
> | :--- | :--- | :--- | :--- | :--- |
> | **\[FREE] Proof Sample** | **25 Verified Leads** | Full CSV sample (Austin / Miami / NYC / Delhi / London) | **FREE ($0)** | Email **[theinfosiast@gmail.com](mailto:theinfosiast@gmail.com?subject=Send%20Free%2025-Lead%20B2B%20Sample)** |
> | **\[STARTER] Lead Pack** | **250 Verified Leads** | Custom city + niche, verified emails & phones (CSV + JSON) | **$15 USD** / **INR 1,250** | **UPI (Instant):** `7906018357@kotak`<br>**Email / Invoice:** **[theinfosiast@gmail.com](mailto:theinfosiast@gmail.com?subject=Order%20%2415%20Starter%20Lead%20Pack%20%28250%20Verified%20Leads%29)** |
> | **\[FULL] City B2B Vault** | **2,000+ Verified Leads** | Multi-city / multi-niche full extraction + email enrichment | **$99 USD** / **INR 8,200** | **UPI (Instant):** `7906018357@kotak`<br>**Email / Wire:** **[theinfosiast@gmail.com](mailto:theinfosiast@gmail.com?subject=Order%20%2499%20Full%20City%20B2B%20Vault%20%282000%2B%20Leads%29)** |
>
> *After sending UPI payment to `7906018357@kotak` or emailing `theinfosiast@gmail.com` with your target **City + Business Niche** (e.g., "HVAC & Roofers in Austin & Dallas" or "Dentists in London"), your verified CSV & JSON vault is delivered within 2-6 hours.*

***

#### Live Sample Preview (Genuine Rows From Our Verified Austin B2B Vault)

| Business Name | Category | City | Phone | Website | Verified Role Email |
| :--- | :--- | :--- | :--- | :--- | :--- |
| **Austin Dental** | Dentist | Austin, TX | `+1-512-982-4006` | `lifetimedental.com` | `info@lifetimedental.com` |
| **Celebrate Dental & Braces - South Austin** | Dentist | Austin, TX | `+1 512-521-7000` | `celebratedentalaustin.com` | `info@celebratedental.com` |
| **3 Creeks Real Estate** | Real Estate | Austin, TX | `+1-512-940-6464` | `3creeksrealestate.com` | `info@3creeksrealestate.com` |
| **Swedish Auto Repair** | Auto Repair | Austin, TX | `+1-512-836-0022` | `swedishautoservice.com` | `info@swedishautoservice.com` |

***

### Automated Self-Serve Actor Overview

Extract high-converting B2B local business leads from any city and business category worldwide. This Actor combines **OpenStreetMap / Nominatim spatial discovery** with an asynchronous **multi-page website contact crawler** to extract verified business emails, phone numbers, websites, street addresses, and geographic coordinates.

#### Key Features

- **Zero External API Keys Required**: Runs out-of-the-box without expensive third-party map API billing.
- **Built-in Multi-Page Website Contact Crawler**: Automatically visits business homepages, `/contact`, and `/about` pages to extract `mailto:` links, Cloudflare `data-cfemail` protected addresses, `tel:` phones, Schema.org `LocalBusiness` JSON-LD, and social handles.
- **Smart Deduplication & Hygiene Filtering**: Filter specifically for businesses that have a verified email address (`onlyWithEmail`), phone (`onlyWithPhone`), or active website (`onlyWithWebsite`).
- **CRM-Ready Output**: Clean, structured JSON, CSV, and Excel exports ready for HubSpot, Salesforce, Instantly, Smartlead, or Apollo.

#### Input Parameters

| Field | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `searchQueries` | Array | `["Dentist", "Attorney", "Insurance Agency"]` | Business categories or keywords to target. |
| `location` | String | `"Austin, TX"` | Target city, state, or country. |
| `maxResults` | Integer | `25` | Maximum verified businesses to extract. |
| `enrichContacts` | Boolean | `true` | Visit discovered business websites to extract emails, phones, and social links. |
| `onlyWithWebsite` | Boolean | `false` | Return only leads with a verified website URL. |
| `onlyWithPhone` | Boolean | `false` | Return only leads with a verified phone number. |
| `onlyWithEmail` | Boolean | `false` | Return only leads with a verified email address. |

#### Data Sources & Attribution

- Spatial business directory discovery is powered by OpenStreetMap (**c OpenStreetMap contributors**, licensed under ODbL) and live public company websites.

***

#### Need Custom Scrapers or Bulk B2B Lead Delivery?

- **Direct Contact:** <theinfosiast@gmail.com>
- **Instant UPI (India):** `7906018357@kotak`
- **Starter Pack:** $15 USD / INR 1,250 for 250 Verified B2B Leads
- **Full City Vault:** $99 USD / INR 8,200 for 2,000+ Verified B2B Leads
- **Creator Profile:** <https://apify.com/technicaltherapist>

# Actor input Schema

## `searchQueries` (type: `array`):

Target B2B business categories or niches to extract (e.g., 'Dentist', 'Attorney', 'Roofing', 'Insurance Agency').

## `location` (type: `string`):

Geographic location for B2B lead extraction (e.g., 'Austin, TX', 'Miami, FL', 'London, UK').

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

Maximum number of verified B2B leads to extract and bill in this run.

## `enrichContacts` (type: `boolean`):

Visits each business website (plus /contact and /about pages) to extract verified emails, phone numbers, Schema.org ratings, and social links.

## `onlyWithWebsite` (type: `boolean`):

Only return B2B leads that have a verified website URL.

## `onlyWithPhone` (type: `boolean`):

Only return B2B leads that include a verified phone number.

## `onlyWithEmail` (type: `boolean`):

Only return B2B leads that include a verified email address.

## `proxyConfiguration` (type: `object`):

Configure Apify Proxy or custom proxy URLs for anti-blocking resilience.

## `customSelectors` (type: `object`):

Optional CSS selector overrides for custom directories and self-healing.

## Actor input object example

```json
{
  "searchQueries": [
    "Dentist",
    "Attorney",
    "Insurance Agency"
  ],
  "location": "Austin, TX",
  "maxResults": 25,
  "enrichContacts": true,
  "onlyWithWebsite": false,
  "onlyWithPhone": false,
  "onlyWithEmail": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "customSelectors": {
    "listingCard": "div[role='article'], .Nv2PK, .place-card",
    "businessName": ".qBF1Pd, .fontHeadlineSmall, h1, h2",
    "rating": ".MW4etd, .rating-score",
    "reviewCount": ".UY7F9, .review-count",
    "phone": "button[data-item-id^='phone'], .phone-number, a[href^='tel:']",
    "website": "a[data-item-id='authority'], a.website-link",
    "address": "button[data-item-id='address'], .address-text"
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# 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 = {
    "searchQueries": [
        "Dentist",
        "Attorney",
        "Insurance Agency"
    ],
    "location": "Austin, TX"
};

// Run the Actor and wait for it to finish
const run = await client.actor("technicaltherapist/google-maps-b2b-lead-extractor").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 = {
    "searchQueries": [
        "Dentist",
        "Attorney",
        "Insurance Agency",
    ],
    "location": "Austin, TX",
}

# Run the Actor and wait for it to finish
run = client.actor("technicaltherapist/google-maps-b2b-lead-extractor").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 '{
  "searchQueries": [
    "Dentist",
    "Attorney",
    "Insurance Agency"
  ],
  "location": "Austin, TX"
}' |
apify call technicaltherapist/google-maps-b2b-lead-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,technicaltherapist/google-maps-b2b-lead-extractor"
        }
    }
}
```

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/N0EnjmmPaLP7vUjNt/builds/cxm5i2aXKOPjWYTUB/openapi.json
