Realtor.com Agents By Zip Code Scraper
Pricing
from $4.99 / 1,000 results
Realtor.com Agents By Zip Code Scraper
Realtor.com Agents By Zip Code Scraper finds public real estate agent profiles by ZIP code, extracting names, brokerages, locations, specialties, ratings, listings, contact details, and profile URLs for targeted lead generation and market research.
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
API Empire
Maintained by CommunityActor stats
1
Bookmarked
24
Total users
6
Monthly active users
2 days ago
Last modified
Categories
Share
Realtor.com Agent Scraper — Extract Agents, Brokerages & Sales Data as JSON
Realtor.com Agents by Zip Code Scraper pulls real estate agent directory data — ratings, sales activity, brokerage details, and contact numbers — straight from Realtor.com's own public agent-search pages, by ZIP code. Every run returns typed, normalized JSON: no HTML, no selectors, no parsing required. Give it one ZIP code or thousands in a single run, choose how results are sorted, and get back deduplicated agent records ready to load into a CRM, a lead list, or an AI agent's context window.
🏠 What is Realtor.com Agents by Zip Code Scraper?
Realtor.com Agents by Zip Code Scraper is an Apify Actor that extracts real estate agent directory data from Realtor.com by ZIP code. For each ZIP code you provide, it queries Realtor.com's own public agent-search results, then fetches each matching agent's full profile page and merges the two into one structured record — ratings, sales activity, brokerage, and contact numbers together. No Realtor.com account or login is required for any part of this. Because it runs on Apify, it is also callable as a plain HTTP request through the Apify API, so any script or AI agent framework can trigger a run and read the results without a browser in the loop.
Key capabilities:
- 📍 Scrape agents for any number of ZIP codes in one run
- 🏢 Scrape brokerage and office details tied to each agent
- 📈 Scrape sales and listing activity (for-sale counts, sold counts, price ranges)
- 📤 Export as JSON, CSV, or Excel via Apify's dataset formats
- 🔓 No proxy setup required — proxy escalation is automatic
📊 What data does Realtor.com Agents by Zip Code Scraper collect?
Every run returns one row per agent, built by merging three groups of data from Realtor.com's own agent-search and agent-profile responses into a single record.
| Data Type | Key Fields | JSON Field Names |
|---|---|---|
| Agent profile | Name, average rating, review count, recommendations, photo | agent_name, average_rating, review_count, recommendations_count, agent_photo, agent_initials |
| Brokerage / office | Company name, company website, office phone, mobile numbers, service areas | office_company_name, company_website, office_phone, mobile_phones, areas_serviced |
| Sales & listing activity | Active listings, sold count, price ranges, annual volume, last listing date, prominence score | listing_count, sold_count, for_sale_min, for_sale_max, for_sale_last_listing_date, combined_annual_min, combined_annual_max, sorting_weight |
⚠️ Two things worth knowing before you rely on this data: Realtor.com's own agent-search and agent-profile API never returns an agent's email address, on any agent, in any ZIP code — the email field is kept in the output (always null) for schema stability, not because it occasionally populates. Second, the search request this Actor sends is scoped to Realtor.com's buyer-side agent index (agent_type: BUYER in Realtor.com's own query) — it is not a configurable input, so seller-only agent listings outside that index are not returned.
🛠️ Why not build this yourself?
Realtor.com does not publish a public developer API for its agent-search or agent-profile data, so there is no official endpoint to compare this Actor against. Building an equivalent yourself means reverse-engineering the same internal GraphQL responses this Actor already parses, then maintaining pagination, cross-ZIP deduplication, retry logic, and proxy rotation as Realtor.com's site evolves. That maintenance burden — plus the anti-bot escalation and proxy cost of keeping requests unblocked at any real volume — is exactly what this Actor absorbs: it handles the search-to-profile merge, retries, and proxy fallback so you get structured rows instead of a scraping project to maintain.
🎯 Why do developers and teams scrape Realtor.com agent data?
For lead generation and real estate marketing teams
Building a ZIP-targeted outreach list normally means manually browsing "realtor.com find an agent" results one search at a time. Feed a list of ZIP codes into zipCodes and get back every matching agent's office_phone, mobile_phones, and areas_serviced in one dataset, sorted by sortOrder (for example MOST_RECENT_ACTIVITY to prioritize agents currently closing deals). Since email is never populated by Realtor.com's own API, outreach workflows built on this data are phone- and mail-based by design, not cold-email lists.
For brokerages and competitive intelligence teams
Comparing your agents against the local market means pulling combined_annual_min/max, sold_count, listing_count, and is_paid (Realtor.com's paid/featured flag) for every competing agent in a ZIP code, then repeating that across every market you operate in. Running this Actor across your footprint's ZIP codes returns that same comparison as structured rows you can pivot in a spreadsheet or BI tool, without opening a single profile page by hand.
For proptech developers and AI agent builders
sorting_weight, average_rating, and review_count are the same signals Realtor.com surfaces to rank agents on its own site. A "find an agent near me" feature or an AI agent that recommends agents by ZIP code can index this Actor's JSON output directly — typed fields, no HTML to parse — and re-rank or filter on sortOrder, rating, or sales activity as part of its own logic.
For market and location analysts and investors
Aggregating sold_count, listing_count, and for_sale_min/max across a set of ZIP codes gives a proxy for transaction activity and price range by area, without pulling individual listing data. Running the same ZIP codes on a schedule via Apify's scheduler turns this into a repeatable snapshot of agent density and activity per market.
🧭 How to scrape Realtor.com agent data (step by step)
- Open Realtor.com Agents by Zip Code Scraper on its Apify Store page, or find it under Actors in your Apify Console.
- Provide the required input:
zipCodes, an array of one or more ZIP codes to search. - Set
maxItemsPerZipcodeto control how many agents come back per ZIP, andsortOrderto choose ranking (relevance, ratings, sales, recent activity, or recommendations). - Start the run — the Actor pages through Realtor.com's agent search, fetches each agent's detail profile, and pushes each row to the dataset as it's extracted.
- Download results as JSON, CSV, or Excel from the run's dataset, or pull them programmatically via the Apify API.
What to do when Realtor.com changes its structure
This Actor is maintained against Realtor.com's own agent-search and agent-profile responses. When Realtor.com changes them, the Actor is updated to match, so the field names and types your integration reads stay the same — no code changes needed on your end.
⬇️ Input
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
zipCodes | Yes | array (stringList) | Enter zip codes to scrape agents from. Supports bulk input for multiple locations. | ["07101", "00501"] |
maxItemsPerZipcode | No | integer | Maximum number of agents to extract per zip code. Default 10, minimum 1, maximum 10000. | 50 |
sortOrder | No | string (enum: RELEVANT_AGENTS, RATINGS_REVIEWS, MOST_SALES, MOST_RECENT_ACTIVITY, TESTIMONIALS_RECOMMENDATIONS) | Choose how to sort the agent results. Default RELEVANT_AGENTS. | "RATINGS_REVIEWS" |
maxRetries | No | integer | Maximum number of retry attempts per request before falling back/rotating proxies (search requests and per-agent detail requests both use this). Default 3, minimum 1, maximum 10. | 3 |
proxyConfiguration | No | object (proxy editor) | Smart proxy management. Starts with no proxy by default. If Realtor.com blocks requests, automatically falls back to datacenter proxy, then residential proxy with retries. | {"useApifyProxy": false} |
Example JSON input
{"zipCodes": ["07101", "00501"],"maxItemsPerZipcode": 10,"sortOrder": "RELEVANT_AGENTS","maxRetries": 3,"proxyConfiguration": {"useApifyProxy": false}}
Common pitfall: setting maxItemsPerZipcode to a high number like 10000 on a ZIP code that only has a few dozen agents does not error — you simply get back however many agents actually exist there. The real ceiling per ZIP is Realtor.com's own agent count for that area, not the input's maximum.
⬆️ Output
Results are typed, normalized JSON with a stable field set. Each pushed row is a row_result charged event; agents that fail to load a detail profile, or that were already collected earlier in the same run under a different overlapping ZIP code, are never pushed and never charged. Export the dataset as JSON, CSV, or Excel/XLSX from the Apify Console, or read it via the API.
Scraped agent record
{"zip_code": "07101","agent_name": "John Doe, agent","website": "https://www.realtor.com/realestateagents/123456","email": null,"average_rating": 4.8,"review_count": 25,"recommendations_count": 14,"is_paid": true,"listing_count": 5,"sold_count": 12,"combined_annual_min": 1200000,"combined_annual_max": 3400000,"for_sale_min": 250000,"for_sale_max": 900000,"for_sale_last_listing_date": "2026-06-01","sorting_weight": 87,"services_buyer": true,"services_seller": true,"office_phone": "(555) 123-4567","mobile_phones": "(555) 987-6543","areas_serviced": "Newark, Jersey City, Hoboken, Union City","office_company_name": "ABC Realty","company_website": "https://www.abcrealty.com","agent_photo": "https://ap.rdcpix.com/example-photo.jpg","agent_initials": "JD","scrapedAt": "2026-07-30T14:22:07.481523+00:00"}
📐 How does Realtor.com Agents by Zip Code Scraper compare to other Realtor.com scrapers?
| Feature | Realtor.com Agents by Zip Code Scraper | Generic / manual alternative |
|---|---|---|
| Output format | Typed JSON, stable field names | Raw HTML you parse yourself |
| Data merge | Combines the agent-search list response and the agent-profile detail response into one row (ratings, sales stats, brokerage, phones together) | Requires visiting the search page and each individual agent profile page separately |
| Bulk input | Any number of ZIP codes in a single run | One ZIP code / search at a time |
| Proxy & block handling | Automatic escalation — no proxy → datacenter → sticky residential, with configurable retries | You build and rotate your own proxy pool |
| Cross-ZIP deduplication | Agents appearing in overlapping ZIP codes are only pushed once per run | Manual dedup required when ZIP codes overlap |
If you're building an AI agent or RAG pipeline, the output format row is the decision-maker — parsing HTML inside an agent loop is a reliability failure mode, not a feature.
🔢 How many results can you scrape with this Realtor.com agent scraper?
The real ceiling per ZIP code is whichever is smaller: your maxItemsPerZipcode setting (1–10,000) or the total number of agents Realtor.com actually reports for that ZIP. Internally, the Actor pages through Realtor.com's agent search 24 agents at a time and stops as soon as it hits your maxItemsPerZipcode value or runs out of agents for that ZIP. Across multiple ZIP codes in one run, an agent who serves several of them is only counted and pushed once, so the total row count for a run can be lower than the sum of per-ZIP limits. There is no separate hard cap beyond the input's own 10,000 maximum.
🔌 Integrate Realtor.com Agents by Zip Code Scraper and automate your workflow
Realtor.com Agents by Zip Code Scraper works with any language or tool that can send an HTTP request.
REST API integration
from apify_client import ApifyClientclient = ApifyClient("<APIFY_API_TOKEN>")run = client.actor("<your-username>/realtor-com-agents-by-zip-code-scraper").call(run_input={"zipCodes": ["07101", "00501"],"maxItemsPerZipcode": 10,"sortOrder": "RELEVANT_AGENTS",})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["agent_name"], item["zip_code"])
Works in Python, Node.js, Go, Ruby, cURL.
Automation platforms (n8n, Make)
Apify's official n8n node and Make module can call any Actor by ID, including this one — use the "Run Actor" operation with this Actor's ID and input, then a follow-up "Get dataset items" step to pull the extracted agent rows straight into your workflow, no custom HTTP node required.
⚖️ Is it legal to scrape Realtor.com agent data?
Yes — scraping publicly accessible pages is generally legal, but the results describe identifiable individuals, so treat the data accordingly. Realtor.com Agents by Zip Code Scraper returns only publicly available data: the same agent-search and agent-profile pages Realtor.com serves to any anonymous visitor, with no login and no bypassing of access controls. Because the output includes agents' names, phone numbers, and photos, it counts as personal data under GDPR/CCPA — you need a lawful basis for storing and using it, and should honor deletion or opt-out requests. Consult legal counsel for commercial use cases involving bulk personal data.
❓ Frequently asked questions
Does Realtor.com Agents by Zip Code Scraper work without a Realtor.com account?
Yes. It only calls Realtor.com's public agent-search and agent-profile endpoints — no login, cookies, or account credentials are used anywhere in the Actor.
How often is the scraped data updated?
Every run fetches live data directly from Realtor.com at the time it runs — there is no caching layer. Run it again, or on a schedule, to get current data.
What happens if a ZIP code has few or no agents?
The Actor returns however many agents Realtor.com actually has for that ZIP, down to zero, without failing the run. It only raises an error if the very first search request for a ZIP code fails outright; a ZIP that genuinely has no matches simply produces no rows for that ZIP.
Can I scrape private or restricted Realtor.com agent content?
No. Only publicly listed agent-search and agent-profile data is returned. Fields Realtor.com's own API never exposes — most notably agent email addresses — stay null rather than being guessed or scraped from elsewhere.
Can I search multiple ZIP codes in a single run?
Yes. zipCodes accepts any number of ZIP codes, and agents that appear in more than one overlapping ZIP are deduplicated and only pushed once per run.
Does Realtor.com Agents by Zip Code Scraper work for AI agent workflows and LLM pipelines?
Yes. It's callable as a plain HTTP endpoint through the Apify API by any agent framework or script. Every response is typed JSON with stable field names, so it can be passed directly into an LLM context window or a RAG index with no parsing step.
How does this Actor handle Realtor.com's anti-bot measures?
It starts every run with no proxy and only escalates when a request is blocked or unstable: first to an Apify datacenter proxy, then to a sticky residential proxy, retrying up to maxRetries times per request along the way. Requests between search pages and detail fetches are also paced with small randomized delays to reduce the chance of being blocked in the first place.
How does Realtor.com Agents by Zip Code Scraper compare to other Realtor.com scrapers?
Compared to a manual or DIY approach, this Actor's distinguishing behavior is merging Realtor.com's agent-search and agent-profile responses into one row per agent, deduplicating across overlapping ZIP codes, and handling proxy escalation automatically — see the comparison table above for the full breakdown.
Does Realtor.com Agents by Zip Code Scraper return data in a format LLMs can use directly?
Yes. Output is typed, normalized JSON with stable field names — no HTML, no selectors, no parsing. Pass it directly into an LLM context window, index it into a vector store, or route it through an agent tool call.
Can I use this Actor without managing proxies myself?
Yes. By default it runs with no proxy and automatically escalates to Apify's datacenter, then residential, proxies only if Realtor.com blocks a request. You can also supply your own proxyConfiguration if you want to start on a specific proxy group.
What happens when Realtor.com changes its structure or blocks the scraper?
The Actor is maintained to match Realtor.com's current agent-search and agent-profile responses, and the output schema stays stable — field names and types on your end don't change when Realtor.com's site does.
💬 Your feedback
Found a bug or missing a field in the Realtor.com agent data? We want to know. Use the Issues tab on this Actor's Apify Store page to report it or request a feature — active maintenance is what keeps this scraper working as Realtor.com's site evolves.