# Realtor.com Property Details Scraper by Address (`automation_craft/realtor-com-property-details-scraper`) Actor

Get the full Realtor.com record of any US home by property id, home link, street address or MLS number, or of every home a search finds. Price and sale history, tax history, schools, value estimates, climate risk, mortgage, floor plans, local market. JSON, CSV or Excel, pay per property.

- **URL**: https://apify.com/automation_craft/realtor-com-property-details-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 properties

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 Property Details Scraper by Address

**Realtor.com property details scraper and API**: give property ids, home links, street addresses or MLS numbers (up to 10,000 in a list, mixed in one list if you like) and get each home's full Realtor.com record as one row: price and status, beds, baths, size, lot, year built, address and coordinates, every photo, the MLS number, **price and sale history**, tax history and assessments, nearby and assigned schools with ratings, flood, wildfire, heat, wind and air risk, value estimates with their history and forecast, the mortgage estimate, city, county, ZIP code and neighborhood market medians, page views and saves, floor plans, the listing office and the description. Or give a search (a city, ZIP code, county, neighborhood, search link, agent or map area) and get the full record of every home it finds.

No login, no cookies and no browser: the Actor reads Realtor.com's own data service, 20 full records a request. A home is charged once per run, and only when its full record was read: misses, homes not found and records Realtor.com did not answer are free rows.

#### What you can do with it

- Enrich a list of addresses or property ids from your CRM with price history, tax history, schools and climate risk.
- Pull sold comps with their full sale history and value estimates for an appraisal or an offer.
- Check a home's value estimates (several sources) with their history and forecast, and its local market medians.
- Read every home of a ZIP code or a saved search with its complete record, not just the search card.
- Find new construction plans with their floor plans, builder community and price range.

### How to use the Realtor.com Property Details Scraper

1. Open the Actor and paste property ids (`9241435802`), home links or street addresses (`384 Leaning Rock Rdg, Austin, TX 78737`) into **Homes**, **Property ids or home links** or **Street addresses**, or MLS numbers into **MLS listing numbers**.
2. Or give a search instead: **Places** (`Austin, TX`, `78704`), Realtor.com search links, agents or map areas, with any filter (status, price, beds, home types, dates).
3. Optional: turn on **Similar homes**, or **Include personal data** for the agents' contacts.
4. Click **Start**. Download the properties as JSON, CSV or Excel, or read them through the Apify API.

### What data you get

One row per home (`type: "home"`) with its full record in `details`, plus free status rows for anything not found or not read, one free coverage row per search (with a market summary of its homes) and a free run summary. Fill rates are measured on the real Actor's own runs of 2026-10-29: 1,000 property ids across for sale, sold, for rent, off market and new home plans (run i7MWjy8olZWH0xZpJ), and, in brackets, 2,000 homes of a Phoenix sold search with similar homes on (run TzHffG0ftCJWTRYAW).

