# Real Estate Agent & Agency Lead Scraper - Realtor Emails (`benthepythondev/real-estate-agent-lead-scraper`) Actor

Find real-estate agents, brokers and agencies by city and get their contact emails, phones and websites. Built on Google Maps + website/Impressum email enrichment, with agent/agency classification and lead scoring. Pay per lead; premium only when an email is found.

- **URL**: https://apify.com/benthepythondev/real-estate-agent-lead-scraper.md
- **Developed by:** [Ben](https://apify.com/benthepythondev) (community)
- **Categories:** Real estate, Lead generation, Business
- **Stats:** 5 total users, 4 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 results

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

## 🏡 Real Estate Agent & Agency Lead Scraper

Build a targeted list of **real-estate agents, brokers and agencies** — with their **contact emails**, phone numbers and websites — for any city. Search Google Maps by location (or paste a list of agency websites) and this Actor returns one clean, scored lead per agent/agency, with the email pulled from the agency's website, contact and **Impressum** pages.

Perfect for anyone who sells to the real-estate industry — CRM and SaaS vendors, mortgage and title services, photographers, stagers, marketers and recruiters. Export to JSON/CSV/Excel, run on a schedule, call via API, or connect to Make, Zapier or n8n.

### 🔎 What is the Real Estate Agent & Agency Lead Scraper?

Finding realtors is easy; getting their *email* is the hard part. This Actor does both: it finds agents and agencies on Google Maps for your target city, then visits each one's website to pull a real, scored contact email — and tells you whether each result is an **agency/brokerage** or an **individual agent**. The German Impressum requirement makes hit rates especially high across the DACH market.

#### What data does it extract?

- **Agent / agency name, address and phone**
- **Website and clean domain**
- **Listing type** — agency/brokerage vs individual agent (auto-classified)
- **Primary contact email** with a confidence score (0–100) and its source (website, Impressum, contact page)
- **All emails found**, de-duplicated and ranked
- **Rating and review count** from Google Maps
- **Lead score (0–100)** combining contact completeness, reviews and rating
- **Google Maps URL** and the original search query/location

### ⬇️ Input

| Field | Type | Description |
|-------|------|-------------|
| `mode` | string | `search` (Google Maps by keyword + location) or `websites` (enrich your own list). Required. |
| `query` | string | What to search, e.g. `real estate agents`, `Immobilienmakler`, `realtor`. Default `real estate agents`. |
| `location` | string | City or region, e.g. `Austin, TX`, `Berlin, Germany`. |
| `maxResults` | integer | Max leads to scrape and enrich (1–200). Default `10`. |
| `websites` | array | Agency websites/domains to enrich. Used in `websites` mode. |
| `requireEmail` | boolean | Only return leads where an email was found. Default `false`. |
| `enableSmtpVerification` | boolean | SMTP-verify role-based guesses. Default `true`. |

#### Example input

```json
{
  "mode": "search",
  "query": "real estate agents",
  "location": "Miami, FL",
  "maxResults": 100,
  "requireEmail": true
}
```

### ⬆️ Output

One record per agent/agency:

```json
{
  "name": "Sunshine Realty Group",
  "website": "https://www.sunshinerealty.com",
  "domain": "sunshinerealty.com",
  "phone": "+1 305-555-0142",
  "address": "120 Biscayne Blvd, Miami, FL 33132",
  "rating": 4.9,
  "review_count": 212,
  "categories": ["Real estate agency"],
  "listing_type": "agency",
  "primary_email": "info@sunshinerealty.com",
  "email_confidence": 90,
  "email_source": "website",
  "emails": [
    { "email": "info@sunshinerealty.com", "confidence": 90, "source": "website" }
  ],
  "has_email": true,
  "lead_score": 96,
  "google_maps_url": "https://www.google.com/maps/place/...",
  "search_query": "real estate agents",
  "search_location": "Miami, FL"
}
```

### 💡 Use cases

- 🏢 **Sell to realtors** — CRM/SaaS, mortgage, title, insurance and marketing vendors building targeted agent lists.
- 📸 **Real-estate services** — photographers, stagers, drone/video and copywriting services reaching local agencies.
- 🧑‍💼 **Recruiting** — brokerages and teams sourcing agents to recruit, by city.
- 🌍 **DACH coverage** — high email hit rates on German/Austrian/Swiss Makler via legally-published Impressum addresses.

### ❓ FAQ

**Do I need an API key or login?** No — a query + location is enough.

**Where do the emails come from?** From each agency's own website — homepage, contact/Kontakt and Impressum pages. If none are public, common business inboxes (info@, kontakt@, sales@…) are generated and validated with MX (and SMTP where allowed).

**What does `listing_type` mean?** A best-effort label of whether the result is an agency/brokerage or an individual agent, based on the name and Google Maps categories.

**How accurate are the emails?** Published addresses are real and high-confidence; role-based guesses are MX-validated. Filter by `email_confidence` for only the surest ones.

**Can I get only leads with an email?** Yes — set `requireEmail` to `true`.

**Does it work worldwide?** Yes, anywhere Google Maps covers; DACH hit rates are exceptionally high thanks to the Impressum.

**How does pricing work?** Pay per lead, plus a small premium **only** when a contact email is found. No subscription.

**Can I schedule it?** Yes — recurring runs + API/Make/Zapier/n8n.

**Is it legal?** It collects publicly available business contact data. Use it for legitimate B2B outreach and comply with GDPR/CAN-SPAM and local law.

### 🔗 You might also like

- [Google Maps Email Scraper](https://apify.com/benthepythondev/google-maps-email-scraper) — the same engine for any business niche.
- [Website Contact & Email Extractor](https://apify.com/benthepythondev/website-contact-extractor) — enrich any list of websites with emails, phones and socials.
- [Kleinanzeigen Immobilien Scraper](https://apify.com/benthepythondev/kleinanzeigen-immobilien-scraper) — German property listings.
- [OnTheMarket Scraper](https://apify.com/benthepythondev/onthemarket-scraper) — UK property listings.

***

**Keywords:** real estate agent scraper, realtor email scraper, real estate leads, realtor leads, real estate agency scraper, immobilienmakler scraper, estate agent emails, real estate lead generation, broker email list, realtor contact data, real estate prospecting, agent email finder, google maps real estate, proptech leads, real estate b2b data, makler leads dach

### Workflow and data quality

For best results, run this actor as part of a repeatable data pipeline rather than a one-off scrape. Start with a focused input, export the dataset to CSV or JSON, and keep a stable unique field such as URL, ID, domain, package name or title as your deduplication key. Schedule the same task daily or weekly when you need monitoring, then compare each new dataset with the previous run to identify fresh records, removed records and changed fields.

The output is designed to be practical for business workflows: spreadsheets, dashboards, enrichment steps, alerts, CRM imports and lightweight internal APIs. Null values mean the source did not provide that field, not that the actor guessed. For larger projects, combine this actor with related Apify scrapers and use the shared URL/company/domain fields to build a richer dataset without manual copy-paste work.

After a successful run, please consider leaving a short Store review. For support, open the Actor's **Issues** tab and include the run ID and input that reproduced the problem.

# Actor input Schema

## `mode` (type: `string`):

Search Google Maps for agents/agencies, or enrich a list of agency websites you already have.

## `query` (type: `string`):

What to search for, e.g. 'real estate agents', 'real estate agency', 'Immobilienmakler', 'realtor'. Used in 'search' mode.

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

City or region, e.g. 'Austin, TX', 'Berlin, Germany', 'London, UK'. Used in 'search' mode.

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

Maximum number of agent/agency leads to scrape and enrich (1-200).

## `websites` (type: `array`):

List of agency/agent websites or domains to find emails for. Used in 'websites' mode.

## `requireEmail` (type: `boolean`):

If enabled, leads where no contact email could be found are skipped (you are not charged the email fee for them).

## `enableSmtpVerification` (type: `boolean`):

Verify role-based guesses (info@, sales@...) over SMTP when possible. Published emails are always MX-validated. Often blocked in the cloud; disable for speed.

## `smtpTimeout` (type: `integer`):

Per-server SMTP timeout.

## Actor input object example

```json
{
  "mode": "search",
  "query": "real estate agents",
  "location": "Austin, TX",
  "maxResults": 3,
  "requireEmail": false,
  "enableSmtpVerification": false,
  "smtpTimeout": 5
}
```

# Actor output Schema

## `results` (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 = {
    "query": "real estate agents",
    "location": "Austin, TX",
    "maxResults": 3,
    "enableSmtpVerification": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("benthepythondev/real-estate-agent-lead-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 = {
    "query": "real estate agents",
    "location": "Austin, TX",
    "maxResults": 3,
    "enableSmtpVerification": False,
}

# Run the Actor and wait for it to finish
run = client.actor("benthepythondev/real-estate-agent-lead-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 '{
  "query": "real estate agents",
  "location": "Austin, TX",
  "maxResults": 3,
  "enableSmtpVerification": false
}' |
apify call benthepythondev/real-estate-agent-lead-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=benthepythondev/real-estate-agent-lead-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/4ScGryvxtqJmrucnf/builds/5cZIu9sm2cRsd2aew/openapi.json
