# Realtor.com Agents Scraper: Reviews, Sales, Emails (`automation_craft/realtor-com-agents-scraper`) Actor

Scrape Realtor.com's Find a Realtor directory by city, ZIP code, state, link or name, past the 10,000 agents a search shows. Get office, brokerage, served areas, experience, ratings, reviews, recent sales and price range; add the profile, reviews, listings, e-mail. No login. Leads in CSV or API.

- **URL**: https://apify.com/automation_craft/realtor-com-agents-scraper.md
- **Developed by:** [Automation Craft](https://apify.com/automation_craft) (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 $0.66 / 1,000 agents

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Realtor.com Agents Scraper: Reviews, Sales, Emails

**Realtor.com agents scraper and API**: give a city ("Austin, TX"), a ZIP code, a whole state, a Find a Realtor link, an agent name or a list of profile links, and get one row per real estate agent of Realtor.com's agent directory: office and brokerage, served areas, languages, experience, rating with review and recommendation counts, homes for sale and recent sales with their price range, services and bio. Add the full profile (phones, website, office address, MLS memberships, specializations, designations, sales of the last 12 months), every review and recommendation, the agent's own listings and the agent's e-mail when you need them.

No login, no cookies and no browser: the Actor reads Realtor.com's own data service, up to 300 agents a request. Realtor.com answers at most 10,000 agents for one search; with **Agents per search** set higher, a city is read on through name prefixes (99.95 percent of Austin's 34,924 agents in a test). Each agent is charged once per run, whichever search found it; agents not found, filtered out or repeated are free rows.

#### What you can do with it

- Build a list of the agents serving a city, a ZIP code or a whole state, with office, brokerage and experience.
- Rank the agents of a market by ratings and reviews, recommendations, sales or recent activity, and keep only those with enough reviews, sales, listings or years.
- Read an agent's reviews (with the four sub ratings) and recommendations for reputation research.
- Find the agents advertising the homes for sale, sold or for rent in a city, ZIP code, county or neighborhood, with how many of those homes each one advertises.
- Refresh a list of agents you already have by profile link or id, with the full profile, listings and e-mail.

### How to use the Realtor.com Agents Scraper

1. Open the Actor and type places into **Places** (`Austin, TX`, `78704`, `TX`), or paste Find a Realtor links or profile links into **Find-a-Realtor links and agent profile links**, or profile links and ids into **Agent profile links or ids**.
2. Optional: choose an **Order**, Realtor.com's filters (buyer's or seller's agents, languages, price range) and row filters (minimum rating, reviews, recommendations, recent sales, listings for sale, years of experience, brokerage, specializations, designations, required fields).
3. Optional: turn on the add-ons (**Agent details**, **Reviews**, **Recommendations**, **Listings**, **Agent email**) and **Include personal data** if you need the agents' names and contacts.
4. Set **Agents per search** (20 in the prefill, 100 by default) and click **Start**. Download the agents as JSON, CSV or Excel, or read them through the Apify API.

### What data you get

One row per agent (`type: "agent"`), plus one free coverage row per search (`type: "search"`: agents found, reached and delivered, whether the search is complete), free status rows for anything refused or not found (`type: "status"`) and a free run summary (`type: "summary"`). Fill rates were measured on 150 agents at random positions of the agent lists of Austin TX, Dayton OH, Oakland MD, New York NY and Miami FL (October 2026); the e-mail on 60 agents of Austin, Dayton and Miami. Figures in brackets come from a run of 300 agents at the top of Chicago's list with Agent details on, and from 120 listings of 3 Austin agents (2026-10-30).

