# 🛡️ Insurance Agent Leads Scraper - Agency Emails & Phones (`renzomacar/insurance-agent-leads-scraper`) Actor

Turn any city into a fresh insurance agency list: independents, captive offices, life and commercial brokers with phone, website, emails and socials pulled live from each agency's site. For insurtech, AMS vendors, IMOs and agencies. $8 per 1,000 leads.

- **URL**: https://apify.com/renzomacar/insurance-agent-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/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

## 🛡️ Insurance Agent Leads Scraper — Agency Emails & Phones

Insurance distribution is a street-level business. Behind every carrier there are thousands of independent agencies, captive offices and one-producer shops that buy CRM seats, quoting tools, lead packages, E\&O coverage, printing, digital marketing and AMS software. None of them are in a tidy directory you can download. This Actor builds the list live for any city: **agency name, phone, website, address, emails and social profiles, pulled from each agency's own site**, at $8 per 1,000 agencies.

### Six agency types in one dropdown

The `Agency types` field is a multi-select, not a guessing game:

| Option | What it surfaces |
|---|---|
| Insurance agency (general) | The broad sweep — independents, franchises, storefronts |
| Insurance agent | Single-producer offices operating under their own name |
| Auto insurance agency | P\&C-heavy shops, the highest-volume segment |
| Life insurance agent | Life & annuity producers, often solo and high-LTV |
| Commercial insurance broker | Business lines, biggest ticket per account |
| Health insurance agent | Medicare/ACA brokers, extremely seasonal |

Select several and each runs as its own search; every row carries the `searchQuery` that found it, so you always know which segment a lead came from. Anything outside the list (crop insurance, title insurance, surety bonds) goes in `searchQueries` as free text.

### What one agency row holds

`name` · `category` · `phone` + `websitePhones[]` · `website` · `email` + `emails[]` + `emailFound` · `socialProfiles` (Facebook, Instagram, LinkedIn, Twitter) · `address` / `city` / `country` · `rating` + `reviewsCount` · `techStack[]` · `placeUrl` · coordinates · `searchQuery`.

Export to CSV/Excel/JSON, or pull the dataset over the API straight into your CRM or sequencer.

### Where this pays off

- **Insurtech and AMS vendors** — agencies still running a hand-built website (visible in `techStack`) are the ones without modern rating or CRM software either. That correlation is the cheapest qualification signal you will find.
- **Lead-package and marketing sellers** — sort by `reviewsCount` descending: high review counts mean a real book of business and budget to grow it.
- **Recruiters and IMOs** — solo `insurance agent` listings are the recruiting pool for FMO/IMO contracts; the phone number is on every row whether or not an email exists.
- **Local B2B services** — print, signage, bookkeeping, benefits: an insurance office is a small business like any other, and this is a clean territory list.

### What a run costs

$0.008 per agency delivered ($8 per 1,000) plus a $0.01 start fee. A full metro across all six agency types typically returns 250–600 agencies: **$2 to $5**. No subscription, no minimum, no annual data contract. Rows dropped by `onlyWithWebsite` are never charged, and a run that finds nothing costs only the start fee.

### Try it

```json
{
  "location": "Phoenix, AZ",
  "keywords": ["insurance agency", "commercial insurance broker"],
  "maxResults": 150,
  "maxPagesPerSite": 2
}
```

Multi-market: `"searchQueries": ["insurance agency in Tucson, AZ", "insurance agency in Mesa, AZ"]`.

### Honest limits

This finds **agencies as businesses**, not licensed-producer records. If you need NPN numbers, license status or lines of authority, that lives in state DOI and NIPR databases, not on the map. What you get here is the contactable front door of the agency — which is what outreach actually needs.

### FAQ

**How many agencies come with an email address?**
Insurance offices publish contact emails more often than most local trades — expect roughly half to two-thirds of agencies that have a website. `emailFound` makes the split a one-click filter, and every row keeps a phone number regardless.

**Will I get Allstate/State Farm/Farmers captive offices?**
Yes, they appear like any other listing. Captives usually sit on a carrier-hosted subdomain, so their rows share a root domain — dedupe on `website` if you only want independents, or keep them if you sell to the agent rather than the carrier.