| 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 | 95.5% (100%) |
| `beds`, `baths`, `sqft`, `lotSqft`, `lotAcres`, `yearBuilt`, `homeType`, `garage`, `stories` | the home | 92.0% (beds), 80.8% (size), 44.4% (lot), 74.1% (year), 100% (type) |
| `address`, `fullAddress`, `latitude`, `longitude`, `county`, `countyFips` | where it is | 94.2% (street), 93.8% (position), 100% (county) |
| `photos`, `primaryPhoto`, `photoCount` | every photo link | 97.8% |
| `lastSoldPrice`, `lastSoldDate` | last sale (where the state discloses the price) | 50.0% (100%) |
| `estimate`, `estimates` | Realtor.com's value estimates by source | 63.6% |
| `mls.sourceId`, `mls.listingId`, `details.mlsName` | MLS code, number and name | 100% |
| `office`, `broker`, `builder` | listing office (name, phones, link), broker, builder | 80.6% (office) |
| `details.priceHistory` | every listing, price change, sale and rental event with dates, prices and the MLS listing ids | 84.6% (98.8%) |
| `details.taxHistory` | yearly tax and assessments (land, building, total) | 66.9% (93.3%) |
| `details.schoolsNearby`, `details.schoolsAssigned` | schools with ratings, grades, distance, district | 99.0% (99.7%) |
| `details.climateRisk` | flood factor, severity, FEMA zones and trend; wildfire, heat, wind and air factors | 90.0% (98.7%) |
| `details.estimatesHistory`, `details.estimatesForecast` | value estimate history and forecast by source | 64.0%, 60.1% (98.6%, 96.0%) |
| `details.mortgage` | monthly payment with its breakdown, property tax and insurance rates, the county FHA loan limit and whether the price is within it, today's average rates | 69.5% (homes on the market) |
| `details.permitHistory`, `details.permitHistoryStatus`, `details.hasRoofPermit` | building permits from public records: the day, type of work, status and project of each; a roof permit flag | 32.5% (run 11WblNmXcB9OAL0vo, the same 1,000 ids); 67% of 200 Phoenix sold homes and 62.5% of 200 Austin homes for sale in the spike |
| `details.localMarket` | city, county, ZIP code and neighborhood medians: list price, sold price, price per square foot, days on market | 100% (ZIP code), 91.3% (neighborhood) |
| `details.popularity` | page views, clicks, saves, shares and leads over 1, 7, 14, 21 and 28 days | 70.7% (100%) |
| `details.description`, `details.featureGroups` | the listing text and the source's feature lists (interior, exterior, utilities, HOA, ...) | 85.4%, 99.9% |
| `details.floorPlans`, `details.floorPlansStatus` | 2D floor plan images, interactive and 3D plan links | 13.1% (new home plans: 372 of 382 in the spike) |
| `details.streetViewUrl` | Realtor.com's Street View image link of the address | 94.6% (100%) |
| `details.community` | a new home's community: name, description, price range | 13.9% (new homes) |
| `details.contractDate`, `details.daysOnMls`, `details.mlsTaxAmount` | the MLS's own dates and figures | 67.5% (contract date), 43.2% (days on MLS) |
| `details.photosTagged` | photos with Realtor.com's room tags, kind and caption | 97.8% |
| `details.listingProducts`, `details.leadAttributes` | Realtor.com's products and lead settings on the listing | 100% |
| `details.monthlyFees`, `details.oneTimeFees`, `details.parking`, `details.leaseTerms`, `details.petPolicyText`, `details.unitsDetailed` | rental terms, fees and units | rentals |
| `details.similarHomes` | up to 10 similar homes (only with **Similar homes** on) | (67.3% of 2,000 sold homes) |
| `agents`, `mlsAgents`, `details.buyerAgents` | listing, co listing and buyer's agents with e-mails and phones | with `includePersonalData` |

