# Realtor.com Scraper: Homes for Sale, Rent & Sold (`automation_craft/realtor-com-scraper`) Actor

Scrape Realtor.com homes for sale, for rent and sold by city, ZIP code, county, link or map area, no login, past 10,000 homes a search. Each home gives price, beds, baths, size, MLS number, office and value estimates; details add price and tax history, schools and flood risk. CSV, Excel, API.

- **URL**: https://apify.com/automation_craft/realtor-com-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.95 / 1,000 homes

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 Scraper: Homes for Sale, Rent & Sold

**Realtor.com scraper and API** for US homes for sale, for rent, recently sold, off market and new home plans: search any city, ZIP code, county, neighborhood or state, paste a Realtor.com search link, or look up homes by property id, link, address or MLS number. Every home comes with its price, status, beds, baths, size, lot, year built, address and coordinates, all photos, the MLS number, the listing office and broker, and Realtor.com's value estimates. Turn on Home details for the full record: price and sale history, tax history, schools, flood and climate risk, mortgage estimate, local market medians, and page views and saves.

No login, no cookies and no browser: the Actor reads Realtor.com's own data service, 200 homes a request, and reads on past the 10,000 homes the site lists for one search.

#### What you can do with it

- Pull every home for sale in a city or county into a sheet, with prices, MLS numbers and listing offices, for deal sourcing and lead lists.
- Build sold comps: recently sold homes by ZIP code with sold dates and sold prices (where the state discloses them).
- Track rents: rentals by city with rent ranges, pets policy and units of apartment communities.
- Enrich a list of addresses or property ids with the full Realtor.com record, schools, tax history and climate risk.
- Watch a market: a free market summary per search (median price, price per square foot, days on market, homes by type).

### How to use the Realtor.com Scraper

1. Open the Actor and type a place in **Places**, for example `Austin, TX`, `78704`, `Travis County, TX` or `Texas`, or paste a Realtor.com search link into **Realtor.com links**.
2. Pick the **Listing status** (for sale, for rent, recently sold, off market, new home plans) and any filters (price, beds, baths, home types, features, dates).
3. Set **Maximum homes** and, if you need the full record of each home, turn on **Home details**.
4. Click **Start**. Download the homes as JSON, CSV or Excel, or read them through the Apify API.

### What data you get

One row per home (`type: "home"`), plus one free coverage row per search (`type: "search"`, with the search's market summary: medians are exact up to 20,000 homes and read from an even sample of 20,000 beyond, which the row states), free status rows for anything not found or not read, and a free run summary. Fill rates are measured on 1,500 homes of Austin TX, Dayton OH, Miami FL, Garrett County MD and Phoenix AZ (test run of 2026-10-29; the agent fields on the research card's 600 rows of 2026-10-26).

| Field | What it holds | Fill |
|---|---|---|
| `propertyId`, `listingId`, `url` | Realtor.com's ids and the home's page | 100% |
| `status`, `isPending`, `isContingent`, `isNewConstruction`, `isForeclosure`, `isPriceReduced`, `isComingSoon` | listing status and flags | 100% |
| `price` (`priceMin`, `priceMax` for a rent range) | list price, or monthly rent | 99.9% |
| `pricePerSqft` | price per square foot | 88.6% |
| `beds`, `baths`, `bathsFull`, `bathsHalf` | rooms | 90.6% |
| `sqft`, `sqm` | living area | 88.9% |
| `lotSqft`, `lotAcres`, `lotSqm` | lot size | 60.5% |
| `yearBuilt`, `homeType`, `garage`, `stories` | the home | 74.0% (year), 100% (type) |
| `hoaFee` | HOA fee a month | 64.1% |
| `address`, `fullAddress`, `latitude`, `longitude`, `county`, `countyFips` | where it is | 99.7% (street), 97.0% (position), 100% (county) |
| `photos`, `primaryPhoto`, `photoCount` | every photo link | 99.5% |
| `listDate`, `daysOnRealtor`, `lastStatusChangeDate`, `pendingDate` | dates | 100% (list date) |
| `lastSoldPrice`, `lastSoldDate` | last sale | 48.9% |
| `estimate`, `estimateLow`, `estimateHigh`, `estimates` | Realtor.com's value estimates by source | 77.3% |
| `mls.sourceId`, `mls.listingId` | MLS code and MLS number | 100% |
| `office`, `broker`, `builder` | listing office (name, phones, link; its e-mail and id with `includePersonalData`), broker, builder | 75.2% (office), 57.7% (broker) |
| `features` | Realtor.com's feature tags (pool, garage, view, single story ...) | 99.8% |
| `openHouses` | open house times | 3.6% |
| `units`, `petPolicy` | rental units and pets | rentals |
| `agents`, `mlsAgents` | listing agent and co agent: name (99.5%), e-mail (77.5%), phones (76.7%), ids, licence | with `includePersonalData` |

