# Doctors Email Scraper (`solid-scraper/doctors-email-scraper`) Actor

🧾 Doctors Email Scraper instantly finds verified doctor contacts for lead gen and outreach. Filter by specialty, location & keywords to target the right professionals—ideal for marketers, agencies & sales teams.

- **URL**: https://apify.com/solid-scraper/doctors-email-scraper.md
- **Developed by:** [SolidScraper](https://apify.com/solid-scraper) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

### Doctors Email Scraper 📬

**Doctors Email Scraper** automates the process of finding healthcare providers in a chosen region and extracting their contact information—especially email addresses—so you can build a targeted outreach list faster. If you’re looking for a **doctors email scraper**, a **doctor email list scraper**, or **find doctor emails** for healthcare campaigns, this tool helps you turn publicly available business listings into structured contact data. Whether you’re a marketer, recruiter, clinic operator, or data analyst, you can use this **healthcare doctors email scraper** to speed up lead research and save hours of manual work.

***

### Why choose Doctors Email Scraper?

| Feature | Benefit |
| --- | --- |
| ✅ All-in-one doctor contact extraction | Extracts business info plus scraped emails, phone numbers, and social media links in one workflow |
| ✅ Reliability-focused scraping pipeline | Includes built-in fallbacks and resilient scraping logic for better results at scale |
| ✅ Email-focused saving logic | Outputs rows that include email results when available, and can also save non-email businesses depending on your mode |
| ✅ Structured dataset output | Saves results with consistent fields like `name`, `website`, `scraped_emails`, `emails_found`, and `scrape_status` |
| ✅ Region scaling support | Works across multiple locations, with a clear control over how many businesses to target |
| ✅ Proxy configuration support | Lets you provide proxy settings for more stable large-scale runs |

***

### Key features

- 🩺 **Healthcare-ready email harvesting**: Designed for extracting emails from doctor and clinic business websites for targeted doctor email outreach.
- 🔎 **Location-based doctor email discovery**: Uses your **location(s)** and **search term** to focus the results on the right geography.
- 🌐 **Website-first contact extraction**: Pulls contact details from business websites and compiles them into structured results.
- 📞 **Phone and social discovery included**: Alongside scraped emails, it captures `scraped_phones` and `scraped_social_media`.
- 🛡️ **Resilient, resilience-minded scraping**: Uses concurrency controls and a stop condition to keep runs efficient and robust.
- 💾 **Real-time dataset saving**: Pushes results to the dataset as scraping progresses (not only at the end), reducing risk of data loss.
- 🧠 **Output deduplication**: Avoids duplicate businesses by tracking `place_id` uniqueness during collection.
- ✅ **Email-only mode behavior**: In email-only mode, it stores only businesses with emails found (when applicable) to keep your list clean.

***

### Input

Provide input via an `input.json` file. Example structure:

```json
{
  "googleMapsSearchTerm": "Doctors",
  "googleMapsLocation": [
    "New York"
  ],
  "maxBusinesses": 5,
  "scrapeMaxBusinessesPerLocation": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

#### Input Fields

| Field | Required | Description |
| --- | --- | --- |
| `googleMapsSearchTerm` | Yes | The business type or niche to search for email scraping (for example, `dentists`). Prefilled with `Doctors`. |
| `googleMapsLocation` | Yes | A list of geographic locations to target (for example, `Miami, Florida` or just `New York`). |
| `maxBusinesses` | No | The maximum number of businesses to target for email results (1–1000). The scraper stops when the target is reached. Default is `5`. |
| `scrapeMaxBusinessesPerLocation` | No | Controls how `maxBusinesses` is applied across multiple locations. If `true`, it collects up to `maxBusinesses` results per location. If `false`, it combines all locations up to a single total limit. Default is `false`. |
| `proxyConfiguration` | No | Proxy settings for scraping. Recommended for large-scale scraping. Prefilled so `proxy support` is `true`. |
| `proxyConfiguration` • `proxy support` | No | When enabled, uses Apify Proxy for scraping. |

***

### Output

The actor saves results to the Apify dataset in a table-friendly JSON structure where each saved row includes business details plus extracted contact fields.

Example output row (one email row when an email is found for a business):

```json
{
  "street_address": "123 Example St",
  "city": "New York",
  "zip": "10001",
  "state": "NY",
  "country_code": "US",
  "full_address": "123 Example St New York NY 10001 US",
  "website": "https://exampleclinic.com",
  "avg_rating": 4.6,
  "total_reviews": 120,
  "name": "Example Clinic",
  "place_id": "ChIJ...",
  "phone": "+1 555 123 4567",
  "lat": 40.7128,
  "long": -74.006,
  "scraped_emails": [
    "contact@exampleclinic.com"
  ],
  "scraped_phones": [
    "+1 555 987 6543"
  ],
  "scraped_social_media": [
    "https://www.linkedin.com/company/exampleclinic/"
  ],
  "emails_found": 1,
  "pages_scraped": 3,
  "scrape_status": "success",
  "email_found": "contact@exampleclinic.com"
}
```

> Note: When an email is found, the actor flattens the output by pushing one dataset row per email using `email_found`. In those flattened rows, the `scraped_emails` array is removed.

#### Output Fields

| Field | Type | Description |
| --- | --- | --- |
| `name` | string | Business name (the doctor/clinic listing name). |
| `website` | string | Business website URL (used as the target for contact extraction). |
| `phone` | string | Phone number from the business listing. |
| `full_address` | string | Full address constructed from street address, city, state, zip, and country code. |
| `city` | string | City. |
| `state` | string | State/region. |
| `zip` | string | ZIP/postal code. |
| `country_code` | string | Country code. |
| `scraped_emails` | array | Emails scraped from the business website (present in non-flattened cases; removed in flattened email rows). |
| `scraped_phones` | array | Phone numbers scraped from the business website. |
| `scraped_social_media` | array | Social media profile links scraped from the business website. |
| `emails_found` | number | Count of scraped emails found for the business. |
| `pages_scraped` | number | Number of processed URLs/pages during website scraping. |
| `avg_rating` | number | Average rating from the business listing. |
| `total_reviews` | number | Total number of reviews from the business listing. |
| `lat` | number | Latitude from the listing data. |
| `long` | number | Longitude from the listing data. |
| `place_id` | string | Unique identifier used to deduplicate businesses during collection. |
| `scrape_status` | string | Scraping status (examples include `success`, `failed`, and `no_website`). |
| `email_found` | string | The specific email value pushed for that row (used when the actor pushes one row per email). |
| `scrape_error` | string | Error details when scraping fails (added when `scrape_status` indicates failure/error). |

***

### How to use Doctors Email Scraper (via Apify Console)

1. **Open Apify Console**\
   Go to [console.apify.com](https://console.apify.com) and sign in.

2. **Find the actor listing**\
   Search for **Doctors Email Scraper** and open the actor page.

3. **Enter your search term and locations**\
   In the **INPUT** section, set:
   - `googleMapsSearchTerm` (defaults to `Doctors`)
   - `googleMapsLocation` (one or more city/region strings)

4. **Set your limits**\
   Configure `maxBusinesses` to control how many businesses you want with email results.\
   If you’re using multiple locations, decide whether to enable `scrapeMaxBusinessesPerLocation`.

5. **(Recommended) Configure proxies for scale**\
   In `proxyConfiguration`, enable `proxy support` (recommended for larger batches).

6. **Click Run**\
   Start the actor run. You’ll see progress logs as it collects businesses and then scrapes their websites for contact details.

7. **Review the dataset output**\
   After completion, open the dataset (from the **OUTPUT** tab). Each row contains the business contact fields plus either the flattened `email_found` (when emails are found) or fields reflecting the scrape status.

No coding required—get targeted doctor email outreach data in minutes. 🚀

***

### Advanced features & SEO optimization

- 🧩 **Engineered for doctors email scraper workflows**: Built specifically around doctor and clinic website contact extraction, including a clean path for **dentist email scraper** and **hospital email scraper**-style research.
- 🌍 **Targeted doctor email outreach tool setup**: Use **search term** + **location list** to narrow results to the exact geography you care about, helping with **clinic email scraper** and **private practice email scraper** use cases.
- 📊 **Verified-like dataset structure for analysis**: The output includes both discovery fields (rating/reviews/place info) and scraped contact fields, making it easier to build a **verified doctors email list** for segmentation.
- 💾 **Email-focused list hygiene**: Supports an email-only behavior via its internal email handling logic, which is especially useful for a **bulk doctors email extractor** workflow.

***

### Best use cases

- 📈 **Healthcare lead generation**: Build a targeted email list of clinics and providers for outreach campaigns.
- 🧠 **Market research**: Compare provider density and contactability across regions using `avg_rating`, `total_reviews`, and contact fields.
- 🏥 **Hospital and specialty outreach**: Collect emails for **hospital email scraper** style lead lists by changing the `googleMapsSearchTerm`.
- 🦷 **Dentist and private practice growth**: Use this **dentist email scraper** workflow to find contact emails for individual practices and clinics.
- 🧾 **Data enrichment for CRMs**: Feed scraped contact fields into your pipeline for faster onboarding and **doctor email list scraper** operations.
- 💻 **Email harvesting tool for doctors**: Generate bulk-ready results for sequencing and list building using dataset exports.
- 🔬 **Research and auditing**: Combine business listing metadata with scraped contact fields to assess contact consistency for a **medical email scraper** use case.

***

### Technical specifications

- **Supported Input Formats**
  - ✅ `googleMapsSearchTerm` (string)
  - ✅ `googleMapsLocation` (array of strings)
  - ✅ `proxyConfiguration` (object) with `proxy support`

- **Proxy Support**
  - ✅ `proxyConfiguration` with `proxy support` supported

- **Dataset Structure**
  - ✅ Apify dataset named **Business Contact Data**
  - ✅ Flattened email rows when pushing `email_found` for each email found

- **Limit Controls**
  - ✅ `maxBusinesses` stops collection when reached
  - ✅ `scrapeMaxBusinessesPerLocation` controls whether limits are per-location or global total

- **Limitations**
  - ❌ Businesses without a website can’t yield scraped emails, and the actor records `scrape_status` as `no_website` in those cases.

***

### FAQ

#### Do I need to write code to use Doctors Email Scraper?

✅ No. You can run it directly in Apify Console by filling out the `googleMapsSearchTerm` and `googleMapsLocation` fields and then reviewing results in the dataset.

#### What contacts does Doctors Email Scraper extract?

✅ It extracts business listing details (like `name`, `website`, `phone`, address and geo fields) and then scrapes websites for `scraped_emails`, `scraped_phones`, and `scraped_social_media`. It also tracks counts such as `emails_found` and `pages_scraped`.

#### How does the actor handle multiple locations?

✅ You can set `scrapeMaxBusinessesPerLocation`. If enabled, it collects up to `maxBusinesses` results per location. If disabled, it combines results across all locations up to a single overall limit.

#### Can I limit how many businesses are collected?

✅ Yes. Use `maxBusinesses` (range 1–1000). The scraper stops when the target is reached.

#### Where do the results go?

✅ The actor saves results to the Apify dataset **Business Contact Data**, using the dataset fields described in the Output section. Rows are pushed as scraping progresses.

#### Is proxy configuration supported?

✅ Yes. You can pass `proxyConfiguration` and set `proxy support` to `true` (pre-filled). Proxies are recommended for large-scale scraping.

#### Can you remove data if I don’t need it anymore?

✅ If you need help with data removal or follow-up, contact <dataforleads@gmail.com>.

***

### Support & feature requests

If you’re using **Doctors Email Scraper** for your doctors email scraper or targeted doctor email outreach tool workflow, we’d love your feedback. 🙌

- 💡 **Feature Requests**: Ideas like CSV-friendly exports, additional normalization, or broader contact field coverage are welcome.
- 📧 **Contact**: Send support requests to <dataforleads@gmail.com>.

Your feedback helps shape improvements to future versions of **Doctors Email Scraper**.

***

### Doctors Email Scraper: final thoughts

*If you need a reliable doctors email scraper that turns doctor and clinic listings into structured contact data, **Doctors Email Scraper** is built for scale and speed.*\
*Try it with your `googleMapsSearchTerm` and `googleMapsLocation` and start building your list in minutes.* 🚀

***

### Disclaimer

**This tool accesses publicly accessible sources** to extract business and contact information. It does not access private profiles, authenticated data, or password-protected content.

You are responsible for compliance with applicable laws (for example GDPR/CCPA), spam regulations, and each website’s terms of service. For data removal requests, contact <dataforleads@gmail.com>. Always use this tool responsibly, ethically, and for legitimate purposes.

# Actor input Schema

## `googleMapsSearchTerm` (type: `string`):

Enter the business type or niche for email scraper (e.g., 'coffee shops', 'dentists').

## `googleMapsLocation` (type: `array`):

Target geographic location for the email scraper (e.g., 'Miami, Florida').

## `maxBusinesses` (type: `integer`):

Target number of businesses to find (1-1000). The scraper will stop when this target is reached.

## `scrapeMaxBusinessesPerLocation` (type: `boolean`):

If enabled, the scraper will collect up to `maxBusinesses` results per location. If disabled, it combines all locations up to a single total limit.

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

Proxy settings for scraping. Recommended for large-scale scraping.

## Actor input object example

```json
{
  "googleMapsSearchTerm": "Doctors",
  "googleMapsLocation": [
    "New York"
  ],
  "maxBusinesses": 5,
  "scrapeMaxBusinessesPerLocation": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "googleMapsSearchTerm": "Doctors",
    "googleMapsLocation": [
        "New York"
    ],
    "maxBusinesses": 5,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("solid-scraper/doctors-email-scraper").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 = {
    "googleMapsSearchTerm": "Doctors",
    "googleMapsLocation": ["New York"],
    "maxBusinesses": 5,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("solid-scraper/doctors-email-scraper").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 '{
  "googleMapsSearchTerm": "Doctors",
  "googleMapsLocation": [
    "New York"
  ],
  "maxBusinesses": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call solid-scraper/doctors-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=solid-scraper/doctors-email-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/HPFWeJMagee1ZbXK8/builds/xs8CCmDph5tsov51H/openapi.json