#### 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,
  "beds": 4,
  "baths": 4,
  "sqft": 2980,
  "yearBuilt": 2025,
  "fullAddress": "384 Leaning Rock Rdg, Austin, TX 78737",
  "mls": { "sourceId": "AUTX", "listingId": "8045029", "sourceType": "mls" },
  "estimate": 980000,
  "lookup": { "label": "property id 1", "input": null },
  "detailsStatus": "read",
  "details": {
    "priceHistory": [{ "date": "2026-09-10", "event": "Listed", "price": 989999, "source": "UnlockMLS", "sourceListingId": "8045029" }],
    "schoolsAssigned": [{ "name": "Sycamore Springs Middle", "rating": 9, "levels": ["middle"] }],
    "climateRisk": { "floodFactor": 1, "fireFactor": 6, "heatFactor": 7 },
    "localMarket": { "zip": { "medianListPrice": 867000 } },
    "floorPlansStatus": "none"
  }
}
```

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

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

| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
| Property (one home with its full record) | $0.99 | $0.99 | $0.97 | $0.95 |

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 Property row means one property costs less than a tenth of a cent.

- 1,000 properties cost $0.95 to $0.99 plus the $0.008 start fee. The full record is in that price: no detail, history or floor plan events; similar homes come at no extra charge.
- A home is charged once per run, even when two of your entries or searches name it.
- Free: homes not found, addresses that match no single home, records Realtor.com did not answer, homes outside your search, repeats, and every status, coverage 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 property it cannot pay and delivers no row unpaid.

### Input

| Setting | What it does |
|---|---|
| `homes` | One list in any mix: home links, app shortlinks, property ids (`9241435802` or `M92414-35802`), MLS numbers with their code (`AUTX:8045029`; a bare number is read as a property id) and street addresses with city and state. Up to 10,000. |
| `propertyIds` | Property ids or home links (`..._M92414-35802`). A home not on Realtor.com is a free row. |
| `addresses` | Full US street addresses with city and state. A home is delivered only when exactly one Realtor.com home is that address (street, unit, city, state and the ZIP code when given); otherwise a free row lists the nearest addresses. |
| `mlsListingIds` | MLS numbers, alone (`8045029`) or with the MLS code (`AUTX:8045029`). A number that names homes in several MLSs is a free row listing them. |
| `locations`, `zipCodes`, `startUrls`, `agentIds`, `agentNames`, `mlsAgentIds`, `mapAreas`, `radiusMiles` | Searches: every home found is read from its full record. A search link keeps its own status and filters; home links and app shortlinks in `startUrls` are looked up. |
| `listingStatus`, `pendingAndContingent`, `sort` | Status (for sale, for rent, sold, off market, new home plans), pending homes, order of a search. |
| Filters (home types include co-ops, condops and the site's combined condo, townhome, row home and co-op type) | `minPrice`, `maxPrice`, `minBeds`, `maxBeds`, `minBaths`, `maxBaths`, `minSqft`, `maxSqft`, `minLotSqft`, `maxLotSqft`, `minYearBuilt`, `maxYearBuilt`, `maxHoaFee`, `noHoaFee`, `minGarage`, `homeTypes`, `features`, `keywords`, `street`, `listedWithinDays`, `priceReducedWithinDays`, `openHouseWithinDays`, `newConstruction`, `foreclosure`, `seniorCommunity`, `comingSoon`, `has3dTour`, `hasVirtualTour`, `moveInBy`, `catsAllowed`, `dogsAllowed`, `soldWithinDays`, `soldAfter`, `soldBefore`, `minSoldPrice`, `maxSoldPrice`. They apply to searches and are checked again on each home's full record; homes looked up by id, link, address or MLS number come as they are. |
| `maxItems`, `maxItemsPerSearch`, `splitPastCap`, `startPage` | How many homes in all (default 1,000) and per search; read past the 10,000 homes the site lists for one search (on by default). |
| `includeSimilarHomes` | Up to 10 similar homes per home, at no extra charge. |
| `includePersonalData` | Off by default (see below). |
| `includeRawRecord` | The record exactly as Realtor.com served it, for your own parsing; needs `includePersonalData`. |
| `maxPhotos`, `outputFields` | Fewer photos per home; keep only chosen fields. |
| `placeLookups` | Free: Realtor.com's own place suggestions for a text. |
| `maxConcurrency`, `proxyConfiguration` | Parallel requests (1 to 4); Apify Proxy (default, the Actor screens its own datacenter exits) or your own http:// proxy links. |

Example input:

```json
{
  "homes": ["9241435802", "https://www.realtor.com/realestateandhomes-detail/2110-Southern-Pines-Dr_Kingwood_TX_77339_M76324-46918", "1704 Shelbourne Dr, Austin, TX 78752"],
  "includeSimilarHomes": true
}
```

#### Personal data

Off by default. With `includePersonalData` on, rows also carry the listing agent's, co agent's and MLS agents' names, e-mails, phones, ids and licence number, buyer's agents and the agent's profile link, the listing office's e-mail and street address (often an agent's own mailbox or home), Realtor.com's advertiser ids, and, for rentals posted through rental platforms (where the landlord can be a private person), the landlord's contact, the home's street and exact position, its Street View link and tour links. With it off those fields are empty; the names, phones and links of listing offices, brokers and builders are businesses and always included, except an office named as the listing's own agent (an agent working alone: its name and phones are the agent's) and an office link that holds an e-mail address, which come with the switch. Texts (descriptions, feature lists) are delivered as Realtor.com serves them. 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 or changed homes since the last run"). Schedule the Actor and compare the rows in your own sheet; every row carries its 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 agents (with `includePersonalData`) and the listing office.
- No agent e-mails found on outside websites, no noise score and no parcel number (APN): Realtor.com's noise score and parcel number are empty on every record read (2,182 of 2,182 in the spike). No FHA loan decision either: each row gives the price, the county's FHA loan limit and `priceWithinFhaLoanLimit`, the comparison of the two.
- No rental specials and no year renovated: Realtor.com's record has both fields, but they were empty on every record read (400 apartment rentals of Austin and Dallas, 200 Chicago homes built before 1940 and about 10,000 delivered rows, 2026-10-29).
- No other sites (Zillow, Redfin) in the same row, and no mortgage calculator for any price and rate; each home's own mortgage estimate is in its record.
- No `/property/<id>` or `.../details/<id>` links: Realtor.com links its homes as `/realestateandhomes-detail/<address>_M<id>`, which this Actor reads, as well as property ids.
- No "relevant" or "best match" order for searches: Realtor.com reshuffles that order on every request; every stable order is offered.
- 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 the test of 2026-10-29, 33 of 84 unit addresses and 180 of 209 other addresses were found (no address was matched to another home). A unit not found gets a free row; look it up by its property id or link.
- Work that earns nothing has a limit: a long list of ids or addresses Realtor.com does not know 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 home whose full record Realtor.com does not answer is not delivered (a free row says so); a search with such a home is reported not complete, so running it again reads the rest.
- Sold prices are empty in states that do not disclose them (Texas and others).
- Floor plans exist mostly on new home plans; when Realtor.com's floor plan service does not answer, `floorPlansStatus` says `not_read` (the home is still delivered).

### FAQ

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

Realtor.com offers no public listing API; its APIs are partner lead and syndication feeds. This Actor works like an API: send property ids, links or addresses as JSON through the Apify API and read each home's full record as JSON.

#### How do I look up the history of a house on Realtor.com?

Give the home's address, link or property id: the row's `details.priceHistory` lists every listing, price change, sale and rental event Realtor.com shows, with dates, prices and MLS listing ids, and `details.taxHistory` the yearly taxes and assessments.

#### Can I get property details from Realtor.com by address?

Yes. An address is matched to a home only when exactly one Realtor.com home is that address (street, unit, city, state and the ZIP code when given); otherwise you get a free row with the nearest addresses, and nothing is charged for it.

#### 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-property-details-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"addresses": ["384 Leaning Rock Rdg, Austin, TX 78737"]}'
```

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_TOKEN>' });
const run = await client.actor('automation_craft/realtor-com-property-details-scraper').call({ propertyIds: ['9241435802'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((x) => x.type === 'home').map((x) => x.details.priceHistory));
```

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_TOKEN>")
run = client.actor("automation_craft/realtor-com-property-details-scraper").call(run_input={"homes": ["9241435802", "AUTX:8045029"]})
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

- [Realtor.com Scraper: Homes for Sale, Rent & Sold](https://apify.com/automation_craft/realtor-com-scraper)
- [Zillow Property Details Scraper: Price History](https://apify.com/automation_craft/zillow-property-details-scraper)
- [Zillow Scraper: Homes for Sale, Rent and Sold](https://apify.com/automation_craft/zillow-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)
- [Airbnb Scraper: Airbnb Data, Prices, Calendar](https://apify.com/automation_craft/airbnb-scraper)

# Changelog

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

# Actor input Schema

## `homes` (type: `array`):

One list for a sheet column of mixed entries, one per line: home links, app shortlinks (https://apps.realtor.com/...), property ids (9241435802 or M92414-35802), MLS numbers with their MLS code (AUTX:8045029; a bare number is read as a property id) or street addresses with city and state. Each entry is read like the dedicated lists below. Up to 10,000.

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

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

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

## `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 the full record; 0 for none, the main photo too). Default: all photos.

## `includeSimilarHomes` (type: `boolean`):

Adds up to 10 similar homes Realtor.com names for each home (property id, status, price, last sold price and date, beds, baths, size, type, address and link), read in the same request as the record, at no extra charge. A similar home posted through a rental platform keeps only its city, state, ZIP code and id with personal data off. When Realtor.com does not answer them the list is empty and similarHomesStatus says not_read.

## `includeRawRecord` (type: `boolean`):

Adds the record exactly as Realtor.com's data service served it ("raw"), for your own parsing. It holds the listing agents' names, e-mails and phones, so it needs "Include personal data" on; without it the run is refused, free but for the start fee. Makes each row about 20 KB larger.

## `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
{
  "propertyIds": [
    "9241435802",
    "https://www.realtor.com/realestateandhomes-detail/2110-Southern-Pines-Dr_Kingwood_TX_77339_M76324-46918"
  ],
  "listingStatus": "forSale",
  "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 = {
    "propertyIds": [
        "9241435802",
        "https://www.realtor.com/realestateandhomes-detail/2110-Southern-Pines-Dr_Kingwood_TX_77339_M76324-46918"
    ],
    "listingStatus": "forSale",
    "includePersonalData": false,
    "includeSimilarHomes": false,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation_craft/realtor-com-property-details-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 = {
    "propertyIds": [
        "9241435802",
        "https://www.realtor.com/realestateandhomes-detail/2110-Southern-Pines-Dr_Kingwood_TX_77339_M76324-46918",
    ],
    "listingStatus": "forSale",
    "includePersonalData": False,
    "includeSimilarHomes": False,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("automation_craft/realtor-com-property-details-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 '{
  "propertyIds": [
    "9241435802",
    "https://www.realtor.com/realestateandhomes-detail/2110-Southern-Pines-Dr_Kingwood_TX_77339_M76324-46918"
  ],
  "listingStatus": "forSale",
  "includePersonalData": false,
  "includeSimilarHomes": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call automation_craft/realtor-com-property-details-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-property-details-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/lvDs7u7bOUjnJw42s/builds/7EMw0Hs2admGZhRt9/openapi.json
