# Dental Practice Lead Finder (`george.the.developer/dental-practice-lead-finder`) Actor

Find dental practices in any city with verified contacts, validated emails, and lead scores. Built for dental marketing agencies and supply companies.

- **URL**: https://apify.com/george.the.developer/dental-practice-lead-finder.md
- **Developed by:** [George Kioko](https://apify.com/george.the.developer) (community)
- **Categories:** Lead generation, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Dental Practice Lead Finder - Complete Patient Acquisition Leads

Find dental practices that need marketing help. Get practice contacts, validated emails, social profiles, and lead scores ranked by opportunity size. Built for dental marketing agencies, dental supply reps, practice management consultants, and dental software companies.

### What You Get

Search for any dental specialty in any city and receive a scored lead list:

- **Practice data** from Google Maps (name, address, phone, rating, reviews, hours, specialty)
- **Contact enrichment** (office emails, social profiles, website tech stack)
- **Email validation** (every email checked before you send)
- **Dental-specific lead scoring** (0 to 100, tuned for dental industry signals)
- **Ranked output** sorted by opportunity, ready for outreach

### Who This Is For

**Dental marketing agencies** looking for practices that need better online presence, SEO, or patient acquisition campaigns.

**Dental supply companies** building territory lists of practices to visit or call.

**Practice management consultants** identifying practices with signs of operational gaps (outdated websites, low review counts, missing online booking).

**Dental software companies** finding practices that still use paper scheduling or lack modern patient management tools.

### Example Searches

| Search Query | What You Find |
|-------------|---------------|
| dentists in Miami FL | General practices in Miami metro |
| orthodontists in Los Angeles | Ortho specialists across LA |
| cosmetic dentistry Chicago | Cosmetic-focused practices in Chicago |
| pediatric dentist Austin TX | Kids dental practices in Austin |
| dental implants Houston | Implant specialists in Houston |
| emergency dentist Phoenix AZ | After-hours and emergency dental providers |

### How It Works

````

Search query  -->  Google Maps scrape  -->  Website enrichment  -->  Email validation  -->  Scored lead list
(20+ practices)         (emails, socials)       (deliverability)      (ranked 0 to 100)

````

1. Scrapes Google Maps for dental practices matching your query using a real browser
2. Visits each practice website to extract emails, social profiles, and tech stack
3. Validates every email address for deliverability
4. Scores and ranks each practice using dental-specific criteria

### Dental-Specific Lead Scoring

Every practice gets a score from 0 to 100. The scoring is calibrated for dental: lower review thresholds (dental practices get fewer reviews than restaurants), bonus points for online booking signals.

| Signal | Points |
|--------|--------|
| Has phone number | +15 |
| Has website | +15 |
| Has email address | +20 |
| Email validated as deliverable | +10 |
| Rating 4.0 or higher | +15 |
| Rating 4.5 or higher | +5 bonus |
| More than 30 reviews | +10 |
| More than 75 reviews | +5 bonus |
| Has social profiles | +5 |
| Website mentions appointment/booking | +10 |

A score of 75+ means the practice has solid contact data, good reputation, and active patient acquisition. These are your best outreach targets.

Practices scoring 40 to 60 with missing emails or no social profiles often have the biggest gap between their clinical quality and their marketing. These are the practices most likely to say yes to marketing services.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| searchQuery | string | required | Dental search query with location. Example: "dentists in Miami FL" |
| maxResults | integer | 20 | Maximum practices to scrape (1 to 100) |
| enrichWebsites | boolean | true | Enrich each practice with website contact data |
| validateEmails | boolean | true | Validate all discovered emails |
| minRating | number | 0 | Only include practices with this rating or higher |

#### Example Input

```json
{
    "searchQuery": "dentists in Miami FL",
    "maxResults": 20,
    "enrichWebsites": true,
    "validateEmails": true,
    "minRating": 3.5
}
````

### Output

Each practice in the output contains:

```json
{
    "rank": 1,
    "leadScore": 92,
    "practiceName": "Coral Gables Smiles Dentistry",
    "vertical": "dental",
    "category": "Dentist",
    "address": "2801 Coral Way, Miami, FL 33145",
    "phone": "+1-305-444-0192",
    "website": "https://coralgablessmiles.com",
    "rating": 4.9,
    "reviewCount": 187,
    "hours": "Mon to Fri 8AM to 6PM, Sat 9AM to 2PM",
    "googleMapsUrl": "https://maps.google.com/...",
    "emails": [
        {
            "email": "front@coralgablessmiles.com",
            "valid": true,
            "score": 0.92
        }
    ],
    "socialProfiles": {
        "facebook": "https://facebook.com/coralgablessmiles",
        "instagram": "https://instagram.com/coralgablessmiles"
    },
    "enrichment": {
        "industry": "Healthcare",
        "technologies": ["WordPress", "Mailchimp", "Dentrix"],
        "description": "Full service dental practice offering cosmetic dentistry, implants, and Invisalign. Book appointment online."
    },
    "enrichedAt": "2026-04-14T10:30:00.000Z"
}
```

### Pricing

**$39 per search** - less than the cost of acquiring one new dental patient.

The average dental patient is worth $1,000 to $1,500 per year to a practice. If your outreach from one search converts even a single practice into a client, the return pays for hundreds of searches.

| Method | Cost per search | Time |
|--------|----------------|------|
| Manual research | $200 (4 hours at $50/hr) | 4 hours |
| Buying dental lead lists | $0.50 to $2.00 per lead (stale data) | No enrichment |
| Hiring a VA | $500/month minimum | Training required |
| **This actor** | **$39 per search** | **Fully automatic, validated data** |

### Use Cases

#### Dental Marketing Agency Prospecting

Search "dentists in \[city]" for every city in your target market. Filter by practices scoring 40 to 60 that have websites but no social profiles or online booking. These practices need your services the most and are easier to close than practices already investing in marketing.

#### Dental Supply Territory Building

Run searches across your territory to build a complete list of practices with phone numbers and office emails. Sort by review count to prioritize established practices with higher purchasing power.

#### Practice Management Consulting

Find practices with high ratings but low review counts. These are clinically strong practices that underinvest in their online presence. They are ideal consulting clients because they have revenue but lack marketing systems.

#### Dental Software Sales

Search for practices and check the enrichment tech stack. Practices running outdated WordPress sites without modern scheduling tools are prime targets for practice management software demos.

### Tips for Best Results

1. **Include the state abbreviation**: "dentists in Miami FL" works better than "dentists in Miami"
2. **Search by specialty**: "orthodontists in Dallas TX" or "cosmetic dentistry Seattle" for targeted lists
3. **Use minRating of 3.5**: Filters out closed or abandoned listings
4. **Run 20 results first**: Verify the data quality before scaling to 50 or 100
5. **Export as CSV**: Download from the Dataset tab for direct CRM import

### Integrations

Export your dental leads directly to:

- Google Sheets (via Apify integration)
- Zapier (trigger on new dataset)
- Make/Integromat
- HubSpot, Salesforce, or any CRM via webhook
- CSV/JSON/Excel download

### Support

Questions or custom requirements? Reach out through the Apify Store or open an issue on GitHub.

# Actor input Schema

## `searchQuery` (type: `string`):

What to search on Google Maps. Include location for best results.

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

Maximum number of businesses to scrape from Google Maps.

## `enrichWebsites` (type: `boolean`):

Enrich each business with website contact data, social profiles, and technologies.

## `validateEmails` (type: `boolean`):

Validate all discovered email addresses for deliverability.

## `minRating` (type: `number`):

Only include businesses with this rating or higher. Set to 0 to include all.

## Actor input object example

```json
{
  "searchQuery": "dentists in Miami FL",
  "maxResults": 20,
  "enrichWebsites": true,
  "validateEmails": true,
  "minRating": 0
}
```

# 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 = {
    "searchQuery": "dentists in Miami FL"
};

// Run the Actor and wait for it to finish
const run = await client.actor("george.the.developer/dental-practice-lead-finder").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 = { "searchQuery": "dentists in Miami FL" }

# Run the Actor and wait for it to finish
run = client.actor("george.the.developer/dental-practice-lead-finder").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "searchQuery": "dentists in Miami FL"
}' |
apify call george.the.developer/dental-practice-lead-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=george.the.developer/dental-practice-lead-finder",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Dental Practice Lead Finder",
        "description": "Find dental practices in any city with verified contacts, validated emails, and lead scores. Built for dental marketing agencies and supply companies.",
        "version": "1.0",
        "x-build-id": "3HKS6Ah6wfd32cU5N"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/george.the.developer~dental-practice-lead-finder/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-george.the.developer-dental-practice-lead-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/george.the.developer~dental-practice-lead-finder/runs": {
            "post": {
                "operationId": "runs-sync-george.the.developer-dental-practice-lead-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/george.the.developer~dental-practice-lead-finder/run-sync": {
            "post": {
                "operationId": "run-sync-george.the.developer-dental-practice-lead-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "searchQuery"
                ],
                "properties": {
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "What to search on Google Maps. Include location for best results."
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of businesses to scrape from Google Maps.",
                        "default": 20
                    },
                    "enrichWebsites": {
                        "title": "Enrich Websites",
                        "type": "boolean",
                        "description": "Enrich each business with website contact data, social profiles, and technologies.",
                        "default": true
                    },
                    "validateEmails": {
                        "title": "Validate Emails",
                        "type": "boolean",
                        "description": "Validate all discovered email addresses for deliverability.",
                        "default": true
                    },
                    "minRating": {
                        "title": "Minimum Rating",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "number",
                        "description": "Only include businesses with this rating or higher. Set to 0 to include all.",
                        "default": 0
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