| Field | What it holds | Fill |
|---|---|---|
| `profileId`, `name`, `profileUrl` | Realtor.com's profile id, the agent's name and profile link (with `includePersonalData`) | 100% |
| `fulfillmentId` | Realtor.com's second agent id (with `includePersonalData`) | 95% |
| `photoUrl`, `licenseNumber` | photo and licence number (with `includePersonalData`) | 85%, 59% |
| `bio` | the agent's own text, as served | 77% |
| `servedAreas`, `servesSearchedPlace` | cities the agent serves; whether one of them is the searched place (search rows) | 100% on search rows, about 92% on agents looked up or found on listings |
| `experience` | first year and month in business, years | 72% (Realtor.com shows a placeholder year 0 for the rest: delivered as no year) |
| `office.name`, `brokerage.name` | office and brokerage | 85%, 63% |
| `languages` | languages listed on the profile | 29% |
| `isRealtorMember` | Realtor.com's REALTOR member mark | true on 57% |
| `rating.average`, `rating.reviews`, `rating.recommendations` | rating with its review and recommendation counts | 31% with reviews, 25% with recommendations |
| `listingStats.forSale`, `listingStats.recentlySold`, `listingStats.annualPriceRange` | homes for sale now and recently sold: count, price range, last date | 44% with homes for sale, 57% with recent sales |
| `services`, `relevanceWeight` | buyer and seller services offered; Realtor.com's relevance weight (search rows only) | 2%, 93% |
| `search`, `rank`, `source`, `rowKey`, `scrapedAt` | the search that found the agent and its place in it | 100% |
| `rowStatus`, `detailsStatus`, `reviewsStatus`, `recommendationsStatus`, `listingsStatus` | whether the row and each add-on were read in full (`read`, `none`, and for the e-mail `no_listings`), in part (`partial`, `cut_to_fit_one_dataset_row`, `cut_by_charge_limit`) or not (`not_read`, `skipped_charge_limit`); `no_profile` and `no_fulfillment_id` when Realtor.com has no profile or no agent id for it; a search with any of these not in full says not complete | 100% |
| `details.phones`, `details.website`, `details.socialMedia` | the agent's phones, website and social links (Agent details, with `includePersonalData`) | 87%, 75%, 36% |
| `details.office` | office city and state, phones, website; street address with `includePersonalData` | 81% (address), 77% (phones), 52% (website) |
| `details.mls`, `details.licenseState` | MLS memberships (agent ids with `includePersonalData`), licence state | 77%, 59% |
| `details.specializations`, `details.designations`, `details.intentType` | specializations, designations (ABR, CRS, GRI ...), buyer or seller focus | 78%, 14%, 61% |
| `details.questionsAndAnswers`, `details.aboutVideoUrl` | the profile's Q and A; video (with `includePersonalData`) | 8%, 3% |
| `details.soldLast12Months`, `details.recentSales` | sales of the last 12 months; recent sales with city, beds, baths, photo | (97%, 95%) |
| `email`, `emails`, `nrdsId`, `officeEmails`, `emailStatus` | the agent's e-mail and NRDS id from its own listings (Agent email, with `includePersonalData`) | 90% (54 of 60; every agent with a listing row) |
| `reviews` | rating, four sub ratings, comment, reviewer's display name, location and role, date, transaction date, the agent's reply | 242 reviews: rating 100%, sub ratings 96%, comment 81%, transaction date 15%, reply under 1% |
| `recommendations` | comment, author, date, source | 325 recommendations: comment and author 100% |
| `listings`, `listingTotals`, `listingSideCounts` | the agent's own listings: price, status, dates, address, beds, baths, size, type, photo, link, the agent's side; totals per kind | (price, status, link and side 100%, address 99%, beds 90%; sold price 0%, as Texas does not disclose it) |

#### Example row (shortened, personal data off)

```json
{
  "type": "agent",
  "rowKey": "7cca436f86f9ed1d96fd268b",
  "profileId": null,
  "name": null,
  "bio": "Austin & Central Texas Real Estate ...",
  "isRealtorMember": true,
  "languages": ["English"],
  "servedAreas": [{ "city": "Austin", "state": "TX" }, { "city": "Bastrop", "state": "TX" }, { "city": "Buda", "state": "TX" }],
  "servesSearchedPlace": true,
  "experience": { "firstYear": 2011, "firstMonth": "January", "label": "15 years 9 months of experience", "years": 15 },
  "office": { "name": "Team West Real Estate" },
  "brokerage": { "name": "Team West Real Estate - Broker", "id": null },
  "rating": { "average": 5, "reviews": 11, "recommendations": 62 },
  "listingStats": {
    "forSale": { "count": 3, "minPrice": 325000, "maxPrice": 462000, "lastListingDate": "2026-09-02T16:35:35Z" },
    "recentlySold": { "count": 17, "minPrice": null, "maxPrice": null, "lastSoldDate": "2026-09-11" }
  },
  "source": "directory",
  "rank": 1,
  "search": { "label": "location 1", "place": "Austin, TX", "filters": { "sort": "relevant" } },
  "detailsStatus": null,
  "scrapedAt": "2026-10-30T02:51:55.267Z"
}
```

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

