Realtor.com Agents by Zip Code Scraper With Lead Generation avatar

Realtor.com Agents by Zip Code Scraper With Lead Generation

Pricing

from $5.99 / 1,000 results

Go to Apify Store
Realtor.com Agents by Zip Code Scraper With Lead Generation

Realtor.com Agents by Zip Code Scraper With Lead Generation

Realtor.com Agents by Zip Code Scraper — Find real estate agents by ZIP code and extract names, agencies, locations, phone numbers, emails, specialties, ratings, and profile URLs. Build targeted agent lead lists for real estate prospecting, market research, and outreach.

Pricing

from $5.99 / 1,000 results

Rating

0.0

(0)

Developer

Scrapier

Scrapier

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

2 days ago

Last modified

Share

Realtor.com Agent Scraper by Zip Code — Leads With Email Enrichment

Realtor.com Agents by Zip Code Scraper With Lead Generation pulls real estate agent records from Realtor.com for any list of ZIP codes and returns a structured lead list — name, ratings, listing and sales activity, services offered, and a computed activity score for every agent. Every response is plain JSON, ready to load into a CRM, pass to an LLM, or feed a monitoring pipeline. On top of the agent's Realtor.com profile, it also visits the agent's own external website and pulls a real contact email and social links when one exists — a genuinely different data surface than Realtor.com itself exposes. Point it at your target markets and get a scored, enrichable lead list back in one run.

🏠 What is Realtor.com Agents by Zip Code Scraper With Lead Generation?

It queries Realtor.com's agent-search results for one or more ZIP codes and returns every agent Realtor.com surfaces there, enriched with lead-quality signals and off-platform contact details. No Realtor.com account or login is required — the Actor calls the same public agent-search endpoint Realtor.com's own site uses, and enrichment simply fetches each agent's own website as any visitor would.

What sets it apart from a plain agent-list scraper: it keeps the rating, recommendation, paid/featured, sales-volume and service-offering fields that Realtor.com's list page already returns per agent, folds them into one computed agent_activity_score per lead, and then reaches off-platform to the agent's own site for an email address and social links — none of which live on the Realtor.com profile page itself.

Key capabilities:

  • 📍 Search any number of ZIP codes in a single run (zipCodes)
  • 🎯 Cap and rank agents per ZIP with a computed activity score (maxItemsPerZipcode, agent_activity_score)
  • 🔀 Control result order with Realtor.com's own five sort modes (sortOrder)
  • 🏘️ Filter out low-activity agents before they ever hit the dataset (minListingCount, minRating, paidOnly)
  • 🔍 Enrich every qualifying lead with an email and social links pulled from the agent's own website (enrichWebsiteContacts)
  • 🔒 Automatic proxy fallback (none → datacenter → residential) when Realtor.com or an agent's site blocks a request

📊 What data can you get with Realtor.com Agents by Zip Code Scraper With Lead Generation?

Every run returns one record per agent per ZIP code, combining Realtor.com profile data, list-page lead signals, and off-platform enrichment.

Result TypeExtracted FieldsPrimary Use Case
Agent profileagent_name, website, agent_photo, office_phone, mobile_phones, office_company_name, company_website, areas_serviced, is_realtorBasic identification and outreach
Lead-quality & activity signalsagent_activity_score, average_rating, recommendations_count, review_count, is_paid, sorting_weight, listing_count, sold_count, price_range_min, price_range_max, buyer_agent, seller_agent, buyer_services_offered, seller_services_offeredRanking and qualifying leads before outreach
Off-platform contact enrichmentagent_website, enriched_email, enriched_social_links, enrichment_source_url, enrichment_statusFinding a real contact channel beyond the Realtor.com profile

🎯 Lead-quality and activity signals

This is the part a plain agent-directory scrape leaves on the table. Realtor.com's own agent-search API already returns ratings_reviews, is_paid, sorting_weight, services and a listing_stats.combined_annual sales range for every agent on the list page — this Actor keeps all of it instead of discarding it after using it only to render the search page, and folds it into one agent_activity_score per lead:

