# 🐾 Veterinarian Leads Scraper - Vet Clinic Emails & Phones (`renzomacar/veterinarian-leads-scraper`) Actor

Turn any city into a fresh vet clinic list: veterinarians, animal hospitals and emergency vets with phone, website, emails and socials pulled live from each clinic's site. For pet-industry vendors, veterinary software and agencies. $8 per 1,000 leads.

- **URL**: https://apify.com/renzomacar/veterinarian-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 $8.00 / 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.

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

## 🐾 Veterinarian Leads Scraper — Vet Clinic Emails & Phones

The pet economy keeps growing, and everyone selling into it — pet food brands, practice-management software, telehealth, diagnostics labs, pet insurance — needs the same thing: an up-to-date list of veterinary practices with someone to contact. This Actor builds that list live for any city or region: **clinic name, phone, website, address, emails and social profiles pulled from each practice's own site**, at $8 per 1,000 clinics.

### From city name to CSV in three steps

1. Type a **location** ("San Diego, CA") and optionally narrow the **practice types**: veterinarian, veterinary clinic, animal hospital, emergency vet, mobile veterinarian, exotic animal vet. Empty = all common types.
2. The Actor finds every matching practice on the live Google Maps business index, then visits each clinic's website (homepage, /contact, /about) for emails, extra phones and socials.
3. Export the dataset as CSV/Excel/JSON, or pull it by API into your CRM or cold-email tool.

A 5-clinic test finishes in about a minute. A full metro (typically 150–400 practices) takes a few minutes and costs $1–3.

### Output fields

| Field | What you get |
|---|---|
| `name`, `category` | Pacific Paws Animal Hospital · Veterinarian |
| `phone` + `websitePhones[]` | Front-desk line plus extra numbers found on the site |
| `email`, `emails[]`, `emailFound` | Addresses published on the clinic's own website |
| `socialProfiles` | Facebook, Instagram, LinkedIn, Twitter |
| `address`, `city`, `country` | Full street address, parsed |
| `rating`, `reviewsCount` | Reputation signal — great for prioritizing outreach |
| `techStack[]` | Clinic website platform (WordPress, Wix...) |
| `placeUrl`, `searchQuery` | Maps link + which search found it |

### Ideas that work in this vertical

- **Pet brands & distributors**: build a wholesale prospecting list of independent clinics per territory — clinics with high review counts move more product.
- **Veterinary software / telehealth**: filter `techStack` for dated website builders; a clinic with an old site rarely has modern practice software either.
- **Relief vets & recruiters**: emergency and 24-hour hospitals are chronically understaffed — search "emergency vet" across ten metros in one run with `searchQueries`.
- **Local marketers**: `emailFound=false` clinics still give you phone + address for call/mail campaigns; you pay the same $0.008 either way, so filter after export.

### What it costs

$0.008 per clinic delivered ($8 per 1,000) plus a $0.01 start fee per run. No subscription, no seat licenses, no annual list contracts. A run that finds nothing costs only the start fee.

### Example input

```json
{
  "location": "San Diego, CA",
  "keywords": ["veterinarian", "animal hospital"],
  "maxResults": 150,
  "maxPagesPerSite": 2
}
```

Multi-city run: `"searchQueries": ["emergency vet in Phoenix, AZ", "animal hospital in Tucson, AZ"]`.

### FAQ

**What share of clinics come with an email?**
Veterinary practices are better than most local niches at publishing contact emails — expect roughly half to two-thirds of clinics with a website. The `emailFound` flag makes filtering trivial, and every row keeps the phone number.

**Can I target only exotic/equine/feline practices?**
Yes. Put the exact practice type in `keywords` — "exotic animal vet", "equine vet", "cat clinic" — each runs as its own search and results carry the `searchQuery` that found them.

**Does it include corporate chains (Banfield, VCA)?**
Chains appear like any other listing. Their locations share corporate websites, so their rows often carry the same domain — dedupe on `website` if you only want independents.

**Is the data fresh?**
Everything is scraped at run time from live sources — no stale database. A clinic that rebranded last month shows up with its new name and site.

**Is scraping this allowed?**
The Actor collects publicly listed business data and emails clinics publish on their own sites in order to be contacted. Comply with CAN-SPAM/GDPR and local rules when you reach out.

**Clinics without a website?**
Delivered by default with name/phone/address/rating — solid for phone outreach. Set `onlyWithWebsite: true` to drop them; dropped rows are never charged.

### Equine, exotic and large-animal practices

A plain "veterinarian" search returns small-animal clinics. The specialty practices are a different business with different budgets, and Maps files them separately:

```
equine veterinarian in Lexington, KY
large animal veterinarian in Georgetown, KY
mobile veterinarian in Lexington, KY
exotic animal veterinarian in Louisville, KY
avian veterinarian in Louisville, KY
```

Because these are the searches, not the keyword list, they go into **Custom search queries** — which then override both the keyword field and `location`, so each line has to carry its own city.

Equine and large-animal vets skew heavily mobile: no waiting room, a truck, and a website built to be reached. Email coverage in this segment runs above the small-animal average, and `websitePhones` frequently contains the on-call mobile alongside the office line.

### Grooming, boarding, daycare and the wider pet-services map

Everything a pet owner spends money on, minus the medicine:

```
pet grooming salon in Raleigh, NC
dog boarding facility in Cary, NC
doggy daycare in Raleigh, NC
pet training school in Durham, NC
mobile dog grooming in Apex, NC
```

Useful when what you sell is booking software, insurance, retail supply or franchise development rather than clinical products. These businesses are smaller than clinics and much likelier to be run from a personal inbox that is published right on the homepage.

### Emergency, referral and specialty hospitals

```
emergency veterinary hospital in Phoenix, AZ
24 hour animal hospital in Scottsdale, AZ
veterinary specialty hospital in Tempe, AZ
veterinary oncology clinic in Phoenix, AZ
animal rehabilitation center in Chandler, AZ
```

A metro has dozens of GP clinics and a handful of emergency and referral hospitals — but the hospitals carry the equipment budgets. Small result counts here are expected and correct, not a failed run: if a search returns nothing the actor says so in the log and finishes successfully with an empty dataset rather than failing, and you are charged nothing per lead.

# Actor input Schema

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

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

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

Which veterinary practice types to search for, one per line. Good options: 'veterinarian', 'veterinary clinic', 'animal hospital', 'emergency vet', 'mobile veterinarian', 'exotic animal vet', 'equine vet', 'cat clinic'. Leave empty to search all common practice types at once.

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

Full searches, one per line (e.g. 'emergency vet in Denver, CO'). When set, these override Location + practice 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 every published address, including shared inboxes like info@, hello@ and contact@. Disable to drop only non-deliverable system addresses (noreply@, no-reply@, donotreply@, mailer-daemon@, postmaster@, webmaster@, hostmaster@, abuse@).

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

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

## Actor input object example

```json
{
  "location": "San Diego, CA",
  "keywords": [
    "veterinarian"
  ],
  "maxResults": 5,
  "maxPagesPerSite": 1,
  "onlyWithWebsite": false,
  "includeGenericEmails": true,
  "language": "en"
}
```

# Actor output Schema

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

Complete B2B leads (company, 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": "San Diego, CA",
    "keywords": [
        "veterinarian"
    ],
    "maxResults": 5,
    "maxPagesPerSite": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("renzomacar/veterinarian-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": "San Diego, CA",
    "keywords": ["veterinarian"],
    "maxResults": 5,
    "maxPagesPerSite": 1,
}

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

```

## MCP server setup

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