You pay per agent delivered, plus each add-on item you ask for (pay per event). Prices per 1,000 events:

| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
| Agent (one agent row) | $0.92 | $0.84 | $0.77 | $0.66 |
| Agent details (the full profile, add-on) | $0.55 | $0.50 | $0.45 | $0.40 |
| Review | $0.42 | $0.38 | $0.35 | $0.30 |
| Recommendation | $0.42 | $0.38 | $0.35 | $0.30 |
| Listing | $0.42 | $0.38 | $0.35 | $0.30 |
| Agent email | $1.40 | $1.28 | $1.16 | $1.00 |

Each run also pays a one time Actor start of $0.008 on every plan. Platinum and Diamond plans pay the Gold price. The Store pricing card shows these same prices per 1,000 events: "$0.66 / 1,000" on the Agent row means one agent costs less than a tenth of a cent, and "$1.00 / 1,000" on the Agent email row means one e-mail costs a tenth of a cent.

- 1,000 agents of a city, no add-ons: $0.928 on the Free plan ($0.92 plus the $0.008 start fee), $0.668 on Gold.
- 1,000 agents with Agent details and Agent email: at most $2.878 on Free and $2.068 on Gold. Agent email is charged only for an agent that has an e-mail (54 of 60 in the test).
- 100 agents with Reviews on and 2,000 reviews among them: $0.94 on Free ($0.092 for the agents, $0.84 for the reviews, $0.008 start), $0.674 on Gold.
- Agents looked up by link or id and agents found on listings come with their full profile, so each one pays Agent and Agent details: 1,000 of them cost $1.478 on Free and $1.068 on Gold.
- Free: agents not found, filtered out or repeated, places refused or not found, every coverage, status and summary row, the CSV file, and **Count only** runs (only the start fee). A run with no usable input charges only the start fee.
- Set a maximum cost per run in the Apify Console: an agent the limit cannot pay is not delivered, and add-on lists are cut to what the limit allows (marked `cut_by_charge_limit`, or `skipped_charge_limit` when nothing was left for a list).

### Input

