Realtor.com Agents Scraper - Profiles & Contact Data
Pricing
from $2.20 / 1,000 results
Realtor.com Agents Scraper - Profiles & Contact Data
Extract US real estate agent profiles from Realtor.com by city or ZIP, with available phones, office details, ratings, and sales statistics. Pay per delivered agent row plus a start fee.
Pricing
from $2.20 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
5
Total users
3
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
Realtor.com Scraper
Export US real estate agent profiles from Realtor.com as structured rows with public contact details, brokerage information, ratings, and sales statistics.
- Search agents by a US city and state or ZIP code.
- Get phones, office addresses, websites, and profile links where available.
- Compare ratings, listing counts, languages, and served areas.
- Filter by agent name, membership flag, or listing price range.
- Pay $3.00 per 1,000 delivered rows on the Free plan, plus a small start fee.
What does Realtor.com Scraper do?
This Actor searches the Realtor.com agent directory. Each dataset row represents one agent, with rowType set to agent and id equal to agentId. Use the results for brokerage research, local market comparisons, or a CRM import, subject to the applicable data-use rules. It collects agent profiles, not property listings.
- Location search: enter one
locationas a city and two-letter state or ZIP code. These are two forms of the same search mode. - Filtered search: add
agentName,isRealtor,minPrice, ormaxPriceto narrow that location search. - Profile details:
enrichProfilesis on by default. It adds available contact, office, license, MLS, and specialization fields to the same agent row, without creating another billed row.
What data can you extract from Realtor.com?
The table describes agent rows. Availability varies by profile; an absent field is not evidence that the agent has no such attribute.
| Field | Description | Example |
|---|---|---|
rowType | Entity represented by the row. | agent |
agentId | Source identifier; also used as the row's id. | example-agent-id |
name | Agent's displayed name. | Jane Doe |
profileUrl | Link to the agent profile. | https://www.realtor.com/realestateagents/example-agent-id |
phone | First agent phone, or an office phone if needed. | +1 555 0100 |
phones | Agent phone numbers with their source labels. | [{"type":"Office","value":"+1 555 0100"}] |
officePhones | Phone numbers for the office. | [{"type":"Office","value":"+1 555 0101"}] |
officeName | Real estate office name. | Example Realty |
brokerName | Property broker or brokerage name. | Example Brokerage |
address | Office address, including suite when provided. | {"street":"123 Example Street","unit":null,"locality":"Austin","region":"TX","postalCode":"78701","country":"US","full":"123 Example Street, Austin, TX 78701"} |
website | Agent's personal website. | https://example.com |
socialMedia | Social profile links keyed by platform. | {"linkedin":"https://example.com/profile"} |
averageRating | Source's average rating. | 4.8 |
reviewsCount | Aggregate number of reviews, not review text. | 12 |
forSaleCount | Count of current listings shown for the agent. | 6 |
recentlySoldCount | Count of recently sold listings shown. | 20 |
forSaleMin | Lowest current listing price shown. | 250000 |
forSaleMax | Highest current listing price shown. | 750000 |
languages | Languages listed on the profile. | ["English","Spanish"] |
servedAreas | Areas served, with name and state code. | [{"name":"Austin","stateCode":"TX"}] |
specializations | Listed areas of practice. | ["Buyer's Agent"] |
licenseNumber | License number when provided. | EXAMPLE-LICENSE |
licenseState | State associated with the license. | TX |
mls | MLS membership entries supplied by the profile. | [] |
bio | Agent's profile biography. | Example agent biography. |
enriched | Whether additional profile details were obtained. | true |
leadSource | Whether contact fields came from search or profile details. | detail |
leadAbsences | Reasons for unavailable contact fields. | {"emails":"闸门锁","geo":"未验证"} |
searchLocation | Location used for this search. | Austin, TX |
scrapedAt | Collection timestamp. | 2026-10-24T00:00:00+00:00 |
source is realtor.com. The Actor leaves emails as an empty list and geo as null; it does not supply email addresses or coordinates. In leadAbsences, 闸门锁 identifies the email contact-form restriction, and 未验证 marks coordinates as unverified. These are literal output values, not instructions to provide credentials.
How to scrape Realtor.com
- Open Realtor.com Agents Scraper in Apify Console.
- Enter
location, such asAustin, TXor78701. - Set
maxResultsto3for a small first run. Keep profile enrichment enabled if you need contact fields. - Click Start and check the run status.
- Open the dataset and download it, or read its rows through the API.
An empty input starts an example search for Austin, TX, limited to 3 rows from the form's sample values. Normal start and row charges apply to this example. Supplying location selects the location-search mode automatically; there is no mode selector to fill in.
City or ZIP search
Use a city with its two-letter state, such as Austin, TX, or a ZIP such as 78701. ZIP+4 is also accepted as an input format. A state alone, such as Maryland, is not accepted. The Actor accepts one location per run, not a list of cities.
Narrowing the search
An agentName value narrows the chosen location; it does not replace it. isRealtor keeps agents marked as members by the site. Price filters concern listing prices used in the agent search, not commissions or service fees. Set enrichProfiles to false when search-level fields are enough.
What to fill in
| Field | What to enter | Default |
|---|---|---|
location | One US city and two-letter state, or ZIP code. | No fixed default; example uses Austin, TX |
agentName | Optional agent name or surname, such as Jane Doe. | Empty |
maxResults | Maximum agent rows for the location, from 1 to 500. | 70; form prefill 3 |
isRealtor | Keep only agents marked as members. | false |
minPrice | Optional minimum listing price in USD, zero or higher. | Not set |
maxPrice | Optional maximum listing price in USD, zero or higher. | Not set |
enrichProfiles | Add available profile details to each agent row. | true |
Location search:
{"location": "Austin, TX","maxResults": 3,"enrichProfiles": true}
The same mode with ZIP and name filters:
{"location": "78701","agentName": "Jane Doe","minPrice": 250000,"maxPrice": 750000,"maxResults": 3,"enrichProfiles": false}
maxItemsandlimitare accepted as aliases formaxResults. Location aliases includecity,zip,zipCode,postalCode, andsearchLocation.- Close misspellings of field names can be corrected. Other unknown fields are ignored, with a note in the input report; they do not fail the run solely because they are unknown.
- Unusable filter values are dropped. A reversed minimum/maximum price range is swapped.
- An invalid target stops the run before any rows are collected or charged. For example, a state-only location produces
INVALID_INPUT: location: use a US city with its two-letter state .... The start fee can still apply. - Each run writes
INPUT_REPORTto its default key-value store with the interpreted fields, corrections, ignored fields, and example-run flag.INPUT_ECHOcontains the parsed input settings.
Output example
This illustrative row uses placeholder identity and contact data:
{"rowType": "agent","id": "example-agent-id","agentId": "example-agent-id","name": "Jane Doe","profileUrl": "https://www.realtor.com/realestateagents/example-agent-id","phone": "+1 555 0100","phones": [{"type": "Office", "value": "+1 555 0100"}],"officeName": "Example Realty","brokerName": "Example Brokerage","averageRating": 4.8,"reviewsCount": 12,"forSaleCount": 6,"recentlySoldCount": 20,"languages": ["English", "Spanish"],"servedAreas": [{"name": "Austin", "stateCode": "TX"}],"emails": [],"geo": null,"leadAbsences": {"emails": "闸门锁", "geo": "未验证"},"enriched": true,"leadSource": "detail","searchLocation": "Austin, TX","source": "realtor.com","scrapedAt": "2026-10-24T00:00:00+00:00"}
You can export the dataset as JSON, CSV, Excel, XML, RSS, or an HTML table. Use JSON when you need to preserve nested phone, address, and served-area structures. RUN_SUMMARY contains counts and warnings; ERROR_SUMMARY records input or collection failures when they occur.
Why use this Realtor.com scraper?
- Row-based pricing: apart from the start fee, charges apply to agent rows delivered to the dataset.
- Details stay together: enrichment fills the same agent row, so it does not add a second row charge.
- Useful partial profiles: if enrichment fails for an agent, available search data can still be delivered with
enrichedset tofalse. - Visible limits: the row allowance, free-plan limits, and maximum run cost bound the request.
- Saved rows remain available: rows already written to the dataset remain there if the run later stops. Do not assume unfinished collection has already been saved.
- No proxy setup: you do not need to set up proxies.
How much does it cost to scrape Realtor.com?
The Actor uses pay-per-event pricing. Platform usage is included in these prices. The start event costs $0.005 per allocated GB, with a minimum of one event. At the default 512 MB, one start costs $0.005.
| Apify plan | Start at 512 MB | Price per row | Price per 1,000 rows |
|---|---|---|---|
| Free | $0.005 | $0.0030 | $3.00 |
| Starter | $0.005 | $0.0030 | $3.00 |
| Scale | $0.005 | $0.0026 | $2.60 |
| Business | $0.005 | $0.0022 | $2.20 |
| Platinum | $0.005 | $0.0020 | $2.00 |
| Diamond | $0.005 | $0.0016 | $1.60 |
maxResultsapplies to the single location input. Its default is 70; larger requests are collected in parts of 70, up to the input maximum of 500.- Free Apify plan users are limited to 200 rows per run and 10 runs of this Actor. These are limits set by the Actor developer.
- The whole run stops at the Maximum cost per run you set in run options, named
maxTotalChargeUsdin the API. A budget or limited source matches can produce fewer rows than requested.
Example: 10 delivered agent rows on the Free plan, with the default 512 MB, cost $0.005 + 10 × $0.003 = $0.035. An example run delivering 3 rows costs $0.014 under the same settings. Enrichment does not change the row price.
What happens when the run timeout is too short
If the search is expected to outlast the remaining run time and automatic resumption is accepted, the run can pause instead of failing immediately. Its status message says "Queued on the collection backend; this run will resume automatically when results are ready (about N s)." The run appears as ABORTED while paused.
When results are ready, the same run can resume, deliver rows to the same dataset, and finish as SUCCEEDED. The delivery step skips rows already present in that dataset rather than delivering and charging them again. Keep the default timeout of 3600 seconds to reduce the need for pauses. Genuine collection failures and manual cancellation are not the same as this automatic pause.
The synchronous API endpoints run-sync and run-sync-get-dataset-items wait at most 300 seconds. They can return an empty dataset while the run is paused. For longer searches, start asynchronously and read the dataset after SUCCEEDED, or use a webhook for the succeeded event.
Use with AI agents and the API
Apify MCP server
Add the Actor to Claude, ChatGPT, Cursor, VS Code, or another client that supports remote MCP servers:
https://mcp.apify.com?tools=lentic_clockss/realtor-com-agents-scraper
Sign in with Apify using OAuth when prompted, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool starts a run and returns run and dataset IDs; read the rows with get-dataset-items after completion.
Clients without remote MCP support can use:
npx @apify/actors-mcp-server --tools lentic_clockss/realtor-com-agents-scraper
Set APIFY_TOKEN for that command. Example prompt: "Find 3 real estate agents in Austin, TX. Include available phone numbers, office names, ratings, and profile links."
Apify API
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/realtor-com-agents-scraper").call(run_input={"location": "Austin, TX", "maxResults": 3})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('lentic_clockss/realtor-com-agents-scraper').call({ location: 'Austin, TX', maxResults: 3 });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
For asynchronous HTTP use, send the input JSON to POST https://api.apify.com/v2/acts/lentic_clockss~realtor-com-agents-scraper/runs with an Authorization: Bearer header. Once the run succeeds, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json with the same authentication.
Integrations
Use the Actor's Integrations tab to connect results to Google Sheets, Make, Zapier, n8n, Slack, Airtable, or a webhook. Apify Schedules can repeat the same location search. Compare agentId across exports when maintaining an existing list.
FAQ
Is it legal to scrape Realtor.com?
The Actor collects publicly available agent data. You are responsible for checking the site's terms and applicable data-protection law for your use. Public professional contact details can still be personal data and require a lawful basis for processing. Availability does not grant permission for unsolicited outreach.
Why did my run end as ABORTED?
An automatic pause can temporarily show ABORTED while results are pending. Check whether the status message explicitly says the run will resume. A manually aborted run or another failure does not have that same meaning; check its status and available error record.
How many results can I get?
Request 1–500 rows for one location, subject to matching profiles and your maximum run cost. The default allowance is 70. Free-plan runs are capped at 200 rows, and the Actor allows 10 free-plan runs. Requesting 500 does not guarantee 500 matching agents.
Why are some fields empty?
Profiles do not all provide the same information. Some details require enrichProfiles to be enabled, and enrichment can fail for individual agents. Check enriched and leadSource. Email addresses and coordinates are not supplied by this Actor, even with enrichment enabled.
Can I search by ZIP instead of city?
Yes. Set location to a ZIP such as 78701, or use City, ST. Do not send a state name alone or an array of locations.
Does enrichProfiles cost more?
There is no additional row charge for enrichment. It adds available detail fields to the same billed agent row and can take longer. Turning it off leaves search-level data, which may still contain some contact fields.
Can a successful run return no rows?
Yes. A valid search with no matching profiles can finish successfully with zero rows. Check the input and the reason in RUN_SUMMARY, then try removing a restrictive name or price filter. A zero-row run can still incur the start fee.
Can I schedule regular searches?
Yes. Save your input in an Apify Schedule and choose the frequency. Each run has its own start and row charges; a recurring schedule does not remove the row allowance or free-plan run limit.
Limitations
- US agent-directory searches only; no international markets or property-listing collection.
- One location per run. Direct profile URLs and agent IDs are not supported target inputs for this Actor.
- No email addresses, contact-form submission, coordinates, or individual review text.
- Enrichment is optional and does not guarantee complete phone, address, license, or MLS data.
- Phones, office phones, served areas, languages, designations, specializations, MLS entries, and recently sold listing summaries are limited to 50 entries each within a row; companion count fields describe the source lists.
- Listing statistics describe what the source shows, not a verified transaction history. Results and profile details can change between runs.
Related scrapers
More real estate and property data scrapers from the same publisher:
- Zumper Scraper
- Booli Scraper
- Craigslist Scraper
- PropertyGuru Scraper
- OpenSooq Scraper
- Apartments.com Rental Scraper
- Dot Property Scraper
- FINN.no Scraper
Browse all of our scrapers at apify.com/lentic_clockss.
Support
Report a problem or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.