{
"agent_activity_score": 187.5,
"average_rating": 4.9,
"recommendations_count": 42,
"review_count": 58,
"is_paid": true,
"sorting_weight": 913,
"listing_count": 12,
"sold_count": 34,
"price_range_min": 4500000,
"price_range_max": 18200000,
"buyer_agent": true,
"seller_agent": true,
"buyer_services_offered": "Open houses, Comparative market analysis",
"seller_services_offered": "Home staging consultation, Comparative market analysis"
}

agent_activity_score is a weighted composite (active listings × 2, sold count × 3, review count × 1, recommendations × 1.5, average rating × 10, plus 5 for paid/featured status), rounded to one decimal. It is a comparative ranking across the agents in your own result set, not a normalized 0–100 score.

📧 Off-platform contact enrichment

When enrichWebsiteContacts is on, the Actor fetches the agent's own branding website (or their office/company site as a fallback) and runs an email and social-link extraction pass on the raw HTML — never fabricating a value. A found email is only kept if it belongs to a well-known personal provider (Gmail, Yahoo, Outlook, iCloud, etc.) or matches the fetched site's own domain, which filters out tracking-script and CMS-vendor addresses picked up as false positives. enrichment_status always tells you honestly what happened: found, no_contacts_found, no_website, fetch_failed, fetch_failed_http_{code}, or disabled.

🛠️ Why not build this yourself?

Realtor.com does not publish a general-purpose public API for third-party agent search. The agent-search and agent-detail data this Actor returns come from Realtor.com's own internal GraphQL endpoint (frontdoor/graphql), which is undocumented, unversioned, and can change its query shape at any time. Building and maintaining this yourself means reverse-engineering that query surface, handling Realtor.com's block responses (403/429/503, CAPTCHA pages), rotating proxies when blocked, paginating 24 agents at a time, merging list-page and detail-page responses per agent, and separately crawling each agent's own website for contact details — then keeping all of that working as Realtor.com's frontend changes. This Actor already does all of it and hands back structured JSON.

🔎 How to scrape Realtor.com agents by zip code

  1. Open Realtor.com Agents by Zip Code Scraper With Lead Generation on the Apify Console.
  2. Enter the ZIP codes you want to pull leads from in zipCodes (e.g. ["07101", "00501"]) — this is the only required field.
  3. Set your query controls: maxItemsPerZipcode for how many agents to pull per ZIP, sortOrder for which agents Realtor.com returns first, and the lead-quality filters (minListingCount, minRating, paidOnly) to narrow the result set.
  4. Start the run.
  5. Download results as JSON or CSV from the Actor's dataset, or stream them via the Apify API.

Example request via apify_client:

run_input = {
"zipCodes": ["07101", "00501"],
"maxItemsPerZipcode": 25,
"sortOrder": "RATINGS_REVIEWS",
"minRating": 4,
"enrichWebsiteContacts": True,
}
run = client.actor("YOUR_USERNAME/realtor-com-agents-by-zip-code-scraper-with-lead-generation").call(run_input=run_input)

🗂️ How to run multiple zip codes in one job

zipCodes accepts an array, so a single run can cover any number of markets — each ZIP is processed in turn, and within each ZIP agents are fetched and enriched in concurrent batches of 5 (with a shared connection pool capped at 30). There is no separate "batch" input; add every ZIP you need to the one zipCodes list.

⬇️ Input

Only zipCodes is required. Everything else has a working default.