| Setting | What it does |
|---|---|
| `locations` | Cities with their state (`Austin, TX`), 5 digit ZIP codes (`78704`, checked against Realtor.com's own place list) or whole states (`TX` or `Texas`: their cities, largest first). Up to 1,000. Realtor.com lists agents by city or ZIP code, so a county or neighborhood is refused, with a free row giving its position and the reason. |
| `startUrls` | Find a Realtor search links with their filter segments (buyer or seller, language, price, order, name, members, photo, rating, recommendations, designation), and agent profile links. Up to 10,000. |
| `agents` | Profile links (`/realestateagents/<id>` and the older `<Name>_<City>_<ST>_<id>_<n>` form), 24 character profile ids or numeric fulfillment ids. Up to 10,000. An id with no profile is a free row. |
| `agentName` | Realtor.com's own name search: alone, the agents of that name across the US; with places, the agents of that name in each place. |
| `listingAgentLocations`, `listingAgentStatuses`, `maxListingsScanned` | Agents found on listings: the homes for sale (or sold, or for rent) of a city, ZIP code, county or neighborhood are read (1,000 by default, up to 10,000 a place) and the agents advertising them are delivered with their full profile and `listingsFoundInSearch`, up to **Agents per search** a place and checked by the same filters as a search (languages, price, name and the row filters). Up to 200 places. |
| `sort` | Most relevant, ratings and reviews, recommendations, most sales, most recent activity. |
| `agentType`, `languages`, `minPrice`, `maxPrice` | Realtor.com's own filters (languages and price are checked again on every row; buyer's or seller's agents is Realtor.com's own search filter only). A price leaves out every agent without a listing price range (about 85 percent of a city's agents). |
| `realtorMembersOnly`, `withPhotoOnly`, `minRating`, `minReviews`, `minRecommendations`, `minRecentSales`, `minListingsForSale`, `minYearsExperience`, `maxYearsExperience`, `brokerageContains`, `requiredFields`, `specializations`, `designations` | Row filters, checked on every row; a row they leave out is free. Specializations, designations and most required fields read the full profile (turn on Agent details). |
| `maxItems`, `maxAgentsPerSearch` | Agents in all (200,000 by default and at most; split a bigger job over several runs) and per search (100 by default, up to 100,000). Above 10,000, a city search is read on through every two letter name prefix. |
| `countOnly` | Free: the agent count of each search in its coverage row, no agent rows. |
| `includeDetails`, `includeEmail`, `includeReviews`, `includeRecommendations`, `includeListings` | The add-ons. `maxReviewsPerAgent` and `maxRecommendationsPerAgent` (50 by default, up to 5,000), `listingTypes` (for sale, sold, for rent, off market; for sale and sold by default) and `maxListingsPerAgent` (50 a kind by default, up to 1,000). `includeEmail` needs `includePersonalData`; it also gives the office's e-mail (`officeEmails`) where the agent's listings show one, at no extra charge. |
| `includePersonalData` | Off by default (see below). |
| `outputFormat`, `omitEmptyFields`, `saveCsv` | Nested, flat (one column per field) or compact rows; leave out empty fields; also save `AGENTS.csv` in the run's key-value store (every column but the review, recommendation and listing lists, which stay in the dataset; at most 400 columns). |
| `maxConcurrency`, `proxyConfiguration` | Parallel requests (1 to 4, default 3); Apify Proxy (default, its datacenter pool; a proxy group or a country is refused, since the Actor screens the networks Realtor.com refuses) or your own http:// proxy links (a password of 8 characters or more with letters and digits). |

Example input:

```json
{
  "locations": ["Austin, TX", "78704"],
  "sort": "ratings",
  "minReviews": 5,
  "includeDetails": true,
  "maxAgentsPerSearch": 200
}
```

#### Personal data

Real estate agents are private persons, so with `includePersonalData` off (the default) every field that names or reaches an agent is empty: the name, profile and fulfillment ids, profile link, photo and licence number; with Agent details the agent's phones, website, social links, MLS agent ids and licences, the office's street address and the video; the e-mail and NRDS id; a reviewer's photo, address and link; the brokerage id; office phones of a person's kind (mobile, home, other) or equal to the agent's own number; an office or brokerage name or office website that holds two words of the agent's display name (the one word of a one word name; every business name when the name is missing); the agent's own website listed again as the office's; and the office phones and website of a profile Realtor.com answered with field errors (nothing can show they are not the agent's). That is why default rows show `"name": null`. Turn the switch on when you need contact lists. Other business data (office and brokerage names, office phones of a business kind and websites) is delivered, and free text such as the bio, the Q and A and review comments comes as Realtor.com serves it, so it can hold what the agent or reviewer wrote there. You are responsible for using personal data lawfully (GDPR, CAN-SPAM, TCPA and state laws included).

### What this Actor does not do

- No buyer side deal history of an agent: Realtor.com's listings by agent answer the listing side (in a test 195 of 200 seller only, 4 seller and buyer, 1 buyer only), so `listings` and `listingSideCounts` are mostly the seller side. To find buyer's agents, use `listingAgentLocations` on sold homes: `listingRoles` then names the buyer side.
- No "active listings" order: Realtor.com's agent search offers five orders, all available in `sort`; a link sorted by active listings is refused with a free row.
- No team membership or team details: Realtor.com's agent record has no team field.
- No lookup by NRDS id: NRDS ids are delivered with the e-mail add-on, but a number given in `agents` is read as a fulfillment id (an NRDS id there gives a free not found row).
- No later page links (`pg-2` and on): such a link is refused with a free row; give the link of page 1 and set `maxAgentsPerSearch`.
- No lists of the ZIP codes an agent serves and no background photos: Realtor.com gives served areas as city names.
- No e-mails found on agents' own websites or through outside services: the e-mail is the one Realtor.com shows on the agent's own listings, so an agent without listings on Realtor.com has none (6 of 60 in the test).
- No counties or neighborhoods as agent search places (Realtor.com lists agents by city or ZIP code); they work in `listingAgentLocations`.
- A name search is not split past Realtor.com's 10,000 agents, and the name prefix split of a city is near complete, never claimed complete: in a test 5 of Austin's 34,924 agents were found only by their full name. The coverage row gives agents reached against Realtor.com's count.
- No monitoring, alerts or stored database: every run reads Realtor.com live, and a new run does not resume where an earlier one stopped. Schedule runs on Apify and compare the rows in your own sheet.

### FAQ

#### How do I get real estate agents' e-mail addresses from Realtor.com?

Turn on **Agent email** and **Include personal data**. The e-mail and NRDS id come from the agent's own listings on Realtor.com, since the agent profile has no e-mail field: in a test 54 of 60 agents had one, every agent with a listing row. Agents without an e-mail are not charged for it.

#### How do I get every real estate agent in a big city, past the 10,000 limit?

Realtor.com answers at most 10,000 agents for one search. Set **Agents per search** above the city's count (up to 100,000) and the Actor reads on through every two letter name prefix of the same place and filters: 34,905 of Austin's 34,924 agents and 68,948 of New York's 68,961 in a test. The coverage row says how many of Realtor.com's count were reached; for a whole state, give the state (`TX`).

#### Can I see the ratings and reviews of individual agents?

Every row carries the agent's rating with its review and recommendation counts, and `minRating` or `minReviews` keep only the agents you want. Turn on **Reviews** for each review (rating, the four sub ratings, comment, reviewer, date, the agent's reply) and **Recommendations** for the testimonials.

#### Does Realtor.com have an official API?

Realtor.com publishes no open API for its agent directory; its APIs are partner lead and listing feeds. This Actor works like an API: send a JSON input through the Apify API and read the agents as JSON.

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

This Actor reads only data Realtor.com shows to every visitor without a login, and it gives personal data only when you turn it on. Realtor.com's terms of use restrict automated collection; whether and how you use the data is your decision and responsibility.

#### Why does this Actor run with limited permissions?

It needs nothing beyond its own run storage (the dataset it writes and its own key-value store), so it runs with Apify's limited permissions: it cannot read or change anything else in your account.

### Use it through the API

```bash
curl -X POST "https://api.apify.com/v2/acts/automation_craft~realtor-com-agents-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"locations": ["78704"], "maxAgentsPerSearch": 50}'
```

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_TOKEN>' });
const run = await client.actor('automation_craft/realtor-com-agents-scraper').call({
    locations: ['Austin, TX'],
    maxAgentsPerSearch: 100,
    includeDetails: true,
    includePersonalData: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((x) => x.type === 'agent').map((x) => [x.name, x.office?.name, x.details?.phones]));
```

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_TOKEN>")
run = client.actor("automation_craft/realtor-com-agents-scraper").call(run_input={
    "agents": ["https://www.realtor.com/realestateagents/56a649a10fa417010073f11b"],
    "includeEmail": True,
    "includePersonalData": True,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    if item.get("type") == "agent":
        print(item.get("name"), item.get("email"), item.get("rating"))
```

### Changelog

- 0.1 (2026-10-30): first version.

### More data tools by Automation Craft

- [Realtor.com Scraper: Homes for Sale, Rent & Sold](https://apify.com/automation_craft/realtor-com-scraper)
- [Realtor.com Property Details Scraper by Address](https://apify.com/automation_craft/realtor-com-property-details-scraper)
- [Zillow Agents Scraper: Agent Leads, Sales, Reviews](https://apify.com/automation_craft/zillow-agents-scraper)
- [Zillow Scraper: Homes for Sale, Rent and Sold](https://apify.com/automation_craft/zillow-scraper)
- [Zillow Property Details Scraper: Price History](https://apify.com/automation_craft/zillow-property-details-scraper)
- [Bien'ici Scraper: France Real Estate Ads & DPE](https://apify.com/automation_craft/bienici-scraper)

# Actor input Schema

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

Where agents work, one per line: a city with its state ("Austin, TX", "Coeur d'Alene, ID" with its apostrophe), a 5 digit ZIP code ("78704", checked against Realtor.com's own place list) or a whole state ("TX" or "Texas": its cities, largest first). Realtor.com lists agents by city or ZIP code only, so a neighborhood or a county is refused with a free row naming it. Up to 1,000.

## `startUrls` (type: `array`):

Links copied from Realtor.com: an agent search such as https://www.realtor.com/realestateagents/austin_tx/intent-buy/lang-spanish/sort-ratings or https://www.realtor.com/realestateagents/78704, or an agent profile such as https://www.realtor.com/realestateagents/56a649a10fa417010073f11b. A search link keeps its own filters (buyer or seller, language, price, order, name, members, photo, rating, recommendations, designation); a setting you also give below replaces that one filter. A later page link (pg-2) and a part the Actor does not read are refused with a free row, never guessed. Up to 10,000.

## `agentName` (type: `string`):

Agents whose name has every word given (Realtor.com's own name search: each word matches the start of a word of the name). With places, the agents of that name in each place; alone, the agents of that name across the US. At least two letters.

## `listingAgentLocations` (type: `array`):

Places whose homes for sale (or sold, or for rent, below) are read, and every agent advertising one of those homes is delivered with its full profile and the number of those homes it advertises: a city with its state, a ZIP code, a county or a neighborhood ("Austin, TX", "78704", "Travis County, TX", "Mueller, Austin, TX"). Up to 200.

## `listingAgentStatuses` (type: `array`):

Which homes of the listing places are read for their agents. Default: for sale.

## `maxListingsScanned` (type: `integer`):

How many homes of each listing place are read for their agents, newest listings first. Default: 1,000; at most 10,000 (Realtor.com's limit for one search).

## `agents` (type: `array`):

Realtor.com agent profile links (https://www.realtor.com/realestateagents/<id> and the older <Name>*<City>*<ST>*<id>*<n> form), 24 character profile ids or numeric fulfillment ids, one per line. An id with no profile is a free row. Up to 10,000.

## `sort` (type: `string`):

The order agents are read and delivered in. Default: most relevant (a pasted link keeps its own order unless you choose one here). Past the first 10,000 agents of a search (see "Agents per search") the rest are read by name.

## `agentType` (type: `string`):

Realtor.com's own filter for agents who help buyers or sellers (it narrows little: most agents do both). It applies to agent searches, not to agents found on listings. Default: any (a pasted link keeps its own unless you choose one here).

## `languages` (type: `array`):

Agents who speak any of these languages, in English and lower case ("spanish", "chinese", "korean"). Each row is checked: an agent whose profile lists none of them is left out, free.

## `minPrice` (type: `integer`):

Agents whose listing price range reaches at least this price. Realtor.com leaves out every agent without a price range (about 85 percent of a city's agents) when a price is set.

## `maxPrice` (type: `integer`):

Agents whose listing price range starts at or below this price (the same note on agents without a price range).

## `realtorMembersOnly` (type: `boolean`):

Only agents Realtor.com marks as REALTOR members.

## `withPhotoOnly` (type: `boolean`):

Only agents whose profile has a photo.

## `minRating` (type: `number`):

Only agents rated at least this (0 to 5); agents with no rating are left out.

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

Only agents with at least this many reviews.

## `minRecommendations` (type: `integer`):

Only agents with at least this many recommendations.

## `minRecentSales` (type: `integer`):

Only agents with at least this many recently sold homes on their profile.

## `minListingsForSale` (type: `integer`):

Only agents with at least this many homes for sale now.

## `minYearsExperience` (type: `integer`):

Only agents in business at least this many years (from the first year on their profile).

## `maxYearsExperience` (type: `integer`):

Only agents in business at most this many years.

## `brokerageContains` (type: `string`):

Only agents whose office or brokerage name has every word given (whole words, case and accents aside), for example "keller williams".

## `requiredFields` (type: `array`):

Only agents whose profile has every field chosen. Photo, bio and licence number are read from the search; the others from the full profile (turn on Agent details), e-mail from the e-mail add-on. A field counts whether or not personal data is delivered.

## `specializations` (type: `array`):

Only agents who list any of these specializations on their profile (as Realtor.com writes them, for example "First time home buyers", "Luxury homes"; case aside). Needs Agent details.

## `designations` (type: `array`):

Only agents who hold any of these designations (for example "ABR", "CRS", "GRI"; case aside). Needs Agent details.

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

Stop after this many agents in all. Default and most: 200,000 a run (split a bigger job over several runs).

## `maxAgentsPerSearch` (type: `integer`):

The most agents delivered from one search (a place, a link, a name, a listing place; a whole state counts as one). Default: 100. Realtor.com answers at most 10,000 agents for one search: above that, a city is read on through every two letter name prefix (about 2.4 calls per 100 agents; 99.95 percent of Austin's 34,924 in a test), and its coverage row says how many of the stated count were reached.

## `countOnly` (type: `boolean`):

Reads only the first page of each search and delivers its agent count in the coverage row, no agent rows (only the run's start fee is charged). The count is Realtor.com's own: the place, name, order, agent type, languages and price narrow it; the other filters do not.

## `includeDetails` (type: `boolean`):

Adds each agent's full profile: office city and state (the street with personal data), office phones and website, licence state, MLS memberships, designations, specializations, Q and A, sales of the last 12 months and recent sales, and with personal data the agent's phones, website, social links and video. Charged as Agent details per agent that carries it.

## `includeEmail` (type: `boolean`):

Adds the agent's e-mail and NRDS id as Realtor.com shows them on the agent's own listings (54 of 60 agents in a test of three cities: every agent with listings of its own). Also the office's e-mail where those listings show one, at no extra charge. Needs "Include personal data". Charged once per agent with an e-mail; agents without one are free.

## `includeReviews` (type: `boolean`):

Adds the agent's reviews: rating and four sub ratings, comment, reviewer name, location and role, date, transaction date, the agent's reply. Charged per review delivered.

## `maxReviewsPerAgent` (type: `integer`):

The most reviews delivered per agent, newest first as Realtor.com lists them. Default: 50.

## `includeRecommendations` (type: `boolean`):

Adds the agent's recommendations (testimonials): comment, author, date, source. Charged per recommendation delivered.

## `maxRecommendationsPerAgent` (type: `integer`):

The most recommendations delivered per agent. Default: 50.

## `includeListings` (type: `boolean`):

Adds the agent's own listings (the homes it lists, as the seller's side): price, status, dates, address, beds, baths, size, type, photo, link, its side; with the totals per kind and the count by side. Charged per listing delivered.

## `listingTypes` (type: `array`):

Which of the agent's listings are delivered, newest first. Default: for sale and sold.

## `maxListingsPerAgent` (type: `integer`):

The most listings of each kind delivered per agent. Default: 50.

## `includePersonalData` (type: `boolean`):

Off by default. On, agent rows also carry the agent's name, profile id, fulfillment id, profile link, photo and licence number; with Agent details the agent's phones, website, social links, MLS agent ids and licences, the office's street address and the about video; with the e-mail add-on the agent's e-mail and NRDS id; with reviews the reviewer's photo, address and link where Realtor.com shows them; the brokerage id; office and brokerage names, office phones and websites that may be the agent's own (named after the agent, the agent's own number or site). Off, those fields are empty. You are responsible for a lawful use of personal data (GDPR, CAN-SPAM, TCPA and state laws included).

## `outputFormat` (type: `string`):

Nested by default.

## `omitEmptyFields` (type: `boolean`):

Rows leave out fields that are empty (null, empty text or lists).

## `saveCsv` (type: `boolean`):

Also saves the delivered agents as a CSV file (AGENTS.csv, in parts of 5 MB) in the run's key-value store. Free.

## `maxConcurrency` (type: `integer`):

Requests in flight at once (1 to 4). Default: 3.

## `proxyConfiguration` (type: `object`):

Apify Proxy is used by default (datacenter exits the Actor screens itself). You may give your own http:// proxy links instead.

## Actor input object example

```json
{
  "locations": [
    "Austin, TX"
  ],
  "maxAgentsPerSearch": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `items` (type: `string`):

No description

# 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": [
        "Austin, TX"
    ],
    "maxAgentsPerSearch": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation_craft/realtor-com-agents-scraper").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": ["Austin, TX"],
    "maxAgentsPerSearch": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("automation_craft/realtor-com-agents-scraper").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": [
    "Austin, TX"
  ],
  "maxAgentsPerSearch": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call automation_craft/realtor-com-agents-scraper --silent --output-dataset

```

## MCP server setup

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

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/lVAH9D4IsOhfjIsCa/builds/Vseqhmr937mJvnQRP/openapi.json
