Realtor.com Real Estate Agents Scraper · Apify
Realtor.com Agents Scraper - Emails, Phones & Leads avatar

Realtor.com Agents Scraper - Emails, Phones & Leads

Pricing

from $1.20 / 1,000 agent scrapeds

Go to Apify Store
Realtor.com Agents Scraper - Emails, Phones & Leads

Realtor.com Agents Scraper - Emails, Phones & Leads

Scrape Realtor.com real estate agents by city, state or ZIP. Get emails, phones, brokerages, office addresses, for-sale and sold listing counts and price range. Filter to agents with an email or phone.

Pricing

from $1.20 / 1,000 agent scrapeds

Rating

5.0

(2)

Developer

Automation Lab

Automation Lab

Maintained by Community

Actor stats

3

Bookmarked

123

Total users

12

Monthly active users

a day ago

Last modified

Features

Limited permissionsMulti-tenantServer interface

Share

Realtor.com Agents Scraper

Scrape real estate agent contact data from Realtor.com without an API key or login. Extract agent names, direct phone numbers, email addresses, brokerages, and office addresses across one or more US cities, states, or ZIP codes. Identifies agents actively working listings in your target markets.

What does Realtor.com Agents Scraper do?

🏡 Realtor.com Agents Scraper extracts agent contact data from one of the most active real estate marketplaces in the US. By scanning the listing activity for a location, it identifies all agents who currently have or recently had active listings — the most productive agents in any market.

Enter one location with the backward-compatible location field, or add several markets with locations. Choose to search across active for-sale listings, recently sold transactions, or both. The scraper handles pagination automatically and deduplicates by agent ID across the entire run so every result is unique.

Each output record includes the agent's name, primary phone, email, brokerage, office address, for-sale and sold listing counts and the price range of their listings — a direct signal of who is active in the market and at what price point. Turn on onlyWithEmail or onlyWithPhone to pay only for agents you can reach.

Who is it for?

📋 CRM vendors and marketing automation platforms

  • Prospect real estate agents as potential customers for Follow Up Boss, kvCORE, LionDesk, and similar platforms
  • Build targeted agent lists segmented by market, brokerage, or activity level
  • Enrich existing agent contact databases with fresh phones and emails

🏦 Mortgage lenders and title companies

  • Identify top-producing agents in your target market for referral partnership outreach
  • Agents with high listing counts are the highest-priority referral targets
  • Build purchase loan pipeline by reaching listing agents with active inventory

🔄 Brokerage recruiters

  • Source agent candidates across competing brokerages in your market
  • Identify active agents by listing count for recruiting campaigns
  • Target sellers agents or buyer agents specifically via the listingStatus filter

💼 Real estate technology companies

  • Prospect agents for showing platforms, e-signature tools, transaction management software
  • Build outbound sales lists segmented by market size and agent activity
  • Research market coverage and agent density before launching in a new city

📸 Real estate service vendors

  • Find agents who have active listings and need photography, virtual staging, or video services
  • Target listing agents in specific price tiers or ZIP codes
  • Build local outreach lists for marketing services

📊 Researchers and data teams

  • Analyze agent market concentration and brokerage dominance by city
  • Track active agent counts and brokerage splits across markets
  • Build datasets for real estate industry research and competitive intelligence

Why use Realtor.com Agents Scraper?

Collecting agent contact information manually takes hours per market. This actor automates the entire process:

  • No login or API key required — works from public Realtor.com listing data
  • Multi-market collection — search several cities or ZIP codes in one run with one total result cap
  • Structured output — clean JSON with 15+ fields per agent, ready for import into any CRM or database
  • Active agents only — by scanning listing activity, you get agents who are currently doing deals, not stale directory entries
  • Listing-count signal — know how many deals each agent has been involved in at a glance
  • Reliable at scale — uses US residential proxy rotation, the same infrastructure powering our realtor-scraper (active listings scraper) at 99%+ success rate

What data can you extract?

Each agent record includes:

FieldDescription
agentIdNRDS ID or MLS identifier for the agent
nrdsIdNational Association of Realtors ID (null when not published)
mlsIdMLS agent identifier
nameFull name
firstName / lastNameFirst and last word of the name, for mail merge
profileUrlRealtor.com profile link built from the name and NRDS ID; null when the agent has no NRDS ID. It is constructed, not read from the site, so open one to confirm it resolves before relying on it
websiteUrlAgent's personal or brokerage website (when available)
photoUrlProfile photo URL (when available)
sloganAgent slogan (when published)
brokerageName of the brokerage office
brokerParent broker name (when published)
brokerageEmailBrokerage email address (when available)
phonesAll phone numbers with type labels (Mobile, Office, etc.)
primaryPhoneBest direct phone number (prefers mobile)
emailDirect email address
cityAgent's city
stateState code (e.g. TX)
postalCodeZIP code
officeAddressFull office address
listingCountNumber of listings the agent appeared in during this run — activity signal
forSaleListings / soldListings / forRentListingsThe same activity split by listing type
minListPrice / maxListPriceLowest and highest list price among those listings
latestListDate / latestSoldDateMost recent listing date and most recent sale date among those listings
agentRoleRole on the listing where the agent was first found, such as seller or co_seller
locationFirst requested location where this agent was found (kept for backward compatibility)
matchedLocationsAll requested markets where the agent was found; included on multi-location runs
scrapedAtISO 8601 timestamp of extraction

