# Realtor.com Agent Directory Scraper (`parseforge/realtor-agent-directory-scraper`) Actor

Scrape agent profiles from the realtor.com directory: photo, phone, brokerage, licence, ratings and sales stats. Export to CSV, Excel, JSON or XML.

- **URL**: https://apify.com/parseforge/realtor-agent-directory-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (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 $3.61 / 1,000 results

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 🏡 Realtor.com Agent Directory Scraper

> 🚀 **Export a whole metro of real estate agents in seconds.** 42 fields per agent, 300 profiles per API call, 92,074 agents matching a single Miami search and 37,814 matching Austin.

This Actor reads the public realtor.com agent directory and turns it into a flat table. Give it a city, a ZIP code or a directory URL, and every matching agent comes back with a headshot, a phone number, the brokerage and office, the state licence number, years of experience, the star rating and review count, live and sold listing counts, the listing price band, the service areas they cover, the languages they speak and their published biography.

Coverage is national. The directory answers with `matching_rows` for every search, so you always know how deep the pool is before you pay for it: 37,814 agents in Austin TX, 92,074 in Miami FL, 3,420 in ZIP 78701. Paging runs 300 agents per call and offsets tested cleanly past 37,000, so a full metro export is a matter of minutes, not hours.

| 🎯 Target Audience | 💡 Primary Use Cases |
| --- | --- |
| Real estate brokerages and recruiters | Build a ranked recruiting list of producing agents in a target metro |
| PropTech and mortgage lead-gen teams | Source agent contacts with licence numbers and live listing volume |
| Title, escrow and home-services vendors | Find the agents who actually close deals in your service area |
| Market analysts and researchers | Measure agent density, experience curves and price bands by city |
| CRM and outbound sales teams | Keep a territory roster fresh with phone numbers and brokerage moves |

### 📋 What the Realtor.com Agent Directory Scraper does

1. Resolves whatever you type ("Austin, TX", "Brooklyn, NY", "90210") through the directory's own location lookup, so you never have to guess a URL slug.
2. Pages the directory search 300 agents at a time and reports the true total match count.
3. Enriches every agent with their full public profile: phones, licence, MLS record, service areas, languages, specializations, services offered and social links.
4. Applies the directory's own filters: sort order, buyer or seller representation, language spoken and listing price range.
5. Emits one flat row per agent, ready for CSV, Excel, JSON or XML.

> 💡 **Why it matters:** the realtor.com directory is the single largest public roster of licensed US agents with verified brokerage affiliation and MLS licence numbers. Most agent lists sold to brokerages are stale scrapes of Google Maps. This one carries the licence number and the sold count, which is what tells a recruiter whether an agent is actually producing.

### 🎬 Full Demo (🚧 Coming soon)

A walkthrough video is on the way.

### 📊 Output

| Field | Type | Description |
| --- | --- | --- |
| 🖼 `imageUrl` | string | Agent headshot hosted on realtor.com's image CDN |
| 👤 `fullName` | string | Agent display name as published |
| 🔗 `profileUrl` | string | Canonical realtor.com profile URL |
| 🆔 `agentId` | string | Stable 24 character profile ID |
| 🧾 `fulfillmentId` | string | Advertiser fulfillment ID used across realtor.com systems |
| 🏅 `isRealtor` | string | `Yes` when the agent is a National Association of REALTORS member |
| 📣 `isAdvertiser` | string | `Yes` when the agent pays for directory placement |
| 🤝 `worksWith` | string | `Buyers`, `Sellers` or `Buyers and sellers` |
| 🏢 `brokerageName` | string | Brokerage the agent hangs their licence with |
| 🏬 `officeName` | string | Local office name |
| 📞 `phone` | string | Primary published phone number |
| ☎️ `officePhone` | string | Office switchboard number |
| 🌐 `website` | string | Agent, brokerage or office website |
| 📜 `licenseNumber` | string | State licence number, falling back to the primary MLS licence |
| 🗺 `licenseState` | string | State that issued the licence |
| 📆 `firstYear` | string | First year in real estate |
| ⏳ `yearsOfExperience` | integer | Years since `firstYear` |
| 🧭 `experienceLabel` | string | Experience as realtor.com words it, to the month |
| ⭐ `ratingAverage` | number | Average consumer star rating |
| 💬 `reviewsCount` | integer | Published review count |
| 👍 `recommendationsCount` | integer | Published recommendation count |
| 🏷 `forSaleListings` | integer | Active listings right now |
| 🔑 `recentlySoldTotal` | integer | Total recorded sales |
| 📈 `recentlySoldLast12Months` | integer | Sales in the trailing twelve months |
| 🗓 `lastListingDate` | string | Date of the most recent new listing |
| 🗓 `lastSoldDate` | string | Date of the most recent closing |
| 💵 `listingPriceMin` | number | Bottom of the agent's price band, USD |
| 💰 `listingPriceMax` | number | Top of the agent's price band, USD |
| 🏠 `officeAddress` | string | Office street address |
| 🌆 `officeCity` | string | Office city |
| 🇺🇸 `officeState` | string | Office state code |
| 📮 `officePostalCode` | string | Office ZIP code |
| 📍 `searchLocation` | string | The search that produced the row |
| 📝 `bio` | string | Published biography |
| 🗣 `languages` | array | Languages the agent lists |
| 🎯 `specializations` | array | Self declared specializations |
| 🧭 `serviceAreas` | array | Cities the agent serves, with state code |
| 🛒 `buyerServices` | array | Services offered to buyers |
| 📤 `sellerServices` | array | Services offered to sellers |
| 📱 `socialLinks` | array | Facebook, Instagram, LinkedIn, X and YouTube links |
| 🕒 `scrapedAt` | string | ISO 8601 timestamp of the extraction |
| ❌ `error` | string | Populated only on a failed row |

