# Realtor.com Agent Leads (`schnellscrapers/realtor-agent-leads`) Actor

Scrape Realtor.com agent profiles by ZIP code or city, returning phone numbers, websites, brokerages, offices, licenses, specialties, ratings, social links, and listing stats for CRM-ready real-estate lead lists.

- **URL**: https://apify.com/schnellscrapers/realtor-agent-leads.md
- **Developed by:** [Nate Schnell](https://apify.com/schnellscrapers) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.25 / 1,000 agent 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

### What does Realtor.com Agent Leads do?

Realtor.com Agent Leads collects public agent profiles by ZIP code or city and state, then returns contact, brokerage, qualification, and production fields in one flat dataset row per agent. It is built for real-estate marketing, brokerage recruiting, vendor outreach, and territory planning where a phone-ready local agent list is more useful than a mixed property feed.

### What data can you extract from Realtor.com?

- Contact — direct phone, office phone, website, public profile URL
- Identity and office — full name, brokerage, office name, office address, city, state, ZIP, license number, and license state
- Lead qualification — average rating, review count, recommendations, Realtor flag, paid-profile flag, buyer/seller intent, languages, and specializations
- Production — active for-sale listing count and price band, recent annual sales count and price band, and last listing date
- Coverage and marketing — served areas, Facebook, Instagram, LinkedIn, TikTok, X, and YouTube profile URLs

The actor keeps source location, source URL, and an emission timestamp on every record so a scheduled run can be traced back to the search that produced it. Empty source fields are returned as `null`; the actor does not guess email addresses. Realtor.com profiles observed in the source pages expose public phone and website fields, but not a reliable agent email field.

### How to use Realtor.com Agent Leads

1. Open the actor and enter one or more five-digit ZIP codes, or city/state values such as `Austin, TX`, in **ZIP codes or city locations**.
2. Set **Maximum agents to return** and **Maximum pages per location** to bound the run.
3. Keep **Enrich profiles with contact details** enabled for phones, websites, specialties, and listing statistics.
4. Optionally require a phone, a minimum review count, a minimum active-listing count, or a specialization keyword.
5. Click **Run**, then download the dataset as JSON, CSV, or Excel, or connect the dataset API to your CRM and workflow.

### How much does it cost?

The actor uses pay-per-event pricing: the current Store price is `$1.25 / 1,000 returned agent records`, plus a small fixed actor-start event for each run. There is no free tier. You are charged only for records that pass the selected filters and are written to the dataset; skipped locations, duplicate profiles, and excluded agents are not result events. Use **Dry run** to check a location and filter combination without writing records. The Pricing tab is authoritative if the Store price changes.

### Input

The main input is `locations`, containing ZIP codes or `City, ST` values. `maxItems`, `maxAgentsPerLocation`, and `maxPagesPerLocation` bound the work. Contact enrichment is on by default, while `hasPhone`, `minReviews`, `minForSaleListings`, and `specialization` narrow the lead list before records are emitted.

```json
{
  "locations": ["90210", "Austin, TX"],
  "maxItems": 40,
  "maxAgentsPerLocation": 30,
  "maxPagesPerLocation": 2,
  "includeProfileDetails": true,
  "hasPhone": true,
  "minReviews": 5,
  "minForSaleListings": 1,
  "specialization": ["luxury"],
  "dryRun": false
}
```

### Output

Each dataset item contains `agentId`, `fullName`, `profileUrl`, `phone`, `officePhone`, `website`, `bio`, `brokerage`, `officeName`, office address fields, license fields, `languages`, `specializations`, `servedAreas`, social URLs, `intentTypes`, rating and review counts, listing and sales statistics, source fields, and `scrapedAt`.

```json
{
  "agentId": "5673566abb954c0100677954",
  "fullName": "ELLIOT ROUSSO",
  "profileUrl": "https://www.realtor.com/realestateagents/5673566abb954c0100677954",
  "phone": "(818) 915-9056",
  "officePhone": "(818) 444-8300",
  "website": "http://www.ElliotRousso.com",
  "bio": "Elliot Rousso is a top-producing Los Angeles real estate agent specializing in residential listings, luxury homes, and seller representation throughout Calabasas, Woodland Hills, Thousand Oaks, the Conejo Valley, and Greater Los Angeles.",
  "brokerage": "Pinnacle Estate Properties, Inc.",
  "officeName": "Pinnacle Estate Properties, I",
  "officeAddress": "24025 Park Sorrento Drive STE 110, Calabasas, CA 91302",
  "officeCity": "Calabasas",
  "officeState": "CA",
  "officePostalCode": "91302",
  "licenseNumber": "01854651",
  "licenseState": "MRCA",
  "languages": "English",
  "specializations": "Celebrity Buyers And Sellers; International Marketing; Luxury Homes Sales; New Construction Homes; Top Listing Agent; First time buyers; Relocation; Divorce; Trust Sale; Probate; Buyer's agent; Seller's agent",
  "servedAreas": "Agoura Hills; Beverly Hills; Calabasas; Encino; Los Angeles; Moorpark; Sherman Oaks; Simi Valley; Tarzana; Thousand Oaks; Van Nuys; Westlake Village; Woodland Hills",
  "socialFacebook": "https://www.facebook.com/elliotsellsLA/",
  "socialInstagram": "https://www.instagram.com/elliotrousso_estates/?hl=en",
  "socialLinkedin": "https://www.linkedin.com/in/elliot-rousso-304bb27/",
  "socialTiktok": null,
  "socialX": "https://twitter.com/ElliotRousso",
  "socialYoutube": "https://www.youtube.com/@ElliotRousso",
  "intentTypes": "BUYER; SELLER",
  "averageRating": 5,
  "reviewsCount": 34,
  "recommendationsCount": 12,
  "activeForSaleListings": 1,
  "activeForSaleMinPrice": 1100000,
  "activeForSaleMaxPrice": 1100000,
  "recentSales12Months": 8,
  "recentSalesMinPrice": 499000,
  "recentSalesMaxPrice": 2080000,
  "lastListingDate": "2026-07-15T16:54:38Z",
  "isRealtor": true,
  "isPaidProfile": true,
  "sourceLocation": "90210",
  "sourceUrl": "https://www.realtor.com/realestateagents/90210/pg-1",
  "scrapedAt": "2026-08-27T14:50:17.740Z"
}
```

### Integrations

Use the Apify dataset API from Python or Node.js, schedule recurring ZIP runs, or send dataset and run webhooks into Make, n8n, Zapier, or a CRM workflow. The actor works with standard Apify JSON, CSV, and Excel dataset exports.

### Related actors

- [Zillow Price Drop Scraper](https://apify.com/schnellscrapers/zillow-price-drop-scraper) — find property price changes to pair with agent territory lists.
- [Airbnb Listing Extractor](https://apify.com/schnellscrapers/airbnb-listing-extractor) — collect nearby rental inventory and host details for market research.

### FAQ

#### How does Realtor.com Agent Leads work?

It reads the structured data embedded in public Realtor.com agent-search and profile pages. It follows the source’s 24-card directory pages, deduplicates profile IDs across locations, and optionally enriches selected profiles with their public contact and production fields.

#### Can I use Realtor.com Agent Leads as an API?

Yes. Start an Apify run with the REST API or an official client, then read the default dataset endpoint returned with the run. The actor’s Output tab and API examples show the dataset URL and available export formats.

#### Can I use Realtor.com Agent Leads in Python or Node.js?

Yes. Use the [Apify API clients](https://docs.apify.com/api/client) or request the default dataset in Python, Node.js, or any HTTP client. A scheduled run can feed a CRM, spreadsheet, or webhook automation.

#### Does it return agent email addresses?

No. The actor returns public phone and website fields and leaves email out because the validated Realtor.com profile payload does not expose a dependable agent email address. This avoids fabricating or guessing contact data.

#### Is it legal to scrape Realtor.com?

You are responsible for ensuring that your collection and use of public data complies with applicable law, privacy and anti-spam requirements, and the source’s current rules. Use the actor for legitimate business workflows and respect requests not to be contacted.

# Actor input Schema

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

Enter one or more US ZIP codes, such as 90210, or city/state values such as Austin, TX. ZIP codes give the tightest, most repeatable agent search. Each location is searched independently and duplicate profiles are returned once.

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

Hard cap on returned agent records across all locations. Excluded agents do not count toward billing. Lower this for a quick lead sample.

## `maxAgentsPerLocation` (type: `integer`):

Per-location scan budget before filters. Use this with maxPagesPerLocation to control how deep the actor searches in a ZIP or city directory.

## `maxPagesPerLocation` (type: `integer`):

Maximum Realtor.com directory pages to fetch for each location. Each page contains up to 24 agent cards; page URLs are followed in order until this limit or the agent scan budget is reached.

## `includeProfileDetails` (type: `boolean`):

Fetch each selected agent profile for direct and office phone numbers, website, bio, license, social links, specialties, served areas, and detailed listing statistics. Turn off for a faster directory-only scan.

## `hasPhone` (type: `boolean`):

Return only profiles with a public direct phone number. Profile enrichment is enabled automatically when this filter is checked.

## `minReviews` (type: `integer`):

Return only agents with at least this many Realtor.com reviews. Leave empty to include agents with no review-count threshold.

## `minForSaleListings` (type: `integer`):

Return only agents with at least this many active for-sale listings in the source profile statistics. Leave empty for no listing-count threshold.

## `specialization` (type: `array`):

Return only agents whose public specialties contain at least one of these case-insensitive phrases, such as luxury, relocation, probate, or first time buyers.

## `dryRun` (type: `boolean`):

Match and log agent records without writing dataset items. Use this to confirm a location or filter before paying per returned agent.

## Actor input object example

```json
{
  "locations": [
    "90210"
  ],
  "maxItems": 100,
  "maxAgentsPerLocation": 100,
  "maxPagesPerLocation": 5,
  "includeProfileDetails": true,
  "hasPhone": false,
  "specialization": [],
  "dryRun": false
}
```

# Actor output Schema

## `records` (type: `string`):

Structured agent records with fullName, phone, brokerage, website, specialties, ratings, listing counts, and profileUrl.

# 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": [
        "90210"
    ],
    "specialization": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("schnellscrapers/realtor-agent-leads").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": ["90210"],
    "specialization": [],
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,schnellscrapers/realtor-agent-leads"
        }
    }
}

```

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/EUYeUk2KdlPKhb7gh/builds/mYtj2mYdcztQO7mfY/openapi.json