**Home details** (the add-on, `details`): description (99.5%) and the source's feature groups (100%), price and sale history (99.8%), tax history and assessments (70.7%), nearby schools (97.0%) and assigned schools (96.9%) with ratings, flood factor and FEMA zones (93.3%), wildfire, heat, wind and air factors (93.4%), a mortgage estimate with its monthly breakdown, the county FHA loan limit and today's average rates (99.9%), value estimate history (75.7%) and forecast (69.6%), page views, clicks, saves, shares and leads over 1, 7, 14, 21 and 28 days (87.1%), the city, county and ZIP code market medians (list price, sold price, price per square foot, days on market; 99.9%), days on the MLS (26.5%), fees, parking, lease terms, pet policy, USDA eligibility, tagged photos, videos and rental units with photos.

#### Example row (shortened)

```json
{
  "type": "home",
  "id": "9241435802",
  "url": "https://www.realtor.com/realestateandhomes-detail/384-Leaning-Rock-Rdg_Austin_TX_78737_M92414-35802",
  "status": "forSale",
  "price": 989999,
  "pricePerSqft": 332,
  "beds": 4,
  "baths": 4,
  "sqft": 2980,
  "lotSqft": 10742,
  "lotAcres": 0.247,
  "yearBuilt": 2025,
  "homeType": "single_family",
  "fullAddress": "384 Leaning Rock Rdg, Austin, TX 78737",
  "county": "Hays",
  "mls": { "sourceId": "AUTX", "listingId": "8045029", "sourceType": "mls" },
  "office": { "name": "Christies Intl Real Estate Lone Star" },
  "estimate": 980000,
  "features": ["central_air", "community_swimming_pool", "single_story", "garage_3_or_more"],
  "detailsStatus": "not_requested"
}
```

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

You pay per home delivered (pay per event). Prices per 1,000 events:

| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
| Home | $0.99 | $0.99 | $0.97 | $0.95 |
| Home details (add-on, only when on) | $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.95 / 1,000" on the Home row means one home costs less than a tenth of a cent.

- 1,000 homes of a search cost $0.95 to $0.99 plus the $0.008 start fee; with Home details on, $1.95 to $2.39.
- A home is charged once per run, even when two of your searches find it.
- Free: homes outside your search or filters, repeats, places or homes not found, records Realtor.com did not answer, and every coverage, status and summary row. A run with no usable input charges only the start fee.
- Set a maximum cost per run in the Apify Console: the run stops at the first home it cannot pay and delivers no row unpaid.

### Input

