# Realtor.com Agent Leads Scraper – Emails, Phones & Brokerage (`devil_port369-owner/realtor-agent-leads-scraper`) Actor

Scrape US real estate agent leads from Realtor.com by city or ZIP. Export full name, emails, phones, license, brokerage, ratings, specialties, and social links — CRM-ready for recruiting and outreach.

- **URL**: https://apify.com/devil\_port369-owner/realtor-agent-leads-scraper.md
- **Developed by:** [DataFusionX](https://apify.com/devil_port369-owner) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.20 / 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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Realtor Agent Scraper – Scrape Realtor.com Agent Emails, Phones & MLS Leads

> **The fastest way to build real estate agent lead lists from Realtor.com.** Search any city or ZIP and export agent full name, email(s), phone(s), MLS license, brokerage, ratings, specialties, served areas, and social links — flat, CRM-ready JSON, no API key required.

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-orange.svg)](https://apify.com)

***

### What is this Realtor.com agent scraper?

**This Realtor agent scraper extracts real estate agent contact and profile data directly from Realtor.com's agent directory — by city, state, or ZIP code, with no Realtor.com API key needed.** Give it a location, and it returns structured lead data: agent name, verified email and phone, brokerage and office details, MLS license number, star rating, recent sales activity, specialties, service areas, and social profiles. It's built for anyone who's searched *"how to scrape real estate agent emails"* and needs a reliable, production-ready pipeline instead of manual copy-pasting from agent profile pages.

**What it extracts:** individual agent profiles from Realtor.com's `realestateagents` directory — contact info, license/brokerage data, ratings, and social links.

**Who it's for:** real estate recruiters, mortgage and title marketers, PropTech CRMs, coaching/training programs, and lead-gen agencies that sell to or through agents.

**Why choose this over a property listings scraper:** listing scrapers return *properties*; this Actor returns *people* — the agents themselves, enriched with license, brokerage, and contact data purpose-built for outreach and recruiting, not home-buying.

***

### Why scrape Realtor.com agents? (Business Use Cases)

- **Agent Recruiting** — Build market-specific candidate lists (by city, ZIP, or rating threshold) for brokerage recruiting and team-building outreach.
- **Mortgage, Title & Vendor Marketing** — Generate targeted outreach lists of active agents in a territory for loan officers, title companies, and real estate SaaS/vendor sales teams.
- **MLS & Licensing Compliance Research** — Pull license numbers and license states in bulk to verify agent credentials or cross-reference against state licensing boards.
- **Market Share & Competitive Analysis** — Identify top-producing agents by review score, active listings, and recently-sold volume within a given market.

### Key Features

| Feature | Detail |
|--------|--------|
| **Location search** | `City, ST` or ZIP code — each location scraped independently |
| **Per-location limits** | `maxItems` (or the `limitPerLocation` alias) caps agents per location |
| **Rating filter** | Keep only agents above a chosen star threshold (`minRating`) |
| **Buyer/seller intent filter** | Narrow results to buyer's agents, seller's agents, or both (`agentType`) |
| **Deep profile enrichment** | Full bio, license number, license state, phones, and social links (`enrichProfiles`) |
| **Rich lead fields** | Brokerage, office address, MLS IDs, specialties, served areas, review score/count, active listings, recently sold counts, price range |
| **Social links included** | Facebook, Instagram, LinkedIn, Twitter/X, YouTube, TikTok — where published |
| **Streaming output** | Every agent is pushed to the dataset as soon as it's scraped |

***

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `locations` | string\[] | **Yes** | — | Cities (`City, ST`) and/or ZIP codes to search for agents; each is scraped independently |
| `maxItems` | integer | No | `200` | Maximum agents to collect **per location** (e.g. 2 cities × 200 = up to 400 agents) |
| `limitPerLocation` | integer | No | — | Alias for `maxItems` (Braveleads-compatible); used only if `maxItems` isn't set |
| `minRating` | number | No | `0` | Only keep agents with an average rating ≥ this value (0–5); `0` = no filter |
| `agentType` | string | No | `both` | `both` | `buyer` | `seller` — filter by specialization intent where available |
| `enrichProfiles` | boolean | No | `true` | Fetch full agent branding profile for richer bio, license, phone, and social data |

Valid input sample:

```json
{
  "locations": ["Chicago, IL", "Houston, TX", "90210"],
  "maxItems": 200,
  "minRating": 4,
  "agentType": "both",
  "enrichProfiles": true
}
```

***

### Output Data Structure

Each output item is one flat agent record, combining contact info, brokerage/license data, performance stats, and social links.

```json
{
  "country": "US",
  "source": "realtor",
  "locationQuery": "90210",
  "agentId": "56c4d53a89a68901006ddecd",
  "fullName": "Jordan Ellis",
  "firstName": "Jordan",
  "lastName": "Ellis",
  "profileUrl": "https://www.realtor.com/realestateagents/...",
  "phone": "(555) 017-1473",
  "phones": ["(555) 017-1473"],
  "email": "jordan.ellis@example.com",
  "emails": ["jordan.ellis@example.com"],
  "websiteUrl": "https://www.example-realtorsite.com",
  "officeName": "Example Realty Group",
  "officeAddress": "123 Main Street, Upland, CA, 91786",
  "city": "Upland",
  "state": "CA",
  "brokerName": "EXAMPLE REALTY GROUP",
  "licenseNo": "01234567",
  "licenseState": "CA",
  "specialties": ["Luxury Homes", "First-Time Buyers", "Investment Properties"],
  "servedAreas": ["Upland, CA", "Rancho Cucamonga, CA", "Claremont, CA"],
  "intentType": ["BUYER", "SELLER"],
  "reviewScore": 5,
  "reviewCount": 42,
  "activeListings": 6,
  "recentlySoldAnnual": 18,
  "priceMin": 250000,
  "priceMax": 4500000,
  "facebook": "https://facebook.com/...",
  "instagram": "https://instagram.com/...",
  "isRealtor": true,
  "scrapedAt": "2026-09-18T09:32:32.810239+00:00"
}
```

Export straight to JSON, CSV, or Excel from the Apify dataset UI or API — ready to import into your CRM or outreach tool without reshaping.

***

### How to Scrape Realtor.com Agent Leads in 4 Steps

1. **Configure input** — Add target cities or ZIP codes to `locations`, then set `minRating` and `agentType` to narrow your lead list.
2. **Run the Actor** — Click "Start" in the Apify Console, or trigger it via the Apify API, Python, or JavaScript SDK.
3. **Preview leads** — Watch agent records stream into the dataset in real time as they're scraped.
4. **Export or sync** — Download as JSON, CSV, or Excel, or push leads straight into HubSpot, Salesforce, Instantly, or a spreadsheet via Zapier, Make, n8n, or webhooks.

### Integrations & Export Options

Results export natively to JSON, CSV, and Excel, and connect directly to no-code tools like n8n, Zapier, and Make. Sync scraped agent leads into HubSpot, Salesforce, Instantly, Google Sheets, or a data warehouse via the Apify API, SDKs, or scheduled webhook triggers — ideal for keeping recruiting or outreach pipelines continuously refreshed with new agents in target markets.

***

### Frequently Asked Questions (FAQ)

#### How do I scrape real estate agent emails from Realtor.com?

Enter one or more cities or ZIP codes into `locations`, enable `enrichProfiles` for fuller contact coverage, and run the Actor. It returns each agent's public email, phone, brokerage, and license data as structured JSON — ready to export to CSV or your CRM.

#### Is this the same as a property listings scraper?

No. This Actor targets the **agent directory** (`realestateagents`) for lead generation — names, contacts, licenses, and brokerage data. Use a property listings scraper (like a Realtor.com homes-for-sale Actor) if you need home listings instead of agent profiles.

#### Can I filter for only top-rated agents?

Yes — set `minRating` to `4` or `4.5` to exclude agents below that star rating, useful for recruiting or partnership outreach focused on proven performers.

#### Why is an agent's email sometimes missing?

Realtor.com doesn't expose an email on every public agent card. Enabling `enrichProfiles` (on by default) significantly improves email and phone coverage by pulling the agent's full branding profile, though a small number of agents still keep contact details private.

#### How does `maxItems` work with multiple cities or ZIPs?

It applies **per location**, not globally. Two locations with `maxItems: 200` can return up to **400** agents total — one location's cap doesn't affect another's.

#### Can I filter agents by buyer or seller specialization?

Yes — set `agentType` to `buyer` or `seller` to narrow results to agents whose profile indicates that intent; use `both` (default) for no filtering.

#### Can I integrate this with my CRM or outreach tools?

Yes. Use the Apify API, webhooks, or Python/JS SDKs to push agent leads directly into HubSpot, Salesforce, Instantly, Google Sheets, or your own outreach/dialer stack.

***

### SEO Keywords

realtor agent scraper, scrape realtor.com agents, real estate agent leads, realtor.com agent email scraper, scrape realtor agents by zip code, real estate agent phone number scraper, real estate agent contact info scraper, brokerage leads scraper, MLS agent license scraper, buyer seller agent list, real estate recruiting data, Apify realtor agents

***

### Built by **DataFusionX**

# Actor input Schema

## `locations` (type: `array`):

Cities (City, ST) and/or ZIP codes to search for agents. Each location is scraped independently up to maxItems.

## `maxItems` (type: `integer`):

Maximum agents to collect PER location. Example: 2 cities × 100 = up to 200 agents. Set 0 for unlimited.

## `limitPerLocation` (type: `integer`):

Alias for maxItems (Braveleads-compatible). Used only if maxItems is not set.

## `minRating` (type: `number`):

Only keep agents with average rating >= this value (0 = no filter).

## `agentType` (type: `string`):

Filter by specialization intent when available on profiles.

## `enrichProfiles` (type: `boolean`):

Fetch AgentBrandingProfile for fuller bio, license, phones, and social links. Slightly slower; recommended for lead gen.

## Actor input object example

```json
{
  "locations": [
    "Austin, TX",
    "90210"
  ],
  "maxItems": 200,
  "minRating": 0,
  "agentType": "both",
  "enrichProfiles": true
}
```

# 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 = {
    "locations": [
        "Austin, TX",
        "90210"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("devil_port369-owner/realtor-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 = { "locations": [
        "Austin, TX",
        "90210",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("devil_port369-owner/realtor-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 '{
  "locations": [
    "Austin, TX",
    "90210"
  ]
}' |
apify call devil_port369-owner/realtor-agent-leads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,devil_port369-owner/realtor-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/ESJKNuuTHl63kovhP/builds/KfDtSImzpVGWZaZ7p/openapi.json