Three real records from a live run:

```json
[
  {
    "imageUrl": "https://ap.rdcpix.com/381d8d485c470eec782153bae8c65638a-e1892575529rd-w144_h144.jpg",
    "fullName": "Michael Friedman",
    "profileUrl": "https://www.realtor.com/realestateagents/5680cfa3bb954c010069165a",
    "agentId": "5680cfa3bb954c010069165a",
    "fulfillmentId": "1631810",
    "isRealtor": "Yes",
    "isAdvertiser": "No",
    "worksWith": "Buyers and sellers",
    "brokerageName": "1848TX Realty",
    "officeName": "1848TXRealty",
    "phone": "(512) 948-5890",
    "officePhone": "(512) 948-5890",
    "website": "http://www.1848txrealty.com/",
    "licenseNumber": "0623356",
    "licenseState": "TX",
    "firstYear": "2012",
    "yearsOfExperience": 14,
    "experienceLabel": "13 years 10 months of experience",
    "ratingAverage": 5,
    "reviewsCount": 238,
    "recommendationsCount": 0,
    "forSaleListings": 7,
    "recentlySoldTotal": 35,
    "recentlySoldLast12Months": 17,
    "lastListingDate": "2026-07-22T21:56:35Z",
    "lastSoldDate": "2026-09-04",
    "listingPriceMin": 45000,
    "listingPriceMax": 625000,
    "officeAddress": "104 CANYON OAK LOOP",
    "officeCity": "GEORGETOWN",
    "officeState": "TX",
    "officePostalCode": "78633",
    "searchLocation": "Austin, TX",
    "bio": "Unlocking Your Dream Home Journey!\nAs a dedicated Full-Time REALTOR, I thrive on building genuine connections with my clients to truly grasp their desires and requirements. \nMy approach is rooted in understanding, never in pushing towards a particular area or price point. Navigating the complexities of our dynamic and competitive market is my forte.\nWhether you're buying or selling, rest assured, I've got you covered with a wealth of experience and knowledge.\nCommunication is key, and I make it my priority to keep you informed every step of the way. Your comfort and confidence in the process matter most to me.\nLet's embark on this exciting journey together and exceed your expectations. Your dream home awaits!",
    "languages": [],
    "specializations": [
      "First Time Home Buyers",
      "Relocation Assistance",
      "Military Move",
      "Negotiation Specialist",
      "Neighborhood Specialist",
      "Buyer's agent",
      "Seller's agent"
    ],
    "serviceAreas": [
      "Austin, TX",
      "Cedar Park, TX",
      "Georgetown, TX",
      "Hutto, TX",
      "Jarrell, TX",
      "Liberty Hill, TX",
      "Pflugerville, TX",
      "Round Rock, TX"
    ],
    "buyerServices": [],
    "sellerServices": [],
    "socialLinks": [
      "https://www.facebook.com/pages/Realtor/375070389327576",
      "https://twitter.com/4friedman"
    ],
    "scrapedAt": "2026-09-08T15:50:29.866Z",
    "error": null
  },
  {
    "imageUrl": "N/A",
    "fullName": "Cassandra Rosales",
    "profileUrl": "https://www.realtor.com/realestateagents/627da8100ae46dcbceace52b",
    "agentId": "627da8100ae46dcbceace52b",
    "fulfillmentId": "4851291",
    "isRealtor": "Yes",
    "isAdvertiser": "No",
    "worksWith": "Not Disclosed",
    "brokerageName": "Not Disclosed",
    "officeName": "Exp Realty Llc",
    "phone": "(469) 441-6911",
    "officePhone": "(888) 519-7431",
    "website": "http://exprealty.com/",
    "licenseNumber": "0783541",
    "licenseState": "TX",
    "firstYear": "2004",
    "yearsOfExperience": 22,
    "experienceLabel": "21 years 11 months of experience",
    "ratingAverage": 5,
    "reviewsCount": 207,
    "recommendationsCount": 0,
    "forSaleListings": 9,
    "recentlySoldTotal": 131,
    "recentlySoldLast12Months": 71,
    "lastListingDate": "2026-08-15T03:02:10Z",
    "lastSoldDate": "2026-08-25",
    "listingPriceMin": 139500,
    "listingPriceMax": 560000,
    "officeAddress": "9600 GREAT HILLS TRL # STE150 W",
    "officeCity": "AUSTIN",
    "officeState": "TX",
    "officePostalCode": "78759",
    "searchLocation": "Austin, TX",
    "bio": "Not Disclosed",
    "languages": [],
    "specializations": [],
    "serviceAreas": [],
    "buyerServices": [],
    "sellerServices": [],
    "socialLinks": [],
    "scrapedAt": "2026-09-08T15:50:29.866Z",
    "error": null
  },
  {
    "imageUrl": "https://ap.rdcpix.com/164029981/2d8a488d94c864c65a30e6c4b11de5c0a-c0rd-w144_h144.jpg",
    "fullName": "Rudy Saenz, PSA",
    "profileUrl": "https://www.realtor.com/realestateagents/56a83f9089a68901006be9cb",
    "agentId": "56a83f9089a68901006be9cb",
    "fulfillmentId": "1848081",
    "isRealtor": "Yes",
    "isAdvertiser": "No",
    "worksWith": "Buyers and sellers",
    "brokerageName": "EXP Realty",
    "officeName": "eXp Realty, LLC",
    "phone": "(210) 606-3851",
    "officePhone": "(888) 519-7431",
    "website": "http://realestateandracing.com/",
    "licenseNumber": "Not Disclosed",
    "licenseState": "N/A",
    "firstYear": "2013",
    "yearsOfExperience": 13,
    "experienceLabel": "13 years 8 months of experience",
    "ratingAverage": 5,
    "reviewsCount": 143,
    "recommendationsCount": 0,
    "forSaleListings": 4,
    "recentlySoldTotal": 20,
    "recentlySoldLast12Months": 12,
    "lastListingDate": "2026-08-20T21:32:58Z",
    "lastSoldDate": "2026-08-31",
    "listingPriceMin": 259900,
    "listingPriceMax": 1090000,
    "officeAddress": "9600 Great Hills Trail",
    "officeCity": "Austin",
    "officeState": "TX",
    "officePostalCode": "78759",
    "searchLocation": "Austin, TX",
    "bio": "Rudy Saenz personifies the blend of commitment to his clients and business acumen. Motivated by a passion to champion for his real estate buyers and sellers, Saenz possesses a deep sense of service and the desire to make an enduring impact on the world.\n\nA native of San Antonio, Rudy’s first career was in the automotive performance industry - working on top show cars, swamp boats, gyro- copters, small planes, speed boats, yachts, street performance cars and quarter mile drag race applications. In 2011, Saenz and his team won two championships and set records in the 10.5 Outlaw tire class. Rudy subsequently shifted his career to sales, and was ranked in the Top 4% in the nation of certified automotive salespersons.\n\nShaped by an intuitive  knowledge  of strategy and the exhilaration of the competition of racing, Rudy has catapulted to the top of the real estate industry as an expert negotiator on behalf of his clients as exemplified by his achievement of  Rookie of the Year for Better Homes and Gardens.\nRudy’s plan is simple, “I succeed by simply treating every client as if I were purchasing the home for myself!”",
    "languages": [],
    "specializations": [
      "1st Time Buyers",
      "Investments",
      "Buyers Agent",
      "Listing Agent",
      "Buyer's agent",
      "Seller's agent"
    ],
    "serviceAreas": [
      "Aransas Pass, TX",
      "Atascosa, TX",
      "Austin, TX",
      "Bandera, TX",
      "Bergheim, TX",
      "Blanco, TX",
      "Boerne, TX",
      "Bulverde, TX",
      "Canyon Lake, TX",
      "Castroville, TX",
      "Center Point, TX",
      "Cibolo, TX",
      "Comfort, TX",
      "Concan, TX",
      "Converse, TX",
      "Corpus Christi, TX",
      "D'Hanis, TX",
      "Dale, TX",
      "Dallas, TX",
      "Devine, TX",
      "Dripping Springs, TX",
      "Fentress, TX",
      "Fischer, TX",
      "Fredericksburg, TX",
      "Gregory, TX",
      "Harwood, TX",
      "Helotes, TX",
      "Hondo, TX",
      "Hunt, TX",
      "Ingleside, TX",
      "Ingram, TX",
      "JBSA Ft Sam Houston, TX",
      "JBSA Randolph, TX",
      "Johnson City, TX",
      "Kendalia, TX",
      "Kerrville, TX",
      "Kingsbury, TX",
      "Kingsville, TX",
      "Knippa, TX",
      "Kyle, TX",
      "LaCoste, TX",
      "Lockhart, TX",
      "Luling, TX",
      "Lytle, TX",
      "Marion, TX",
      "Martindale, TX",
      "Maxwell, TX",
      "McQueeney, TX",
      "Medina, TX",
      "Moore, TX",
      "Natalia, TX",
      "New Braunfels, TX",
      "Odem, TX",
      "Portland, TX",
      "Poteet, TX",
      "Prairie Lea, TX",
      "Sabinal, TX",
      "San Antonio, TX",
      "San Marcos, TX",
      "Schertz, TX",
      "Somerset, TX",
      "Spring Branch, TX",
      "Staples, TX",
      "Taft, TX",
      "Universal City, TX",
      "Uvalde, TX",
      "Von Ormy, TX",
      "Willow City, TX",
      "Wimberley, TX",
      "Yancey, TX"
    ],
    "buyerServices": [],
    "sellerServices": [],
    "socialLinks": [
      "https://www.facebook.com/realestateandracinggroup",
      "https://www.instagram.com/eal_estate_and_racing_group",
      "https://www.linkedin.com/in/real-estate-and-racing-group/",
      "https://twitter.com/CrownClosings",
      "https://www.youtube.com/@realestateandracinggroup"
    ],
    "scrapedAt": "2026-09-08T15:50:29.866Z",
    "error": null
  }
]
```