Activity counts cover the listings this run read, so they are a minimum, and each listing counts once per agent. In both mode, once your agents are collected the scraper also reads the newest sold listings for those agents, at no extra charge: up to 4,000 per location, and fewer on small runs (about 1,200 for one agent). A count of 0 means that listing type was read to the end in every location you searched and the agent has none. null means none were seen but not every listing was read, as in big markets, or that the type was not searched, such as forRentListings in both mode.

Realtor.com's rating, review and license data is not included: this scraper reads public listing data, not profile pages.

How much does it cost to scrape Realtor.com agents?

Pricing uses Apify's pay-per-event model — you only pay for what you extract.

Run start fee: $0.005 (one-time per run, all plans). Charged with the first agent delivered, so a run that finds nothing costs nothing.

Per-agent price by Apify plan:

PlanPrice per agent
FREE$0.0015
BRONZE$0.0015
SILVER$0.00135
GOLD$0.0012
PLATINUM$0.0012
DIAMOND$0.0012

Paid plans from GOLD up pay the lowest per-agent price.

Example costs (BRONZE plan):

  • 100 agents ≈ $0.155 (start + 100 × $0.0015)
  • 500 agents ≈ $0.755
  • 1,000 agents ≈ $1.505

Example costs (DIAMOND plan):

  • 100 agents ≈ $0.125
  • 500 agents ≈ $0.605
  • 1,000 agents ≈ $1.205

Compared to purchasing agent contact lists at $0.50–$5 per record from data brokers, this delivers equivalent contact data at a fraction of the cost.

Tip: Set maxResults to match exactly what you need. Unused capacity is not charged, and neither are agents removed by onlyWithEmail or onlyWithPhone.

How to scrape Realtor.com agents

  1. Go to the actor's page on Apify Store and click Try for free.
  2. Enter one Location, or add a list under Multiple locations (for example Austin, TX and Round Rock, TX).
  3. Choose a Listing type — both (default) searches the widest set of active agents.
  4. Set Max results (default 100).
  5. Click Save & Run.
  6. Download results as JSON, CSV, or Excel from the Dataset tab.

For recurring data collection, use Scheduled runs to automate daily or weekly agent list updates.

Input parameters

ParameterTypeDefaultDescription
locationstring(optional)One city + state (New York, NY), city (Austin), or ZIP (10001); existing Tasks remain compatible
locationsstring[](optional)Several cities, states, or ZIP codes to search in one run
listingStatusstringbothWhich listing types to scan: both, for_sale, sold, for_rent
maxResultsinteger100Total max unique agents across all locations (1–5,000)
onlyWithEmailbooleanfalseKeep only agents with a direct email address; others are not charged
onlyWithPhonebooleanfalseKeep only agents with at least one phone number; others are not charged
maxRequestRetriesinteger3Retries per failed request, each on a new IP address

Provide at least one non-empty value through location or locations. Values are trimmed and deduplicated case-insensitively. For multi-location runs, the total maxResults allowance is shared evenly across the normalized locations so one large market does not consume the entire run, and any quota a small market cannot use passes to the next location. Agents found in several markets are emitted once with every match in matchedLocations.

Location format examples:

  • New York, NY — New York City agents
  • Los Angeles, CA — LA agents
  • 90210 — Beverly Hills by ZIP
  • Austin — Austin agents (no state required for major cities)

Listing type guide:

  • both — collects agents from for-sale listings, then sold listings, and fills in sold activity for all of them
  • for_sale — only agents with active for-sale listings (currently inventory-holding agents)
  • sold — only agents who recently closed a sale
  • for_rent — rental market agents

Output examples