| Setting | What it does |
|---|---|
| `locations` | Places as Realtor.com names them: `Austin, TX`, `78704`, `Travis County, TX`, `Mueller Acres, Austin, TX`, `Texas`. A place is searched only when exactly one Realtor.com place is that text; otherwise a free row lists the candidates. |
| `zipCodes` | Five digit ZIP codes. |
| `startUrls` | Realtor.com links: searches (`/realestateandhomes-search/...`, `/apartments/...`, sold with `/show-recently-sold`), homes (`..._M92414-35802`), new construction communities (`..._Q717000090054`) and app shortlinks (`apps.realtor.com/...`). A search link keeps its own status and filters; a link part the Actor does not read is a free row, never a guess. |
| `agentIds` | Realtor.com agent or office ids: the homes each one lists. |
| `agentNames`, `mlsAgentIds` | An agent's listings by the agent's name ("Stephanie Sauseda") or MLS agent id with its MLS code ("AUTX:806288"). |
| `mapAreas` | A circle `{ "latitude", "longitude", "radiusMiles" }` or a drawn polygon `{ "polygon": [[lon, lat], ...] }`. |
| `radiusMiles` | Search a circle around each place instead of the place (comparable homes nearby). |
| `propertyIds`, `addresses`, `mlsListingIds` | Look up single homes; each is read from its full record. |
| `listingStatus` | `forSale` (default), `forRent`, `sold`, `offMarket`, `newHomePlans`. |
| `pendingAndContingent` | For sale: include (default), exclude or only pending and contingent homes. |
| Filters | `minPrice`, `maxPrice`, `minBeds`, `maxBeds`, `minBaths`, `maxBaths`, `minSqft`, `maxSqft`, `minLotSqft`, `maxLotSqft`, `minYearBuilt`, `maxYearBuilt`, `maxHoaFee`, `noHoaFee`, `minGarage`, `homeTypes`, `features`, `keywords`, `listedWithinDays`, `priceReducedWithinDays`, `openHouseWithinDays`, `newConstruction`, `foreclosure`, `seniorCommunity`, `comingSoon`, `has3dTour`, `hasVirtualTour`, `catsAllowed`, `dogsAllowed`, `soldWithinDays`, `soldAfter`, `soldBefore`, `minSoldPrice`, `maxSoldPrice`. Read from each home because Realtor.com's search does not apply them: `moveInBy` (rentals with a unit available by a date; rentals that show no unit date are left out, free) and `street` (homes on one street; best with a ZIP code). |
| `sort` | Newest (default), oldest, price both ways, largest, lot, beds, baths, newest built, photos, open house, price reduced, recently updated, sold most recently, sold price both ways. |
| `maxItems`, `maxItemsPerSearch` | How many homes in all (default 1,000) and per search. |
| `splitPastCap` | On (default): a search larger than 10,000 homes is read on in price order until every home is met (when the caps reach past 10,000, only the first 200 homes come in your chosen order). |
| `startPage` | Start every search at this page of results (42 homes a page, as on the site). |
| `includeDetails` | The Home details add-on. |
| `includePersonalData` | Off by default (see below). |
| `maxPhotos`, `outputFields` | Fewer photos per home; keep only chosen fields. |
| `placeLookups` | Free: Realtor.com's own place suggestions for a text. |
| `proxyConfiguration` | Apify Proxy (default): the Actor draws and screens its own datacenter exits, so proxy groups and countries are refused; or your own http:// proxy links. |

Example input:

```json
{
  "locations": ["Austin, TX"],
  "listingStatus": "forSale",
  "minBeds": 3,
  "maxPrice": 600000,
  "maxItems": 500,
  "includeDetails": true
}
```

#### Personal data

Off by default. With `includePersonalData` on, rows also carry the listing agent's and co agent's name, e-mail, phones, ids and licence number, buyer's agents and the agent's profile link, and, for rentals posted through rental platforms (where the landlord can be a private person), the landlord's contact and the home's street and exact position. It also adds the listing office's e-mail (often an agent's own mailbox) and Realtor.com's advertiser ids of offices, brokers and builders (an office's id can be the agent's own) and the street, unit and position of homes suggested in place lookups and address candidates. With it off those fields are empty; the names, phones and links of listing offices, brokers and builders are businesses and always included. You are responsible for using personal data lawfully (GDPR, CAN-SPAM, TCPA and similar).

### What this Actor does not do