**Can I separate personal lines from commercial?**
Choose the segment up front: `commercial insurance broker` skews to business lines, `auto insurance agency` to personal. Google Maps does not expose a lines-of-business field, so the search term is your segmentation lever.

**Is the data current?**
Everything is scraped at run time from live sources. There is no stored database behind this Actor, so an agency that moved or rebranded last month shows up with its current details.

**Do I get the producer's personal email or a generic one?**
Both, whatever the site publishes. Set `includeGenericEmails: false` to strip `info@` / `contact@` addresses and keep only named ones — fewer rows with emails, higher reply rates.

**Health insurance brokers are seasonal — does that matter?**
It affects your timing, not the data. Medicare AEP and ACA open enrollment are when those brokers buy tooling and leads; scrape the territory a month before the window opens rather than during it.

**Is scraping this data allowed?**
The Actor collects publicly listed business information and the email addresses agencies publish on their own websites specifically to be contacted. It does not touch policyholder or consumer data. Outreach compliance (CAN-SPAM, TCPA for calls and texts, GDPR where it applies) is on you.

**What about agencies with no website?**
Delivered by default with name, phone, address and rating — perfectly workable for a call motion. Set `onlyWithWebsite: true` to drop them; dropped rows are never charged.

***

Built on the same engine as the rest of this author's local-lead Actors. If your buyers are contractors, clinics or dealers instead, there is a niche-specific version for those too.

### Independent agencies vs. captive offices

The six presets do not distinguish between an independent agency that can move a book and a captive office that cannot — but the search terms do, because captive agents list under their carrier's name:

```
independent insurance agency in Columbus, OH
state farm agent in Columbus, OH
allstate agent in Dublin, OH
farmers insurance agent in Westerville, OH
insurance broker in Columbus, OH
```

Which side you want depends on what you sell. Agency management systems, wholesalers and carrier recruiters want the independents. Local marketing services, signage and lead vendors sell happily to both. Run the searches separately and you get two clean lists instead of one mixed one.

Custom search queries replace the keyword picker and `location` entirely, so each line has to name its own city.

### Medicare, final expense and senior-market agencies

The senior market runs on its own agencies, its own FMOs and its own selling season, and it is almost invisible in generic insurance lists:

```
medicare insurance agency in Sarasota, FL
medicare supplement agent in Venice, FL
final expense insurance agent in Bradenton, FL
long term care insurance agent in Sarasota, FL
annuity agent in Naples, FL
```

Time it around AEP. From mid-October to early December these agencies are unreachable; the months to land a conversation are spring and midsummer, while they are choosing tooling and carriers for the next cycle.

### Small-town and rural agencies

Rural offices are consistently the most under-marketed segment in insurance, and the data shows why: many have no website at all, only a Maps listing.

Leave `onlyWithWebsite` off when you sweep small markets. A row with a name, address and phone is still a lead — and for an agency with no website, the fact that it has none is the pitch. Because billing is per delivered row and identical whether or not an email was found, filtering those rows out costs you the segment without saving you anything.

```
insurance agency in Dodge City, KS
crop insurance agency in Garden City, KS
farm insurance agent in Liberal, KS
insurance agency in Hays, KS
```

# Actor input Schema

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

City, region or country to search in, e.g. 'Phoenix, AZ', 'Austin, TX', 'London, UK'.

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

Which insurance agency types to search for. Pick one or several; leave empty to sweep all six at once. Need a term that is not listed (e.g. 'crop insurance agency')? Use Custom search queries below.

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

Full searches, one per line (e.g. 'life insurance agent in Dallas, TX'). When set, these override Location + agency types, and any wording is allowed here — use it for segments outside the list above or to cover several 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": "Phoenix, AZ",
  "keywords": [
    "insurance agency"
  ],
  "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": "Phoenix, AZ",
    "keywords": [
        "insurance agency"
    ],
    "maxResults": 5,
    "maxPagesPerSite": 1
};

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

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

```

## MCP server setup

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