{
"agentId": "785038427",
"nrdsId": "785038427",
"mlsId": "A-AUTX-541793",
"name": "Clark Gray",
"firstName": "Clark",
"lastName": "Gray",
"profileUrl": "https://www.realtor.com/realestateagents/Clark-Gray_785038427",
"websiteUrl": null,
"photoUrl": "https://ap.rdcpix.com/abc123photo.jpg",
"brokerage": "Mercer Street Group, LLC",
"brokerageEmail": "amy@mercerstreetgroup.com",
"phones": [
{ "number": "5125549618", "type": "Mobile" }
],
"primaryPhone": "5125549618",
"email": "clark@clarkgray.com",
"city": "Austin",
"state": "TX",
"postalCode": "78749",
"officeAddress": "4301 W. William Cannon Drive, #K-200, Austin, TX, 78749",
"listingCount": 3,
"forSaleListings": 2,
"soldListings": 1,
"forRentListings": 0,
"minListPrice": 425000,
"maxListPrice": 899000,
"latestListDate": "2025-08-01T18:04:11Z",
"latestSoldDate": "2025-07-22",
"agentRole": "seller",
"location": "Austin, TX",
"scrapedAt": "2025-08-15T14:22:10.000Z"
}

Tips for best results

Use listingStatus: "both" for maximum coverage Searching both for-sale and sold listings surfaces the most unique agents for a market. A listing-only search shows who has active inventory; a sold-only search captures agents who recently closed deals. both starts with for-sale listings and adds agents from sold listings when the for-sale listings run out. Sold activity is filled in for every agent either way.

listingCount signals productivity Agents with listingCount >= 3 appeared in three or more listings during your search — a strong signal of market activity. Use soldListings to find closers and minListPrice/maxListPrice to find agents in your price tier.

Pay only for agents you can contact Set onlyWithEmail: true for email campaigns or onlyWithPhone: true for call lists. Agents left out are not charged.

Match location to market size

  • Large metros (New York, LA, Houston): set maxResults to 200–1000 to capture top agents
  • Mid-size cities (Austin, Denver, Miami): 100–300 agents covers most of the market
  • ZIP code searches: 20–100 agents is typically all that's available for a single ZIP

Schedule for freshness Agent data changes over time — phone numbers, brokerages, and email addresses update. Schedule a weekly run on your target markets to keep your CRM data current.

Combine with realtor-scraper for full market intelligence Pair this actor with our realtor-scraper (property listings) to build a complete picture: who's selling what at what price in any market.

Supported locations

Any US market with listings on Realtor.com. This includes all 50 states and US territories. Best coverage in major metro areas; rural areas may return fewer agents.

Top markets with extensive agent data: New York, NY · Los Angeles, CA · Chicago, IL · Houston, TX · Phoenix, AZ · Dallas, TX · Miami, FL · Atlanta, GA · Seattle, WA · Denver, CO

Integrations

Export results directly to your preferred tools:

  • Google Sheets — Use the Apify integration to push dataset items into a spreadsheet on each run
  • Zapier / Make — Trigger downstream CRM workflows whenever new agents are scraped
  • HubSpot / Salesforce — Pipe agent contact data into your CRM via Apify's native integrations
  • Webhooks — POST results to your own endpoint in real time via Actor run webhooks
  • CSV / Excel — Download from the Dataset tab in any format for manual import

API usage

Run this actor programmatically and retrieve results using the Apify API.

