# Dental Clinic Lead Finder — Google Maps Leads for Agencies (`zakbuildsai/dental-clinic-lead-finder`) Actor

Dental clinic leads from Google Maps, built for agencies, sales operators, and AI agents. Run one location across dental search terms, deduplicated into one clean list: name, phone, website, address, rating, opening hours, coordinates. Pay-per-event.

- **URL**: https://apify.com/zakbuildsai/dental-clinic-lead-finder.md
- **Developed by:** [Zak](https://apify.com/zakbuildsai) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.50 / 1,000 dental clinic leads

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

## Dental Clinic Lead Finder — Google Maps Leads for Agencies

Find dental clinics in any location, from Google Maps, as one clean deduplicated list. Built for **agencies, sales operators, and AI agents** — structured JSON output, discoverable via Apify MCP, no human in the loop: run it and get leads.

### What it does

Give it a location and it searches Google Maps across dental terms — `dentist`, `dental clinic`, `orthodontist`, `pediatric dentist` by default, or your own terms — then merges the results and removes duplicates (same clinic found under two terms appears once).

Each lead includes:

| Field | Notes |
|---|---|
| Clinic name, category, address | As listed on Google Maps |
| Phone, website | From the clinic's Maps detail page, when listed |
| Rating | As listed on Google Maps |
| Opening hours | Summary + detailed hours when available |
| Amenities, price range | When listed |
| Coordinates, Place ID | For mapping and dedupe |
| Search term | Which dental term found this clinic |

Optional: full customer reviews per clinic (slower run).

### Inputs

| Input | Default | Notes |
|---|---|---|
| Location (required) | — | e.g. `Austin, TX` |
| Search terms | dentist, dental clinic, orthodontist, pediatric dentist | Add or replace terms for your niche (e.g. `dental implants`, `cosmetic dentist`) |
| Max results per term | 20 (1–100) | Total = terms × cap, before deduplication. Cost stays predictable |
| Extract reviews | off | Full review text per clinic |
| Max reviews per clinic | 5 (1–20) | Only used when reviews are on |
| Extract amenities / images | on / off | Amenities on by default |

### Pricing

Pay-per-event: you pay per lead returned. No subscription, no seat fees. Set in the Store listing at publish time.

### Built for agents

- One row per clinic, stable schema, no HTML to parse.
- Works through Apify MCP: an agent can discover it, call it with a location, and get leads back as data.
- Runs 24/7 unattended — no dashboards to babysit.

### Honest limitations

- **Email: the output schema includes an `email` field, but the current engine version does not populate it.** Website email extraction is on the roadmap, not in this version. This Actor does not claim email coverage of any kind.
- Results reflect what Google Maps lists at run time. Coverage varies by area; rural areas return fewer clinics.
- **Review counts: Google Maps currently serves the actor's browser a "limited view" that omits review counts entirely** (verified 2026-10-26: no count element anywhere on the detail page, only "Write a review"). The `reviewsCount` field exists in the schema and will populate if/when the full view is served, but this version does not promise it.
- Ratings, reviews, and hours are as listed by Google — they are not independently verified.
- Google Maps page structure changes occasionally; if a run returns unexpectedly few results, that is usually the cause.

### Source

Adapted from the LeadMagnet Google Maps engine. Issues: https://github.com/aurelia-projects/LeadMagnet/issues

# Actor input Schema

## `extractAmenities` (type: `boolean`):

Extract features and amenities (wifi, parking, wheelchair accessible, etc.)

## `extractImages` (type: `boolean`):

Include the clinic photo URL from Google Maps

## `extractReviews` (type: `boolean`):

Extract customer reviews for each clinic (slower but includes full review data)

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

Where to search. Examples: Austin TX, London UK, New York NY

## `maxResultsPerTerm` (type: `integer`):

Maximum number of clinics to collect per search term (1-100). Total results = terms × this cap, before deduplication.

## `maxReviewsPerPlace` (type: `integer`):

Maximum number of reviews to extract per clinic (1-20)

## `searchTerms` (type: `array`):

Dental search terms to run for this location. Each term is searched separately and clinics are deduplicated across terms. Defaults cover the main dental categories.

## Actor input object example

```json
{
  "extractAmenities": true,
  "extractImages": false,
  "extractReviews": false,
  "location": "Austin, TX",
  "maxResultsPerTerm": 20,
  "maxReviewsPerPlace": 5,
  "searchTerms": [
    "dentist",
    "dental clinic",
    "orthodontist",
    "pediatric dentist"
  ]
}
```

# Actor output Schema

## `results` (type: `string`):

Scraped dental clinic leads stored in the default dataset. Each item contains name, phone, website, address, rating, reviews, coordinates, opening hours, and the dental search term that found it.

# 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 = {
    "location": "Austin, TX",
    "maxResultsPerTerm": 20,
    "maxReviewsPerPlace": 5,
    "searchTerms": [
        "dentist",
        "dental clinic",
        "orthodontist",
        "pediatric dentist"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zakbuildsai/dental-clinic-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 = {
    "location": "Austin, TX",
    "maxResultsPerTerm": 20,
    "maxReviewsPerPlace": 5,
    "searchTerms": [
        "dentist",
        "dental clinic",
        "orthodontist",
        "pediatric dentist",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("zakbuildsai/dental-clinic-lead-finder").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 '{
  "location": "Austin, TX",
  "maxResultsPerTerm": 20,
  "maxReviewsPerPlace": 5,
  "searchTerms": [
    "dentist",
    "dental clinic",
    "orthodontist",
    "pediatric dentist"
  ]
}' |
apify call zakbuildsai/dental-clinic-lead-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zakbuildsai/dental-clinic-lead-finder"
        }
    }
}
```

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/SbGCAmi8lWxaUaZ3j/builds/1eLPoYC3c98KwjSXF/openapi.json
