# 💉 Med Spa Leads Scraper - Medical Spa Emails & Phones (`renzomacar/medspa-leads-scraper`) Actor

Build a medical spa email list for any market: med spas, botox and laser clinics with phone, website, emails, Instagram and ratings — extracted live, not from a stale database. Made for aesthetic-industry vendors and marketing agencies. $8 per 1,000 leads.

- **URL**: https://apify.com/renzomacar/medspa-leads-scraper.md
- **Developed by:** [Renzo Madueno](https://apify.com/renzomacar) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.44 / 1,000 leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## 💉 Med Spa Leads Scraper — Medical Spa Emails & Phones

Med spas are one of the fastest-growing local verticals in the US — new injectable clinics, laser studios and aesthetic practices open every month, and every one of them buys devices, consumables, software and marketing. If they're your customers, this Actor hands you the market: pick a city, get every med spa with phone, website, **emails, Instagram and ratings extracted live from each clinic's own website**.

No database. No subscription. $8 per 1,000 clinics.

### Why live scraping beats a "medical spa email list"

Aesthetics is a rebranding machine: clinics change names, merge with dermatology groups, move to new domains. A purchased list is stale on arrival. Here, every row is discovered on the live map and enriched from the clinic's current website at the moment you press Start — so the email you get is the one the clinic answers today.

### Anatomy of a med spa lead

```
name             "Glow Aesthetics & Wellness"
category         "Medical spa"
phone            "+1 305-555-0147"
website          "glowaestheticsmiami.com"
email            "hello@glowaestheticsmiami.com"   ← from their site
emails           [all addresses found]
socialProfiles   { instagram, facebook, linkedin, twitter }
rating           4.9        reviewsCount  412
techStack        ["WordPress", "Google Analytics"]
address / city / country / latitude / longitude
contactPageUrl / placeUrl / searchQuery / scrapedAt
```

Instagram is captured deliberately — it's the storefront of this industry and your best personalization hook.

### Who buys med spa lists

- **Device & consumables reps** — lasers, injectables distribution, skincare lines: map every clinic in a rep's territory with a direct email.
- **Med spa marketing agencies** — the niche is crowded with agencies; win by outreaching new markets first, and qualify by `reviewsCount` (low reviews = needs marketing).
- **Aesthetics SaaS** — booking, EMR, membership platforms: build city-by-city prospect lists your SDRs can actually work.
- **MSO / roll-up acquirers** — census of independent clinics per metro, with ratings as a quality screen.

### Compliance, stated plainly

This Actor collects **business** information that clinics publish publicly: their map listing and the contact details on their own websites. It does not touch patient data, medical records, or anything behind a login — it's B2B contact discovery, not health data. Your outreach still has to follow CAN-SPAM (US), GDPR/PECR (EU/UK) and platform rules; that part is yours.

### Clinic types you can target

`keywords` is a free-text list, so you can search any aesthetic business type — but these are the segments that behave differently as buyers, and each one is its own Maps search:

| Keyword | Why you'd pick it |
|---|---|
| `med spa` / `medical spa` | The core list. Both spellings are searched by default because listings split between them |
| `botox clinic` | Injectable-led practices — the buyers for injectable supply, training and patient-financing offers |
| `laser hair removal` | Device-heavy, high-frequency ad spenders; strong fit for equipment and leasing vendors |
| `aesthetic clinic` | Physician-led aesthetics; larger ticket, more likely to run their own marketing team |
| `skin care clinic` | Facials/dermatology-adjacent; overlaps day spas, good for product and retail lines |
| `cosmetic dermatology` | MD-owned, the top of the market — smallest universe, highest value per account |
| `body contouring` | CoolSculpting/EmSculpt operators; a distinct segment most competitors' lists miss |

Leaving `keywords` empty sweeps the first six by default. Add `cosmetic dermatology` or `body contouring` explicitly when you want those segments.

### Adjacent aesthetic and wellness segments

`keywords` is free text pasted in front of your location, so nothing limits the run to the seven listed segments. The neighbouring categories share the same buyer — an owner-operator clinic, cash-pay patients, heavy local advertising — and they widen a thin market without diluting it:

```json
{
  "location": "Scottsdale, AZ",
  "keywords": ["iv therapy", "wellness clinic", "hair restoration clinic", "weight loss clinic"],
  "maxResults": 100
}
```

- `iv therapy` / `wellness clinic` — hydration and vitamin-drip businesses, often run by the same owner as a med spa and frequently a second location of one. Newer segment, thinner websites, high social dependence.
- `hair restoration clinic` / `hair transplant clinic` — high ticket, heavy paid-search spend, small universe per metro.
- `weight loss clinic` — currently the fastest-moving aesthetic-adjacent category; expect brand-new listings with few reviews and real ad budgets.
- `plastic surgery` / `dermatology clinic` — physician-owned and the top of the market. Larger practices, in-house marketing more often, and a longer sale, but the highest value per account.
- `day spa` / `beauty salon` — the volume floor. Include only if you sell something a non-medical business can buy; these will otherwise pad the list with poor fits.

Every row is tagged with the `searchQuery` that produced it, so a mixed run stays segmentable afterwards, and clinics that appear under two keywords are delivered and charged once.

### Input

```json
{
  "location": "Miami, FL",
  "keywords": ["med spa", "botox clinic"],
  "maxResults": 60,
  "maxPagesPerSite": 2
}
```

Leave `keywords` empty to sweep the default clinic types (med spa, medical spa, botox clinic, laser hair removal, aesthetic clinic, skin care clinic). Multi-city? Use `searchQueries`: `["medical spa in Scottsdale, AZ", "med spa in Tucson, AZ"]`.

### Price

$0.008 per clinic delivered + $0.01 per run. The full med spa market of a city like Miami (typically 150–400 clinics across keyword variants) costs **$1.50–3.50**.

### FAQ

**How is a "med spa" different from a day spa in the results?**
Search intent drives it: keywords like "med spa", "botox clinic" and "laser hair removal" surface medical-aesthetic businesses. The `category` Google assigns is included, so you can drop the occasional massage spa downstream.

**What share of clinics come with an email?**
In this vertical most clinics run polished websites, so email coverage is on the higher end — commonly 50–70% of clinics with a site. `emailFound` flags each row; the rest still carry phone + Instagram.

**Can I find clinics that just opened?**
Yes — schedule the same city weekly and diff the results; new `placeUrl`s are new clinics. Low `reviewsCount` is another freshness signal.

**Does it include the medical director's or owner's name?**
No — this is company-level data. Pair the domains with a person-level email finder if you need named contacts.

**Can I use it outside the US?**
Anywhere Google Maps operates: "medical spa in Dubai", "clínica estética in Madrid" (set `language` accordingly).

**Why do some rows have no website?**
Some clinics only run Instagram. They're still delivered with phone and address; set `onlyWithWebsite: true` to exclude them and you won't be charged for those.

**Is patient information ever collected?**
Never. Only the clinic's public business listing and its own published business contacts.

**What happens on an over-narrow search?**
A zero-result run still succeeds and costs only the $0.01 start fee — broaden the keyword or city and rerun.

### Same engine, other niches

- [B2B Leads Finder](https://apify.com/renzomacar/b2b-leads-finder) — any industry, any city.
- [Website Contact Finder](https://apify.com/renzomacar/website-contact-finder) — enrich URL lists you already have.
- [Email Verifier](https://apify.com/renzomacar/email-verifier) — verify addresses before sending.

# Actor input Schema

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

City, region or country to search in, e.g. 'Miami, FL', 'San Diego, CA', 'London, UK'.

## `keywords` (type: `array`):

Which aesthetic business types to search for, one per line. Good options: 'med spa', 'medical spa', 'botox clinic', 'laser hair removal', 'aesthetic clinic', 'skin care clinic', 'cosmetic dermatology', 'body contouring'. Leave empty to search all common clinic types at once.

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

Full searches, one per line (e.g. 'med spa in Miami, FL'). When set, these override Location + clinic types. Use several queries to cover multiple cities in one run.

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

Maximum number of companies to find per search. One search typically yields up to ~120 companies.

## `maxPagesPerSite` (type: `integer`):

How many pages to check on each company website when hunting for emails (homepage, /contact, /about...). More pages = more emails found, slightly slower run.

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

Drop companies that have no website (they can never have an email). You are not charged for dropped companies.

## `includeGenericEmails` (type: `boolean`):

Keep addresses like info@, hello@, contact@. Disable to keep only personal/role emails (fewer results).

## `language` (type: `string`):

Language code for the discovery search (e.g. 'en', 'es', 'fr', 'de').

## Actor input object example

```json
{
  "location": "Miami, FL",
  "keywords": [
    "med spa"
  ],
  "maxResults": 5,
  "maxPagesPerSite": 1,
  "onlyWithWebsite": false,
  "includeGenericEmails": true,
  "language": "en"
}
```

# Actor output Schema

## `leads` (type: `string`):

Med Spa Leads Scraper results (business, website, phone, address, emails, social profiles), one item per lead in the default dataset.

# 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": "Miami, FL",
    "keywords": [
        "med spa"
    ],
    "maxResults": 5,
    "maxPagesPerSite": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("renzomacar/medspa-leads-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 = {
    "location": "Miami, FL",
    "keywords": ["med spa"],
    "maxResults": 5,
    "maxPagesPerSite": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("renzomacar/medspa-leads-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 '{
  "location": "Miami, FL",
  "keywords": [
    "med spa"
  ],
  "maxResults": 5,
  "maxPagesPerSite": 1
}' |
apify call renzomacar/medspa-leads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,renzomacar/medspa-leads-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/mrJ77zQLmF2ArYHAG/builds/3L2ZGkLaXhtkv7Ugj/openapi.json