Node.js (ApifyClient)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('automation-lab/realtor-agents-scraper').call({
locations: ['Austin, TX', 'Round Rock, TX'],
maxResults: 50,
listingStatus: 'both',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python (ApifyClient)

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("automation-lab/realtor-agents-scraper").call(run_input={
"location": "Austin, TX",
"maxResults": 50,
"listingStatus": "both",
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~realtor-agents-scraper/runs" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{"location":"Austin, TX","maxResults":50}'

Then fetch results:

curl "https://api.apify.com/v2/acts/automation-lab~realtor-agents-scraper/runs/last/dataset/items" \
-H "Authorization: Bearer YOUR_API_TOKEN"

Full API documentation: Apify API Reference

Use with AI agents via MCP

Connect your AI client to the actor-scoped Apify MCP endpoint:

https://mcp.apify.com/?tools=automation-lab/realtor-agents-scraper

Claude Code

$claude mcp add --transport http realtor-agents-scraper "https://mcp.apify.com/?tools=automation-lab/realtor-agents-scraper"

Claude Desktop, Cursor, and VS Code

Add this server to the MCP JSON configuration in Claude Desktop, Cursor, or VS Code:

{
"mcpServers": {
"realtor-agents-scraper": {
"url": "https://mcp.apify.com/?tools=automation-lab/realtor-agents-scraper"
}
}
}

Example prompts you can try with MCP:

  • "Use Realtor.com Agents Scraper to find up to 50 active agents across Austin and Round Rock, Texas."
  • "Collect sold-listing agents in ZIP codes 90210 and 90024, then summarize the brokerages represented."
  • "Find agents in Denver and Boulder and return only records with a published phone or email."

The actor returns structured JSON suitable for property-search agents, CRM enrichment, RAG pipelines, and market-monitoring workflows. For multi-source coverage, combine it with Zillow Scraper, Redfin Scraper, or Realtor.com Scraper.

Legality of scraping Realtor.com

Web scraping publicly available data is generally legal under US law when:

  • The data is publicly accessible (no login required) — ✅ agent contact data on listings is public
  • You are not circumventing authentication systems — ✅ this actor accesses public listing data only
  • You comply with the site's Terms of Service for your use case

Realtor.com's Terms of Service restrict automated access for commercial data redistribution. Users of this actor are responsible for ensuring their use case complies with Realtor.com's ToS and applicable laws, including the CCPA for California residents' data and the CAN-SPAM Act for commercial email use.

This actor is intended for legitimate B2B lead generation, research, and data enrichment purposes. Always review the Terms of Service of the target website and the laws applicable to your jurisdiction before scraping.

FAQ

Why do some agents have null for email or phone? Not all agents publish their contact information on every listing. The actor extracts whatever is available in the listing data. Agents with more listings generally have more complete contact data.

Why does the actor return fewer results than my maxResults setting? Some markets have fewer active agents than the requested maxResults. Small ZIP codes and rural areas typically have 20–100 unique agents. On a multi-location run, spare quota from a small market passes to the next one. The run's status message always says how many agents were delivered against maxResults and why it stopped.

Can I scrape multiple locations at once? Yes. Set locations to a list such as ["Austin, TX", "Round Rock, TX"]. maxResults remains one total cap, agents are deduplicated across markets, and multi-location records include matchedLocations. Existing Tasks using a single location require no changes.

What is the listingCount field? listingCount counts how many times an agent appeared across the listings searched during your run. A higher count means the agent is more active in that market. This is the most reliable activity signal available from public listing data.

How fresh is the data? The actor fetches live listing data from Realtor.com on each run. Data is as current as Realtor.com's active listing database.

The actor returned the same agent multiple times — is that a bug? No — the actor deduplicates by agent NRDS ID. Each result is a unique agent. If you see what looks like duplicates, check the agentId field — they are different agents with similar names.

Build a production real-estate data workflow

Use this actor as one source in a repeatable property-data pipeline: scrape listings from the source site, export structured JSON/CSV/Excel, schedule refreshes, and send results to your dashboard, CRM, warehouse, or AI/LLM workflow.

Pair Realtor.com agent profiles with Realtor.com property listings when your workflow needs both broker/agent lead enrichment and market supply data. Use agent data for CRM enrichment or outreach research, then combine it with listing exports for market coverage.

For broader coverage, combine it with related Automation Lab actors:

Error reporting

Failed operations send sanitized diagnostic input, exceptions and Actor, build and run IDs to our private GlitchTip service so we can repair them. Secret fields and URL queries are removed, and reports are retained for 30 days.

Server API: get one location's agents over HTTP

Realtor.com Agents Scraper is also a Server Actor. Besides normal runs, it answers short HTTP requests directly, without starting a run for each lookup. Copy the server URL from the Actor's Server tab (do not build it from the Actor name) and authenticate with your Apify token. Use normal Actor runs for several locations, more than 50 agents, or a full read of a market's sold activity.

curl -sS "$SERVER_URL/agents?location=Austin%2C%20TX&maxResults=20" -H "Authorization: Bearer $APIFY_TOKEN"
curl -sS "$SERVER_URL/agents?location=78701&listingStatus=for_sale&maxResults=10&onlyWithEmail=true" -H "Authorization: Bearer $APIFY_TOKEN"
Method and pathInputOutput and charge
GET /Noneready: true, the routes and limits; no scraping or charge
GET /agentsQuery location: one US city and state, state or ZIP code (2–100 characters), such as Austin, TX or 78701; optional listingStatus (both, for_sale, sold, for_rent; default both), maxResults 1–50 (default 20), onlyWithEmail and onlyWithPhone (true or false; default false){ok,count,results} with the same agent records as a normal run's dataset items (without matchedLocations); one Agent scraped event (agent-scraped) per returned agent; no start fee

Each request reads at most 3 listing pages of 200 listings, newest first, plus in both mode one sold page that fills the found agents' sold activity; a listing count is null when not every listing of that type was read. Agents left out by onlyWithEmail or onlyWithPhone are not charged. An unknown location, or a location with no matching agents, returns an error and is free. Each request has a 60-second deadline and a 512 KiB response cap, and one server works on at most eight requests at once. Nothing is cached. Errors use { "ok": false, "error": { "code": "...", "message": "...", "retryable": false } }: 400 INVALID_LOCATION, INVALID_LISTING_STATUS, INVALID_LIMIT or INVALID_INPUT; 402 spending limit; 404 LOCATION_NOT_FOUND, NO_RESULTS or unknown route; 405 wrong method; 413 RESPONSE_TOO_LARGE; 502 BLOCKED, UPSTREAM_ERROR or charging failure; 503 server busy or stopping; 504 TIMEOUT. Failed requests are free. Retry only when retryable is true. The Server tab shows the full OpenAPI description.