### ✨ Why choose this Actor

- **42 fields per agent, not five.** Headshot, phone, licence, MLS status, sold counts, price band, service areas, languages, specializations, services and social links in one row.
- **The licence number is in the row.** Most agent scrapers stop at name and phone. The state licence and the primary MLS licence let you verify an agent before you call them.
- **Production signal, not vanity metrics.** `recentlySoldLast12Months` separates the agents who close from the agents who list.
- **Honest match counts.** Every search reports `matching_rows`, so you know the size of the pool before you export it.
- **No proxy needed.** The Actor talks to the directory's own JSON endpoint. The proxy input exists and defaults to off, which keeps runs fast and cheap.
- **Location input that just works.** Type a city, a ZIP or paste a directory URL. The Actor resolves the slug through realtor.com's own lookup.
- **Filters that are real.** Every filter exposed here was tested against the live endpoint and provably changes the result count.

### 📈 How it compares to alternatives

| | This Actor | Typical realtor.com agent scraper | Google Maps agent scrapers |
| --- | --- | --- | --- |
| Fields per agent | 42 | 8 to 15 | 6 to 10 |
| State licence number | Yes | Rarely | No |
| Sold count, trailing 12 months | Yes | Rarely | No |
| Listing price band | Yes | No | No |
| Service areas by city | Yes | No | No |
| Languages spoken | Yes | No | No |
| Email address | No, the directory does not publish it | Sometimes, from third party enrichment | Sometimes |
| Proxy required | No | Usually residential | Usually |
| Reports the true match count | Yes | No | No |