- No monitoring mode ("only new listings since the last run", change or price tracking). Schedule the Actor and compare the rows in your own sheet; every row carries its list date and status dates.
- No export into connected apps through MCP connectors; use Apify's integrations, webhooks or the API.
- No custom JavaScript run on your rows; use `outputFields` to keep the fields you need.
- No agent directory, agent profiles or agent reviews: rows carry the listing agent (with `includePersonalData`) and the listing office.
- No agent e-mails found on outside websites, and no permit history (Realtor.com's record has none).
- No other sites (Zillow, Redfin, Homes.com) in the same run.
- No mortgage calculator for any price and rate; each home's own mortgage estimate comes with Home details.
- No "relevant" or "best match" order: Realtor.com reshuffles that order on every request, so no search can be read in it without missing and repeating homes; every stable order is offered.
- Work that earns nothing has a limit: a long list of places or addresses Realtor.com does not know, or searches that find no home, stops on the unpaid work allowance and the rest is reported "not reached" on a free row (nothing is charged for it). Lists with real homes among them run on, since each home pays for the next lookups.
- A condo or apartment unit is often not findable by its street address: Realtor.com's suggestions often hold no unit, so the Actor also asks with the other unit designators and searches the building's line in its ZIP code. In tests of units the first ask missed, this found 4 of 8 in Austin and 1 of 8 in Miami (2026-10-29). A unit still not found gets a free row; look it up by its property id or link. Each such miss costs a few more requests, so about ten unfindable units in a row stop the run on the unpaid work allowance (the rest are reported "not reached", free).
- Sold prices are empty in states that do not disclose them (Texas and others); the sold price filters then return no home.
- A search started past its first page (`startPage`, a link's page) reads from that page only and is not reported complete.
- A rental without any rent cannot be reached past the 10,000 home window (9 of 14,347 Houston rentals); the search row then says it was not read in full.

### FAQ

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

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

Realtor.com offers no public listing API; its APIs are partner and syndication feeds. This Actor works like an API: send a JSON input through the Apify API and read the homes as JSON.

#### Does Realtor.com block scraping?

Realtor.com guards its web pages against bots. This Actor loads no web page and solves no challenge: it reads the same data service the site's own pages use, with no login, and it reads past the 10,000 homes the site lists for one search (all 17,370 homes for sale in Houston in one test run).

#### What kind of data can I get from Realtor.com?

Every home's price, status, rooms, size, lot, year built, address and coordinates, photos, MLS number, office and value estimates; with Home details also price and tax history, schools, flood and climate risk, the mortgage estimate, local market medians and page views and saves.

#### 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-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"locations": ["78704"], "listingStatus": "sold", "soldWithinDays": 90, "maxItems": 100}'
```

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_TOKEN>' });
const run = await client.actor('automation_craft/realtor-com-scraper').call({ locations: ['Austin, TX'], maxItems: 200 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((x) => x.type === 'home').length);
```

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_TOKEN>")
run = client.actor("automation_craft/realtor-com-scraper").call(run_input={"propertyIds": ["9241435802"], "includeDetails": True})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item.get("fullAddress"), item.get("price"))
```

### Changelog

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

### More data tools by Automation Craft

- [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)
- [SeLoger Scraper: Listings, Prices and Agencies](https://apify.com/automation_craft/seloger-scraper)
- [Immowelt Scraper: Rents, Prices and Energy Data](https://apify.com/automation_craft/immowelt-scraper)
- [Airbnb Scraper: Airbnb Data, Prices, Calendar](https://apify.com/automation_craft/airbnb-scraper)
- [Craigslist Scraper: Listings, Prices & Alerts](https://apify.com/automation_craft/craigslist-scraper)

# Changelog

This Actor's version history is a separate document: https://apify.com/automation_craft/realtor-com-scraper/changelog.md

# Actor input Schema

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

Places as Realtor.com names them, one per line, for example "Austin, TX", "78704", "Travis County, TX", "Mueller Acres, Austin, TX" or "Texas". A place is searched only when exactly one Realtor.com place is that text; otherwise a free row lists the matching places to pick from.

## `zipCodes` (type: `array`):

Five digit US ZIP codes, one per line, each searched on its own (for example 78704).

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

Links copied from Realtor.com: a search (https://www.realtor.com/realestateandhomes-search/Austin_TX/beds-3/price-300000-500000, /apartments/Austin_TX, a sold search with /show-recently-sold), a home (https://www.realtor.com/realestateandhomes-detail/...\_M92414-35802) or a new construction community (/community-detail/...\_Q717000090054). A search link keeps its own status and filters; a filter you also set below replaces only that filter of the link. A link part the Actor does not read is a free row naming the link, never a guess.

## `agentIds` (type: `array`):

Realtor.com agent or office ids (the number in the "office" or "agents" id of a row, or of an agent profile link), one per line: the homes each one lists, in the listing status chosen below.

## `agentNames` (type: `array`):

A listing agent's first and last name as Realtor.com writes it, one per line, for example "Stephanie Sauseda": the homes the agent lists or co-lists, in the status you choose. Realtor.com searches the name across the country, so agents who share it are all included; use "Agents by MLS id" for one agent. Each row is checked on its advertisers' names. With personal data off, the search row names the entry ("agent name 1"), not the agent.

## `mlsAgentIds` (type: `array`):

An agent's id in an MLS with the MLS code, "AUTX:806288" (the code is required: Realtor.com searches an agent id within its MLS), one per line: the homes that agent lists in that MLS. Each row is checked on its MLS agent ids.

## `mapAreas` (type: `array`):

Areas on the map as JSON objects: a circle { "latitude": 30.27, "longitude": -97.74, "radiusMiles": 3 } (0.1 to 50 miles) or a drawn area { "polygon": \[\[-97.76, 30.25], \[-97.72, 30.25], \[-97.72, 30.29], \[-97.76, 30.29]] } (longitude, latitude pairs, 3 to 200 points). Homes outside the area are left out free.

## `radiusMiles` (type: `number`):

Searches a circle of this radius around the centre of each place and ZIP code instead of the place itself (comparable homes nearby). 0.1 to 50 miles.

## `propertyIds` (type: `array`):

Realtor.com property ids (9241435802), the id as the site writes it in links (M92414-35802) or home links (https://www.realtor.com/realestateandhomes-detail/...\_M92414-35802), one per line. A home not on Realtor.com is a free row.

## `addresses` (type: `array`):

Full US street addresses with city and state, one per line, for example "384 Leaning Rock Rdg, Austin, TX 78737". A home is delivered only when exactly one Realtor.com home is that address (street, city, state and the ZIP code when given); otherwise a free row lists the nearest addresses.

## `mlsListingIds` (type: `array`):

MLS listing numbers, one per line, alone ("8045029") or with the MLS code ("AUTX:8045029"). A number that names homes in several MLSs is a free row listing them.

## `listingStatus` (type: `string`):

The listing status of every place, ZIP code, agent and map area search. Search links keep their own. Default: for sale.

## `pendingAndContingent` (type: `string`):

For sale searches: homes under contract (pending or contingent). Default: included, as on Realtor.com.

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

The order homes are read and delivered in. Default: newest listings (sold searches: sold most recently). When the caps reach past the 10,000 homes Realtor.com lists for one search, only the first 200 homes come in this order and the search is then read in price order, low to high, to its end (see "Read past 10,000 homes"); set "Read past 10,000 homes" off to keep this order for the first 10,000.

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

The lowest list price in US dollars; for rentals the monthly rent.

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

The highest list price in US dollars; for rentals the monthly rent.

## `minBeds` (type: `integer`):

At least this many bedrooms (0 for studios and up).

## `maxBeds` (type: `integer`):

At most this many bedrooms.

## `minBaths` (type: `number`):

At least this many bathrooms.

## `maxBaths` (type: `number`):

At most this many bathrooms.

## `homeTypes` (type: `array`):

Only these home types (all by default).

## `minSqft` (type: `integer`):

At least this living area in square feet.

## `maxSqft` (type: `integer`):

At most this living area in square feet.

## `minLotSqft` (type: `integer`):

At least this lot size in square feet (one acre is 43,560).

## `maxLotSqft` (type: `integer`):

At most this lot size in square feet.

## `minYearBuilt` (type: `integer`):

Year built at least this year.

## `maxYearBuilt` (type: `integer`):

Year built at most this year.

## `maxHoaFee` (type: `integer`):

Homes whose HOA fee is at most this (homes Realtor.com shows no HOA fee for are included, as on the site).

## `noHoaFee` (type: `boolean`):

Only homes with no HOA fee.

## `minGarage` (type: `integer`):

At least this many garage spaces.

## `features` (type: `array`):

Only homes Realtor.com tags with every one of these features, for example swimming_pool, waterfront, single_story, garage_2_or_more, central_air, basement, view, fixer_upper (the names Realtor.com gives each home in "features").

## `keywords` (type: `array`):

Words or phrases Realtor.com searches in the listing text, for example "pool" or "in-law suite" (1 to 10). The search row does not carry the listing text, so this filter is applied by Realtor.com only.

## `street` (type: `string`):

Only homes on this street, for example "S Congress Ave" (that direction only) or "Congress" (any direction and street type); the words are a street name, so the same name with one more type after it is taken too ("Oak Hill" takes "Oak Hill Dr"). Read from each home's own address, since Realtor.com's search does not filter by street. Use it with a ZIP code or a small place: a large city is read in full to find one street, and work that finds nothing stops on the unpaid work allowance.

## `listedWithinDays` (type: `integer`):

For sale, rentals and new home plans: listed on Realtor.com within this many days.

## `priceReducedWithinDays` (type: `integer`):

For sale homes whose price was cut within this many days (applied by Realtor.com).

## `openHouseWithinDays` (type: `integer`):

For sale homes with an open house from today to this many days ahead (0 for today).

## `newConstruction` (type: `string`):

For sale and sold searches: new construction homes only, or left out. Default: any.

## `foreclosure` (type: `string`):

For sale and sold searches: foreclosures only, or left out. Default: any.

## `seniorCommunity` (type: `string`):

For sale and new home plan searches: homes in 55+ communities only, or left out. Default: any.

## `comingSoon` (type: `string`):

For sale searches: homes marked coming soon only, or left out. Default: any.

## `has3dTour` (type: `boolean`):

For sale and rentals: only homes with a 3D (Matterport) tour.

## `hasVirtualTour` (type: `boolean`):

For sale and rentals: only homes with any virtual tour (applied by Realtor.com).

## `moveInBy` (type: `string`):

Rentals with a unit available on or before this date (units available now included), read from each rental's own unit dates, since Realtor.com's search does not apply it. A rental that shows no unit date (most single homes for rent) is left out, free, and counted on the search row.

## `catsAllowed` (type: `boolean`):

Rentals that allow cats.

## `dogsAllowed` (type: `boolean`):

Rentals that allow dogs.

## `soldWithinDays` (type: `integer`):

Recently sold searches: sold within this many days.

## `soldAfter` (type: `string`):

Recently sold searches: sold on or after this date, for example 2026-01-01.

## `soldBefore` (type: `string`):

Recently sold searches: sold on or before this date.

## `minSoldPrice` (type: `integer`):

Recently sold searches: sold for at least this. States that do not disclose sale prices (Texas and others) return no home for this filter.

## `maxSoldPrice` (type: `integer`):

Recently sold searches: sold for at most this.

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

Stop after this many homes in all. Status, coverage and summary rows are free and not counted. Default: 1,000.

## `maxItemsPerSearch` (type: `integer`):

Stop each search after this many homes.

## `splitPastCap` (type: `boolean`):

Realtor.com lists at most 10,000 homes for one search. On (the default), a larger search is read on in price order, band after band, until every home is met; the search row says whether the search was read in full.

## `startPage` (type: `integer`):

Start every search at this page of Realtor.com's results (42 homes a page, as on the site), and read on from there within the 10,000 home window.

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

Adds each home's full record, charged as a Home details event on top of the Home: description, feature lists, price and sale history, tax history and assessments, nearby and assigned schools with ratings, flood, wildfire, heat, wind and air risk, a mortgage estimate, home value estimates with their history and forecast, page views, saves and shares over 1 to 28 days, fees, parking, lease terms and tagged photos. Charged only when the record was read.

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

Off by default. On, rows also carry the listing agent's and co agent's name, e-mail, phones, agent ids and licence number, buyer's agents, the agent's profile link, for rentals posted through rental platforms the landlord's contact and the home's street and exact position, the listing office's e-mail (often an agent's own mailbox) and Realtor.com's advertiser ids. You are responsible for using personal data lawfully (GDPR, CAN-SPAM, TCPA and similar). The names, phones and links of brokerages, offices and builders are always delivered.

## `maxPhotos` (type: `integer`):

At most this many photo links in each photo list of a home (the row's photos, the tagged photos and each unit's photos of Home details; 0 for none, the main photo too). Default: all photos.

## `outputFields` (type: `array`):

Keep only these fields of each home row (names as in the output, dots for nested fields, for example "price", "address.city", "details.priceHistory"). The row type, id, search and details status are always kept. Empty: every field.

## `placeLookups` (type: `array`):

Texts to look up, one per line (at most 50): each gives one free row with up to 10 places Realtor.com suggests (city, ZIP code, county, neighborhood, school, street or address, with its id and centre).

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

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

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

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

## Actor input object example

```json
{
  "locations": [
    "Austin, TX"
  ],
  "listingStatus": "forSale",
  "maxItems": 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"
    ],
    "listingStatus": "forSale",
    "maxItems": 20,
    "includeDetails": false,
    "includePersonalData": false,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation_craft/realtor-com-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"],
    "listingStatus": "forSale",
    "maxItems": 20,
    "includeDetails": False,
    "includePersonalData": False,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("automation_craft/realtor-com-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"
  ],
  "listingStatus": "forSale",
  "maxItems": 20,
  "includeDetails": false,
  "includePersonalData": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call automation_craft/realtor-com-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-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/GoHOAjJehQx3SfEqS/builds/WWf1oBcm5Ky62UfeS/openapi.json