ParameterRequiredTypeDescriptionExample Value
zipCodesYesarray (stringList)Zip codes to pull agent leads from (e.g. ["07101", "00501"]). Add as many as you need for a multi-market lead list.["07101", "00501"]
maxItemsPerZipcodeNointeger (1–10000, default 10)How many agents to pull and score per zip code, before the lead-quality filters below are applied. Final lead count per zip can be lower once filters run.25
sortOrderNostring, enum, default "RELEVANT_AGENTS"Order in which realtor.com returns agents for each zip code. Options: RELEVANT_AGENTS (Most Relevant Agents), RATINGS_REVIEWS (Highest Rated), MOST_SALES (Most Sales), MOST_RECENT_ACTIVITY (Most Recently Active), TESTIMONIALS_RECOMMENDATIONS (Most Testimonials & Recommendations)."RATINGS_REVIEWS"
maxRetriesNointeger (1–10, default 3)Max retry attempts per request (agent list page or agent detail) before giving up on that request. Also governs proxy-fallback retries.3
minListingCountNointeger (min 0, default 0)Drop agents with fewer than this many active for-sale listings. 0 = no minimum.5
minRatingNonumber (0–5, default 0)Drop agents whose average_rating is below this value. Agents with no rating on file are dropped once this is above 0. 0 = no minimum.4
paidOnlyNoboolean, default falseKeep only agents flagged as paid/featured (is_paid) on realtor.com — often the more active, higher-budget leads.true
enrichWebsiteContactsNoboolean, default trueWhen on, visits the agent's own external website and extracts an email + social links (Facebook/Instagram/LinkedIn/X/YouTube) if present. Always null when the site has none — never fabricated.true
websiteEnrichmentTimeoutSecNointeger (3–30, default 10)How long to wait for the agent's website to respond before marking enrichment as failed for that lead and moving on.10
proxyConfigurationNoobject (proxy editor)Starts with no proxy by default. If realtor.com (or an agent's own website) blocks requests, automatically falls back to a datacenter proxy, then a residential proxy with retries.{"useApifyProxy": false}

Example JSON input:

{
"zipCodes": ["07101", "00501"],
"maxItemsPerZipcode": 10,
"sortOrder": "RELEVANT_AGENTS",
"maxRetries": 3,
"minListingCount": 0,
"minRating": 0,
"paidOnly": false,
"enrichWebsiteContacts": true,
"websiteEnrichmentTimeoutSec": 10,
"proxyConfiguration": { "useApifyProxy": false }
}

⚠️ Common pitfall: setting minRating above 0 drops every agent with no rating on file, not just low-rated ones — the filter treats a missing rating as failing the threshold. zipCodes also must contain valid US ZIP codes; Realtor.com's agent search only covers the US market, so non-US postal codes return zero agents.

⬆️ Output

Results are pushed to the Apify dataset as one flat, typed JSON object per agent per ZIP code, with a consistent schema across every run. Export as JSON, CSV, Excel, or any other format the Apify dataset supports directly from the Console or API.

The default dataset view shows 30 of these columns; the actual row also carries enrichment_source_url, which is not in the view table but is present in every exported record.

📋 Scraped results

[
{
"zip_code": "07101",
"agent_name": "Jordan Ellis, agent",
"website": "https://www.realtor.com/realestateagents/5f2a1c9e8b3d4a0012345678",
"email": null,
"listing_count": 12,
"sold_count": 34,
"office_phone": "973-555-0142",
"mobile_phones": "973-555-0199",
"areas_serviced": "Newark, Irvington, East Orange",
"office_company_name": "Ellis Realty Group",
"company_website": "https://www.ellisrealtygroup.com",
"review_count": 58,
"agent_photo": "https://ap.rdcpix.com/agents/5f2a1c9e8b3d4a0012345678.jpg",
"average_rating": 4.9,
"recommendations_count": 42,
"is_paid": true,
"is_realtor": true,
"sorting_weight": 913,
"buyer_agent": true,
"seller_agent": true,
"buyer_services_offered": "Open houses, Comparative market analysis",
"seller_services_offered": "Home staging consultation, Comparative market analysis",
"price_range_min": 4500000,
"price_range_max": 18200000,
"agent_activity_score": 187.5,
"agent_website": "https://www.jordanellishomes.com",
"enriched_email": "jordan@jordanellishomes.com",
"enriched_social_links": "facebook: https://facebook.com/jordanellishomes, instagram: https://instagram.com/jordanellishomes",
"enrichment_source_url": "https://www.jordanellishomes.com",
"enrichment_status": "found",
"scrapedAt": "2026-07-30T14:02:11Z"
},
{
"zip_code": "07101",
"agent_name": "Priya Nandakumar, non-realtor",
"website": "https://www.realtor.com/realestateagents/7a1b3c9d8e2f4a0098765432",
"email": null,
"listing_count": 4,
"sold_count": 9,
"office_phone": "973-555-0177",
"mobile_phones": null,
"areas_serviced": "Newark",
"office_company_name": "Nandakumar & Associates",
"company_website": "https://www.nandakumarassociates.com",
"review_count": 6,
"agent_photo": "https://ap.rdcpix.com/agents/7a1b3c9d8e2f4a0098765432.jpg",
"average_rating": 4.2,
"recommendations_count": 3,
"is_paid": false,
"is_realtor": false,
"sorting_weight": 210,
"buyer_agent": true,
"seller_agent": false,
"buyer_services_offered": "Relocation",
"seller_services_offered": null,
"price_range_min": null,
"price_range_max": null,
"agent_activity_score": 55.0,
"agent_website": null,
"enriched_email": null,
"enriched_social_links": null,
"enrichment_source_url": "https://www.nandakumarassociates.com",
"enrichment_status": "no_contacts_found",
"scrapedAt": "2026-07-30T14:02:47Z"
},
{
"zip_code": "00501",
"agent_name": "Marcus Webb, agent",
"website": "https://www.realtor.com/realestateagents/9c4d2e1f0a3b4a0011223344",
"email": null,
"listing_count": 0,
"sold_count": 2,
"office_phone": null,
"mobile_phones": "631-555-0110",
"areas_serviced": null,
"office_company_name": "Webb Homes",
"company_website": null,
"review_count": 0,
"agent_photo": "https://ap.rdcpix.com/agents/9c4d2e1f0a3b4a0011223344.jpg",
"average_rating": null,
"recommendations_count": null,
"is_paid": false,
"is_realtor": true,
"sorting_weight": 40,
"buyer_agent": null,
"seller_agent": null,
"buyer_services_offered": null,
"seller_services_offered": null,
"price_range_min": null,
"price_range_max": null,
"agent_activity_score": 6.0,
"agent_website": null,
"enriched_email": null,
"enriched_social_links": null,
"enrichment_source_url": null,
"enrichment_status": "no_website",
"scrapedAt": "2026-07-30T14:03:05Z"
}
]

💼 How can I use the data extracted with Realtor.com Agents by Zip Code Scraper With Lead Generation?

  • 🏢 Real estate brokerages and team leads: Rank recruiting or partnership targets by agent_activity_score, listing_count and sold_count per ZIP code, then reach out through enriched_email or the phone fields already on record.
  • 📣 Marketing and lead-gen agencies: Build ZIP-targeted prospect lists filtered with minRating and paidOnly, and use enriched_social_links to plan multi-channel outreach beyond a phone call.
  • 🤖 AI engineers and LLM developers: Feed the structured JSON straight into an agent or RAG pipeline as grounding context — a query in, a scored agent list out, no HTML parsing required.
  • 📊 Market researchers: Compare average_rating, sold_count and price-range fields (price_range_min / price_range_max) across ZIP codes to track agent density and market activity by region.

📈 How do you monitor agent activity and leads over time?

Agent activity on Realtor.com changes continuously — new agents get listed, sold counts climb, ratings shift, and paid/featured status turns on and off. Running this Actor on the same ZIP codes on a schedule turns a one-off lead list into a monitoring feed: each run captures a fresh snapshot, and comparing it to the previous run surfaces exactly what changed.

The fields worth diffing between runs are agent_activity_score (overall momentum), is_paid (an agent starting or stopping ad spend), listing_count and sold_count (new inventory or closed deals), and enrichment_status (an agent who previously had no findable website now returning found). A typical workflow: schedule a run across your target ZIP codes, store each run's dataset, join on agent_name and zip_code between runs, and alert when agent_activity_score jumps or a previously no_website agent resolves to a real enriched_email.

Set this up with an Apify Schedule on the Actor to trigger runs automatically, and pull each run's dataset via the Apify API for the comparison step — there is no built-in diffing inside the Actor itself.

🔌 Integrate Realtor.com Agents by Zip Code Scraper With Lead Generation and automate your workflow

Realtor.com Agents by Zip Code Scraper With Lead Generation works with any language or tool that can send an HTTP request, through the Apify API.

🐍 REST API with Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("YOUR_USERNAME/realtor-com-agents-by-zip-code-scraper-with-lead-generation").call(
run_input={
"zipCodes": ["07101"],
"maxItemsPerZipcode": 25,
"minRating": 4,
}
)
for lead in client.dataset(run["defaultDatasetId"]).iterate_items():
print(lead["agent_name"], lead["agent_activity_score"], lead["enriched_email"])

⏰ Scheduled monitoring and delivery

Use an Apify Schedule to re-run the same ZIP-code input on a recurring cadence, and an Apify webhook on the ACTOR.RUN.SUCCEEDED event to push each run's dataset to your own endpoint or storage as soon as it finishes.

Yes — scraping publicly accessible data that any visitor can view without logging in is generally lawful in the US, and this Actor returns only what Realtor.com already displays on its public agent-search pages, plus what an agent has published on their own public website. Because the output includes personal identifiers of real individuals (names, phone numbers, photos, and enriched emails), it counts as personal data, so GDPR and CCPA principles around lawful basis, purpose limitation, and data-subject rights apply if you process or store it. If you use enriched_email or phone fields for outreach, US anti-spam and telemarketing rules (CAN-SPAM, TCPA) govern how you may contact those individuals, not this Actor. Scraping for internal research or monitoring carries a different risk profile than bulk storage for resale. Consult your legal team for commercial use cases involving bulk data storage or marketing outreach.

❓ Frequently asked questions

Does this Actor work outside the United States?

No — it queries Realtor.com's own agent-search API by ZIP code, and Realtor.com covers the US residential real estate market. zipCodes should contain valid US ZIP codes; other postal codes will return zero agents.

What does the sortOrder parameter control?

It sets the order Realtor.com returns agents in for each ZIP code, with five options: RELEVANT_AGENTS (default), RATINGS_REVIEWS, MOST_SALES, MOST_RECENT_ACTIVITY, and TESTIMONIALS_RECOMMENDATIONS. It changes ranking, not which agents are eligible to appear.

How does this Actor handle Realtor.com's anti-bot measures?

It starts with a direct connection and automatically falls back to a datacenter proxy, then a residential proxy (in sticky mode, so it stays on residential once used), whenever it sees a block signal — HTTP 403/429/503, a CAPTCHA/blocked message, or a dropped connection. Each request retries up to maxRetries times (default 3) with exponential backoff before giving up.

Does this Actor extract off-platform contact details, not just the Realtor.com profile?

Yes — when enrichWebsiteContacts is on, it fetches the agent's own website (or their office/company site as a fallback) and returns enriched_email and enriched_social_links in the same record, sourced from enrichment_source_url. enrichment_status tells you whether it was found, the site had no contacts, no website existed, the fetch failed, or enrichment was disabled.

How many results does this Actor return per zip code?

Up to maxItemsPerZipcode (default 10, maximum 10000) agents per ZIP, before the lead-quality filters (minListingCount, minRating, paidOnly) are applied — the final count per ZIP can be lower once those run. Realtor.com paginates its own agent-search results 24 at a time internally, and a ZIP code can have fewer agents on file than your requested maximum.

How do I use this Actor to monitor agent leads in a zip code over time?

Schedule a run across the same ZIP codes on a recurring cadence, extract agent_activity_score, is_paid, listing_count, sold_count and enrichment_status from each run, and compare them to the previous run's dataset to catch newly active, newly paid, or newly enrichable agents. See "How do you monitor agent activity and leads over time?" above for the full workflow.

Does this Actor work with Claude, ChatGPT, and AI agent frameworks?

It's callable as an HTTP endpoint through the Apify API by any agent framework that can make a request — an agent can trigger a run, poll or wait for the result, and pass the structured JSON lead list to the model as grounding context.

Can I use this Actor without managing proxies or Realtor.com credentials?

Yes. No Realtor.com login is required, and proxy handling is automatic — the Actor starts direct and escalates through Apify's datacenter and residential proxies on its own when blocked. You only need an Apify account to run it; supplying your own proxyConfiguration is optional.

Can I email the leads this Actor finds directly?

That's on you to do compliantly — this Actor only extracts publicly available contact details and never fabricates an email or phone number. Whether you can email or call a given lead, and under what conditions, is governed by CAN-SPAM, TCPA, and any applicable state law, not by this Actor.

💬 Your feedback

Found a bug or missing a field? Let the Scrapier team know through the Actor's Issues tab on Apify, or via the support link on the Actor's Apify Store page. Feedback shapes what gets fixed and added next.