# Thoracic Surgeons Contact Scraper (`scrapido/thoracic-surgeons-contact-scraper`) Actor

🫁 Thoracic Surgeons Contact Scraper collects chest surgery practice records from Google Maps—name, address, city, state, ZIP & phone. 📧 Site crawling adds emails and socials. 🏥 Perfect for surgical device sales & medtech outreach.

- **URL**: https://apify.com/scrapido/thoracic-surgeons-contact-scraper.md
- **Developed by:** [Scrapido](https://apify.com/scrapido) (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.50 / 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/actors/running/actors-in-store.md#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

### Thoracic Surgeons Contact Scraper

**Thoracic Surgeons Contact Scraper** helps you automate thoracic surgeon lead generation by scraping publicly available business listings and extracting contact information (emails, phone numbers, and social media). It acts as a thoracic surgery contact scraper for healthcare provider database building and speeds up practice contact information collection at scale.

***

### What Does Thoracic Surgeons Contact Scraper Do? 🤖

Thoracic Surgeons Contact Scraper takes your **search term** and **target locations**, then scrapes businesses matching that niche and filters results to help you focus on relevant practices. During a run, it collects each business’s website and extracts contact details from the website—exporting structured results to an Apify dataset. You can also tune extraction and limits so it works well for healthcare CRM enrichment and medical contact aggregation workflows. If you’re trying to extract emails from medical directories and automate thoracic surgery referral leads, this actor is built to beat manual research by handling many sites efficiently.

***

### What Can Thoracic Surgeons Contact Scraper Extract? 📊

You can collect business identity, practice contact details, geodata, and enrichment from publicly available web pages—so you get a usable foundation for physician contact scraping, follow-ups, and analysis.

| Data Type | Field Name | Description |
|---|---|---|
| Contact | `scraped_emails` | List of emails found for each business website |
| Contact | `scraped_phones` | List of phone numbers found on the business website |
| Contact | `scraped_social_media` | List of social media links found during website scraping |
| Identity | `name` | Business name for the thoracic surgery practice/business |
| Navigation | `website` | The business website URL used for extraction |
| Location | `full_address` | Combined address string built from street address, city, state, zip, and country code |

#### Key Features of Thoracic Surgeons Contact Scraper ⚡

- ✅ **Keyword-Driven Business Search**: Uses your `googleMapsSearchTerm` (default: `Thoracic Surgeons`) to find relevant practices for thoracic surgeon lead generation.
- 🌍 **Location Targeting**: Use `googleMapsLocation` to focus results by city/region (default includes `New York`).
- 📧 **Email Collection from Websites**: Extracts emails from publicly available sources on each business’s website as part of contact scraping for healthcare professionals.
- 📞 **Phone & Social Enrichment**: Captures `scraped_phones` and `scraped_social_media` alongside emails to support healthcare provider database building.
- 🛡️ **Proxy-Ready & Reliable**: Includes proxy configuration support via `proxyConfiguration` to help with reliable scraping at scale.
- 📊 **Structured Dataset Output**: Produces a clean, labeled dataset (arrays + summary counts) ready for CRM import or analysis.
- 💾 **Configurable Limits**: Control volume using `maxBusinesses` and `scrapeMaxBusinessesPerLocation` to manage run size.
- ⚙️ **Status Tracking**: Each record includes a `scrape_status` to help you quickly filter successful vs. unsuccessful rows.

***

### How to Use Thoracic Surgeons Contact Scraper 🚀

1. **Find the Actor** — Open Thoracic Surgeons Contact Scraper in the Apify Store: https://apify.com/store
2. **Open Input Tab** — In the Apify Console, switch to the **Input** tab for the actor run.
3. **Set Search Term** — Keep the default (`Thoracic Surgeons`) or change `googleMapsSearchTerm` to match your niche.
4. **Choose Locations** — Add one or more entries in `googleMapsLocation` (e.g., `New York`).
5. **Set a Result Target** — Configure `maxBusinesses` to control how many businesses with emails you want.
6. **Optional: Per-Location Limiting** — Enable `scrapeMaxBusinessesPerLocation` if you want up to `maxBusinesses` per location.
7. **Add Proxy Settings (Optional)** — Configure `proxyConfiguration` if you’re running larger batches.
8. **Run & Download Results** — Review records in the Dataset tab and export when ready.

*No coding required.*

***

### Thoracic Surgeons Contact Scraper Output Format 📦

The actor saves results to your Apify dataset in structured JSON format. Each dataset row represents a business with extracted contact data.

#### ⬇️ Input Example

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

#### ⬆️ Output Example

```json
[
  {
    "name": "Thoracic Surgery Center of New York",
    "website": "https://www.thoracicsurgerycenter.com",
    "phone": "(212) 555-0198",
    "full_address": "123 W 42nd St New York NY 10036 US",
    "city": "New York",
    "state": "NY",
    "zip": "10036",
    "country_code": "US",
    "scraped_emails": ["contact@thoracicsurgerycenter.com", "referrals@thoracicsurgerycenter.com"],
    "scraped_phones": ["212-555-0198", "212-555-0144"],
    "scraped_social_media": ["https://www.linkedin.com/company/thoracic-surgery-center/"],
    "emails_found": 2,
    "pages_scraped": 7,
    "avg_rating": 4.6,
    "total_reviews": 128,
    "lat": "40.7603",
    "long": "-73.9855",
    "place_id": "ChIJN1t_tDeuEmsRUsoyG83frY4",
    "scrape_status": "success"
  }
]
```

#### Output Fields

| Field | Label | Format | Description |
|---|---|---|---|
| `name` | Business Name | text | Business name for the scraped provider/practice. |
| `website` | Website | link | Website URL used as the extraction source. |
| `phone` | Phone | text | Primary phone value associated with the business listing (if available). |
| `full_address` | Address | text | Full address string assembled from address components. |
| `city` | City | text | City value from the business listing. |
| `state` | State | text | State value from the business listing. |
| `zip` | zip | text | ZIP/postal code from the business listing. |
| `country_code` | country\_code | text | Country code from the business listing. |
| `scraped_emails` | Emails Found | array | Array of email addresses extracted from the business website. |
| `scraped_phones` | Phone Numbers | array | Array of phone numbers extracted from the business website. |
| `scraped_social_media` | Social Media | array | Array of social media links extracted from the business website. |
| `emails_found` | # Emails | number | Count of emails found for this business. |
| `pages_scraped` | Pages Scraped | number | Number of pages scraped while extracting contact info from the website. |
| `avg_rating` | Rating | number | Average rating associated with the listing (if available). |
| `total_reviews` | Reviews | number | Total review count associated with the listing (if available). |
| `lat` | lat | text | Latitude value for the listing (as text). |
| `long` | long | text | Longitude value for the listing (as text). |
| `place_id` | place\_id | text | Listing place identifier from the scraped source. |
| `scrape_status` | Status | text | Scraping outcome status for this business row. |

***

### 🎯 Use Cases of Thoracic Surgeons Contact Scraper

Thoracic Surgeons Contact Scraper is useful when you need large-scale, structured contact aggregation for healthcare teams and growth workflows.

- **B2B Lead Generation:** Build surgeon email and phone finder lists for outreach campaigns targeting thoracic surgery contact scraper needs at scale.
- **Email Marketing Campaigns:** Create practice contact information segments with extracted emails, phone numbers, and social links for more complete outreach profiles.
- **Healthcare CRM Enrichment:** Populate and refresh a healthcare provider database with structured data for medical contact aggregation and CRM import.
- **Practice Discovery & Referral Leads:** Support thoracic surgery referral leads by finding and enriching relevant practices in specific locations.
- **Research & Benchmarking:** Use extracted contact metadata to support healthcare provider database analysis and niche comparisons.

***

### How Much Will Thoracic Surgeons Contact Scraper Cost You? 💰

This actor is designed around producing lead/contact results and saving them into your dataset. In practice, your cost is best managed by the `maxBusinesses` target (and whether `scrapeMaxBusinessesPerLocation` is enabled). If you’re cost-sensitive, keep `maxBusinesses` lower while you test thoracic surgeon lead generation yield, then scale up once you see consistent results.

***

### Is It Legal to Scrape Thoracic Surgeons? ⚖️

Thoracic Surgeons Contact Scraper extracts information from publicly available sources and uses it to help you build a healthcare provider database. You should still review applicable laws and ensure you follow relevant platform terms and privacy requirements for your region and use case (including marketing consent rules). If you have questions about data handling or need assistance, contact <scrapidocontact@gmail.com>.

***

### Thoracic Surgeons Contact Scraper Input Parameters 📋

Below are the actor input parameters you can configure.

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

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `googleMapsSearchTerm` | string | ✅ Yes | `Thoracic Surgeons` | Business type or niche to search for (for example, “Thoracic Surgeons”). |
| `googleMapsLocation` | array | ✅ Yes | `["New York"]` | One or more target geographic locations to focus the results. |
| `maxBusinesses` | integer | No | `5` | Target number of businesses to find (1–1000). The scraper stops when this target is reached. |
| `scrapeMaxBusinessesPerLocation` | boolean | No | `false` | If enabled, collects up to `maxBusinesses` results per location; if disabled, combines locations up to a single total limit. |
| `proxyConfiguration` | object | No | `{ "proxy support": true }` | Proxy settings for scraping. Recommended for large-scale scraping. |

***

### During the Actor Run ⏱️

You’ll see scraping progress reflected in the Apify Console logs while the actor gathers businesses and then scrapes their websites for contact information. Results are pushed into the dataset as they’re produced, including arrays like `scraped_emails`, `scraped_phones`, and `scraped_social_media`. If a website isn’t available or doesn’t yield emails, `scrape_status` helps you quickly identify what happened.

***

### Final Note ✉️

Ready to accelerate thoracic surgery referral leads with automated contact scraping? Run **Thoracic Surgeons Contact Scraper** on Apify, export the dataset, and plug it into your outreach, research, or healthcare CRM enrichment workflow.

Questions or feedback? Email <scrapidocontact@gmail.com>.

***

### FAQ — Thoracic Surgeons Contact Scraper ❓

#### How does the Thoracic Surgeons Contact Scraper find contact emails?

The actor searches using your `googleMapsSearchTerm` and `googleMapsLocation`, then uses the business website it finds to extract publicly available email addresses. It outputs those emails into `scraped_emails` and provides `emails_found` as a summary count.

#### What does “scrapeMaxBusinessesPerLocation” change?

`scrapeMaxBusinessesPerLocation` controls how results are capped across multiple locations. When enabled, it collects up to `maxBusinesses` results per location; when disabled, it combines all locations and respects a single overall total limit based on `maxBusinesses`.

#### What data is included in the dataset?

Each dataset row includes business identity and contact enrichment fields such as `name`, `website`, `phone`, `full_address`, `scraped_emails`, `scraped_phones`, `scraped_social_media`, plus summary metrics like `emails_found`, `pages_scraped`, `avg_rating`, and `total_reviews`.

#### Will the actor extract phone numbers and social links too?

Yes. Along with emails, the actor extracts `scraped_phones` and `scraped_social_media` during website scraping. This is helpful for physician contact scraping workflows where you want more than just email addresses.

#### Does the actor support proxies?

Yes. Configure `proxyConfiguration` (including `proxy support`) for more reliable scraping at scale. This is especially useful for larger healthcare provider database extraction runs.

#### How can I verify whether a record succeeded?

Use the `scrape_status` field in the dataset. It indicates the outcome status for each business row, so you can filter to successes when building your thoracic surgeon lead generation pipeline.

#### What if some businesses have no website or no emails?

If a business has no website, its contact extraction fields are returned as empty arrays (and `emails_found` becomes 0). Your dataset will still include a row, with `scrape_status` reflecting what happened—useful for maintaining coverage in your medical contact aggregation analysis.

***

### 🆘 Support & Feedback

Need help running **Thoracic Surgeons Contact Scraper** or have a feature request?

Found a bug or want custom assistance? Contact <scrapidocontact@gmail.com>.

### Multiple Email Type

**Email Types** keeps only the kinds of mailbox you want. Every row records what
it was classified as in `emailType`.

| Type | What it matches |
| --- | --- |
| Personal | Free webmail (Gmail, Outlook, Yahoo, iCloud, ...) |
| Business | Company domains — free webmail and institutions excluded |
| Education | `.edu`, `.ac.uk`, `.edu.au` and other academic suffixes |
| Government | `.gov`, `.mil`, `.gov.uk`, `.gc.ca`, ... |
| Non-profit | `.org`, `.ngo`, `.org.uk`, ... |

A business found with no email at all is unaffected — whether those rows are
wanted is already governed by the existing email-only setting.

### Multiple Phone Type

**Phone Types** does the same for numbers, checked against the line's *real*
type rather than a guess. Numbers on ranges where mobile and landline cannot be
told apart are kept rather than dropped, since discarding them would lose good
leads.

### Outreach links

| Field | Meaning |
| --- | --- |
| `telLink` | A clickable `tel:` link for the primary number |
| `whatsappLink` | A `wa.me` chat link, or empty for a landline or an invalid number |
| `whatsappCapable` | Whether the line could support WhatsApp |
| `phoneContacts` | Every kept number with its own type, links and validity |

`whatsappCapable` never claims the person uses WhatsApp — only that the number
is of a kind that could. Turn the links off with **Include WhatsApp links**; the
capability flag is still reported.

# 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.

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

Run DNS/MX validation and confidence scoring on every email found, and include the results (confidence score, validation status, role-based/catch-all flags) in the output.

## `minRating` (type: `integer`):

Skip businesses rated below this (1-5 stars). Leave at 0 for no filter.

## `minReviews` (type: `integer`):

Skip businesses with fewer than this many Google reviews. Leave at 0 for no filter.

## `requireWebsite` (type: `boolean`):

Skip businesses with no website listed on Google Maps (they can't be crawled for contact info anyway).

## `leadMode` (type: `string`):

Business Contacts (default) returns the business's generic contact info (info@, main phone, socials). Decision-Maker Finder instead looks for a named person with a job title (e.g. "Jane Smith, Owner") on the business's team/about pages — a best-effort heuristic, not guaranteed on every site.

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

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

## `emailTypes` (type: `array`):

Which kinds of mailbox to keep. Pick as many as you like; leave empty for every type. A business with no email at all is unaffected by this - whether those rows are wanted is governed by the existing email-only setting.

## `phoneTypes` (type: `array`):

Which kinds of line to keep. Leave empty for every type. Numbers on ranges where mobile and landline cannot be told apart are always kept rather than silently dropped.

## `includeWhatsappLinks` (type: `boolean`):

Add a ready-made wa.me chat link for numbers on a line WhatsApp can run on. The link means the number is in a form WhatsApp accepts - not proof that an account exists.

## Actor input object example

```json
{
  "googleMapsSearchTerm": "Thoracic Surgeons",
  "googleMapsLocation": [
    "New York"
  ],
  "maxBusinesses": 5,
  "scrapeMaxBusinessesPerLocation": false,
  "validateEmails": false,
  "minRating": 0,
  "minReviews": 0,
  "requireWebsite": false,
  "leadMode": "Business Contacts",
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "emailTypes": [
    "Business"
  ],
  "phoneTypes": [
    "Mobile",
    "Landline"
  ],
  "includeWhatsappLinks": true
}
```

# 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 = {
    "googleMapsSearchTerm": "Thoracic Surgeons",
    "googleMapsLocation": [
        "New York"
    ],
    "maxBusinesses": 5,
    "proxyConfiguration": {
        "useApifyProxy": true
    },
    "emailTypes": [
        "Business"
    ],
    "phoneTypes": [
        "Mobile",
        "Landline"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapido/thoracic-surgeons-contact-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": "Thoracic Surgeons",
    "googleMapsLocation": ["New York"],
    "maxBusinesses": 5,
    "proxyConfiguration": { "useApifyProxy": True },
    "emailTypes": ["Business"],
    "phoneTypes": [
        "Mobile",
        "Landline",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("scrapido/thoracic-surgeons-contact-scraper").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 '{
  "googleMapsSearchTerm": "Thoracic Surgeons",
  "googleMapsLocation": [
    "New York"
  ],
  "maxBusinesses": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "emailTypes": [
    "Business"
  ],
  "phoneTypes": [
    "Mobile",
    "Landline"
  ]
}' |
apify call scrapido/thoracic-surgeons-contact-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapido/thoracic-surgeons-contact-scraper"
        }
    }
}

```

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/DgMohjLdR8PVsKjRE/builds/m4VM7kW6XHkTSw4zS/openapi.json