Stated plainly: the public realtor.com profile carries no email address and no ZIP list. `serviceAreas` holds city names with a state code, not ZIP codes, and there is no email column, because inventing one would mean guessing. Everything else in the table is read straight from the source.

### 🚀 How to use

1. Create a free Apify account. New accounts get $5 in free credit: [sign up here](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the Actor and set **Location** to the city or ZIP you care about, for example `Austin, TX` or `90210`. Paste realtor.com directory URLs into **Directory or profile URLs** instead if you already have them.
3. Set **Max Items** to the number of agent profiles you want.
4. Optionally narrow with **Sort by**, **Agent works with**, **Languages spoken** and the listing price range.
5. Click **Start**, then download the dataset as CSV, Excel, JSON or XML, or pull it from the API.

### 💼 Business use cases

#### Brokerage recruiting

Pull every agent in your metro sorted by **Most sales**, then filter the export on `recentlySoldLast12Months` and `yearsOfExperience`. You get a ranked shortlist of producing agents with the phone number and the brokerage they are currently at, which is the entire top of a recruiting funnel in one file.

#### Mortgage and title lead generation

Loan officers and title reps sell to agents who close. Export a ZIP code, sort by sales, and work down the list. `licenseNumber` and `licenseState` let compliance verify the agent before the first call, and `officeAddress` gives the field rep a route to drive.

#### Vendor and service territory planning

Photographers, stagers, inspectors and home warranty companies need to know where the volume is. Export several cities, then group by `officeCity` and sum `forSaleListings` to see which submarkets carry enough active inventory to justify a rep.

#### Competitive and market research

`listingPriceMin` and `listingPriceMax` describe the price band each agent actually works in. Aggregate them across a city to map which brokerages own the luxury tier and which own the entry tier, then track how the mix shifts quarter over quarter.

### 🔌 Automating Realtor.com Agent Directory Scraper

Schedule the Actor daily or weekly in the Apify console, then move results wherever your team lives:

- **Make and Zapier**: trigger on a finished run and push new agents into HubSpot, Pipedrive or Salesforce.
- **Slack**: post a digest of newly listed agents in your territory each Monday morning.
- **Airbyte**: sync the dataset into Snowflake, BigQuery or Postgres for joins against your own CRM.
- **GitHub Actions**: call the Actor from a workflow and commit the CSV to a data repo.
- **Google Drive and Sheets**: write each run to a spreadsheet your sales team already opens.

### 🌟 Beyond business use cases

- **Research**: study how agent density, experience and price bands vary across US metros using a consistent public roster.
- **Personal**: shortlist agents near you by rating, sales volume and the language you prefer to do business in before you pick up the phone.
- **Non-profit**: housing advocacy groups can map professional coverage in underserved ZIP codes.
- **Experimentation**: the directory reports a true match count for every filter combination, which makes it a clean dataset for practising sampling and stratification.

### 🤖 Ask an AI assistant about this scraper

Paste this into ChatGPT, Claude or Gemini:

> I am using the ParseForge Realtor.com Agent Directory Scraper on Apify. It returns one row per agent with fields including fullName, brokerageName, phone, licenseNumber, licenseState, yearsOfExperience, ratingAverage, reviewsCount, forSaleListings, recentlySoldLast12Months, listingPriceMin, listingPriceMax, serviceAreas, languages and specializations. Help me design a scoring model that ranks agents for a brokerage recruiting campaign.

### ❓ Frequently Asked Questions

**❓ Do I need a proxy?**
No. The Actor uses the directory's own JSON endpoint, which answers plain HTTP requests. The proxy input is there and defaults to off. Turn it on only for very large runs or if your own network is rate limited.

**❓ Does the output include email addresses?**
No. The public realtor.com agent profile does not publish an email address, so there is no email column. Any scraper that shows one for this source is enriching from somewhere else.

**❓ Does `serviceAreas` contain ZIP codes?**
No. The source publishes served areas as city plus state code, so that is what the column holds. Office ZIP is available separately as `officePostalCode`.

**❓ How many agents can I export from one search?**
As many as the search matches. Austin TX returns 37,814 and Miami FL returns 92,074. The Actor pages 300 at a time and offsets were tested past 37,000 with no degradation.

**❓ What URL formats are accepted?**
Anything under `realtor.com/realestateagents/`. City slugs (`/austin_tx`), ZIP codes (`/78701`), page segments (`/pg-3`), sort segments (`/sort-ratings`), language (`/lang-spanish`), price (`/price-500000_1000000`), name (`/agentname-john-smith`) and individual profile URLs are all read and applied.

**❓ Can I search by agent name?**
Yes. Fill **Agent name contains** or paste a URL with an `agentname-` segment. It combines with the location filter.

**❓ How current is the data?**
It is read live on every run. `lastListingDate` and `lastSoldDate` come straight from the agent's activity record, so you can see how fresh each agent's pipeline is.

**❓ Why is `licenseNumber` sometimes different from the number on the state site?**
The Actor prefers the licence realtor.com publishes on the profile, and falls back to the primary MLS licence when the profile field is blank. Some agents carry several MLS memberships with slightly different formatting of the same number.

**❓ What happens when a field is missing?**
The row carries a sentinel instead of a null: `Not Disclosed` when the source withholds the value and `N/A` when it does not apply. Arrays come back as `[]`. Only the `error` column is ever null.

**❓ Can I filter to REALTOR members only?**
Not as an input, because the directory's realtor-only filter takes an undocumented object shape. Every row carries `isRealtor`, so filter the export on that column instead.

**❓ Do free accounts work?**
Yes. Free plans are capped at 10 items per run, which is enough to inspect the schema. Paid plans go to 1,000,000.

**❓ Is this affiliated with Realtor.com?**
No. See the disclaimer at the bottom.

### 🔌 Integrate with any app

Every run writes to an Apify dataset, reachable from the REST API, the JavaScript and Python clients, and the Apify integrations catalogue. Export as CSV, Excel, JSON, XML, RSS or HTML table, or stream it into your warehouse.

### 🔗 Recommended Actors

- [Realtor.com Scraper](https://apify.com/parseforge/realtor-com-scraper?fpr=vmoqkp)
- [Zillow Scraper](https://apify.com/parseforge/zillow-scraper?fpr=vmoqkp)
- [Redfin Property Listings Scraper](https://apify.com/parseforge/redfin-property-listings-scraper?fpr=vmoqkp)
- [California DRE Real Estate Scraper](https://apify.com/parseforge/california-dre-real-estate-scraper?fpr=vmoqkp)
- [Apartments.com Scraper](https://apify.com/parseforge/apartments-com-scraper?fpr=vmoqkp)

***

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA) with your run ID, your input and what you expected.

> **⚠️ Disclaimer:** This is an independent tool. It is not affiliated with, endorsed by or sponsored by Realtor.com, Move Sales Inc. or the National Association of REALTORS. It collects only publicly available professional listing data from the public agent directory. You are responsible for using the exported data in line with applicable law and the source's terms.

# Actor input Schema

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

Optional realtor.com agent directory URLs, for example https://www.realtor.com/realestateagents/austin\_tx or https://www.realtor.com/realestateagents/austin\_tx/sort-ratings/pg-2. Individual agent profile URLs work too. Filter segments in the URL (sort-, lang-, price-, agentname-, intent-, pg-) are read and applied. Leave empty to use the Locations field below.

## `searchTerms` (type: `array`):

Cities with a state, or 5 digit ZIP codes. Examples: "Austin, TX", "Brooklyn, NY", "90210". Each one is resolved through the realtor.com location lookup, so plain city names work. Ignored when Directory or profile URLs are given.

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

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

Optional full text search on the agent name, for example "Smith". Combines with the location.

## `sortBy` (type: `string`):

Ordering used by the realtor.com directory itself. A URL that carries a sort- segment overrides this.

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

Keep only agents that represent buyers or only agents that represent sellers.

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

Keep only agents who list one of these languages. Values come from the realtor.com language list.

## `priceMin` (type: `integer`):

Keep only agents whose listing price range reaches this figure. Leave empty for no floor.

## `priceMax` (type: `integer`):

Keep only agents whose listing price range stays under this figure. Leave empty for no ceiling.

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

The realtor.com directory API answers plain HTTP requests, so the proxy is off by default. Switch it on for very large runs or if your network is rate limited.

## Actor input object example

```json
{
  "startUrls": [],
  "searchTerms": [
    "Austin, TX"
  ],
  "maxItems": 10,
  "sortBy": "relevantagents",
  "agentType": "any",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Key fields: photo, agent, profile URL, brokerage, phone, licence, rating and sales

## `fullData` (type: `string`):

Complete dataset with all 42 fields, including bio, languages, specializations and service areas

# 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 = {
    "startUrls": [],
    "searchTerms": [
        "Austin, TX"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/realtor-agent-directory-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 = {
    "startUrls": [],
    "searchTerms": ["Austin, TX"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/realtor-agent-directory-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 '{
  "startUrls": [],
  "searchTerms": [
    "Austin, TX"
  ],
  "maxItems": 10
}' |
apify call parseforge/realtor-agent-directory-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/realtor-agent-directory-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/p45nffQNHgTOSAfNu/builds/aXJf47iGCwYNdVA7j/openapi.json
