# Realtor.com Listings & Property Details Scraper (`barefoot_grade/realtor-com-scraper`) Actor

Collect US homes for sale, for rent and recently sold from Realtor.com by city, ZIP code or search link. Each row has price, beds, baths, size, lot, address, coordinates, status, list date, photos and the listing agent; optional details add description, history, taxes and schools.

- **URL**: https://apify.com/barefoot_grade/realtor-com-scraper.md
- **Developed by:** [Philip Kirkbride](https://apify.com/barefoot_grade) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 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.

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 Listings & Property Details Scraper

Get US homes from Realtor.com as clean rows: list price, beds, baths, living area, lot size, year built, property type, full address with county and coordinates, listing status, list date, photos, HOA fee, the home value estimate and the listing agent, office and broker with their phone numbers. Search homes **for sale**, **for rent** or **recently sold** by city, ZIP code, county or neighborhood, or paste any Realtor.com search link with its filters.

Turn on property details to also get each home's full description, feature lists, price and sale history, yearly tax history with assessed values, nearby schools with ratings, neighborhoods and every value estimate. Property links and IDs always come back with full details.

### Use cases

- **Market research**: pull every active listing in a city or ZIP code with price, size and age to track supply, price per square foot and days on market.
- **Comparable sales**: collect recently sold homes with sale prices and dates for valuation and appraisal work.
- **Rental analysis**: compare monthly asking rents across buildings and neighborhoods.
- **Lead generation**: build lists of listing agents, offices and brokers with phone numbers for the areas you serve.
- **Investment screening**: filter by price, beds and lot size, then read the tax and price history of the homes that fit.

### Quick Start

```json
{
  "locations": ["Austin, TX"],
  "maxItemsPerSearch": 100
}
```

This returns the 100 newest homes for sale in Austin, TX. Add more locations to search several places in one run, or set `status` to `for_rent` or `sold`.

### Input

| Input | Type | Default | Meaning |
| --- | --- | --- | --- |
| `locations` | array | `[]` | US places to search: `Austin, TX`, `78704`, `Travis County, TX` or `Hyde Park, Austin, TX`. Each location is one search. |
| `status` | string | `for_sale` | `for_sale`, `for_rent` or `sold` (recently sold). Applies to `locations`. |
| `startUrls` | array | `[]` | Realtor.com search links (`realestateandhomes-search/...`, `apartments/...`) with their filters, property links (`realestateandhomes-detail/...`) or property IDs. |
| `minPrice`, `maxPrice` | integer | none | Price range in USD: list price, monthly rent for rentals, sale price for sold homes. |
| `minBeds`, `maxBeds` | integer | none | Bedroom range. |
| `minBaths` | integer | none | Fewest bathrooms. |
| `minSqft`, `maxSqft` | integer | none | Living area range in square feet. |
| `propertyTypes` | array | all | Any of `single_family`, `condos`, `townhomes`, `multi_family`, `land`, `mobile`, `farm`. |
| `listedWithinDays` | integer | none | For sale and rent: only listings added in the last N days. |
| `soldWithinDays` | integer | none | Sold: only homes sold in the last N days. |
| `sort` | string | `newest` | `newest` (newest listed, or most recently sold), `price_low` or `price_high`. |
| `includeDetails` | boolean | `false` | Add description, features, price, sale and tax history, schools, neighborhoods and all value estimates to every search result. |
| `maxItemsPerSearch` | integer | `200` | Results per location or search link, up to 10,000. |
| `maxItems` | integer | `1000` | Upper limit on rows for the whole run. |

The filters apply to `locations`. A search link keeps the filters written in it, and the filters above fill in anything the link leaves open.

### Example queries

- `{"locations": ["78704", "78745"], "minBeds": 3, "maxPrice": 750000, "propertyTypes": ["single_family"]}`: three-bedroom houses under $750,000 in two Austin ZIP codes.
- `{"locations": ["Phoenix, AZ"], "status": "sold", "soldWithinDays": 30, "maxItemsPerSearch": 2000}`: up to 2,000 Phoenix homes sold in the last 30 days, with sale prices and dates.
- `{"locations": ["Denver, CO"], "status": "for_rent", "minBeds": 2, "sort": "price_low"}`: two-bedroom-plus Denver rentals, cheapest first.
- `{"startUrls": ["https://www.realtor.com/realestateandhomes-search/San-Antonio_TX/beds-3/price-200000-400000"]}`: a search link pasted from your browser, filters included.
- `{"startUrls": ["https://www.realtor.com/realestateandhomes-detail/11007-Strawberry-Roan-Dr_Manor_TX_78653_M95720-93355"]}`: one property with full details.
- `{"locations": ["Tampa, FL"], "listedWithinDays": 7, "includeDetails": true, "maxItemsPerSearch": 300}`: this week's new Tampa listings with description, history, taxes and schools.

### What it returns

One row per home. Search results and property links share the same columns, so a table or CSV export lines up; fields Realtor.com does not publish for a home are `null`.

| Field | Meaning |
| --- | --- |
| `propertyId`, `listingId`, `url` | Realtor.com property and listing ids, and the property page. |
| `status` | `for_sale`, `for_rent`, `sold`, `pending`, `off_market` and similar. |
| `listPrice`, `listPriceMin`, `listPriceMax` | List price in USD (monthly rent for rentals); buildings with several units show a range. |
| `soldPrice` | Sale price, for sold homes. |
| `lastSoldPrice`, `lastSoldDate` | The most recent recorded sale. |
| `listDate`, `priceReducedAmount` | When the listing went live, and the latest price cut. |
| `beds`, `baths`, `bathsFull`, `bathsHalf` | Bedrooms and bathrooms (`baths` counts a half bath as 0.5). |
| `bedsMin`, `bedsMax`, `bathsMin`, `bathsMax`, `sqftMin`, `sqftMax` | For apartment communities with several floor plans: the range of bedrooms, bathrooms and size across their units. `null` for a single home. |
| `sqft`, `lotSqft`, `yearBuilt`, `garageSpaces`, `stories` | Size, lot, age and layout. |
| `propertyType`, `propertySubType`, `buildingName` | For example `single_family`, `condos` / `condo`, and the building name for rentals. |
| `address`, `unit`, `city`, `state`, `postalCode`, `county`, `latitude`, `longitude` | Location. |
| `hoaFee` | Monthly HOA fee. |
| `estimate`, `estimateLow`, `estimateHigh` | Realtor.com's home value estimate and its range. |
| `isNewListing`, `isPriceReduced`, `isPending`, `isContingent`, `isForeclosure`, `isNewConstruction`, `isComingSoon` | Listing flags. |
| `primaryPhoto`, `photos`, `photoCount`, `virtualTours` | Photo links and virtual tour links. |
| `agentName`, `agentPhone`, `agentEmail`, `officeName`, `officePhone`, `brokerName` | The first listing agent and office, ready for a spreadsheet. |
| `agents` | Every agent and office on the listing, each with all their phone numbers. |
| `mlsName`, `mlsId`, `mlsListingId` | The listing service the home comes from, and its listing number there. |
| `detailIncluded` | `true` when the property details below were read. |
| `description`, `features` | Full description and feature lists by category. |
| `propertyHistory` | Listing, sale and price-change events with dates and prices. |
| `taxHistory` | Yearly tax with assessed total, building and land values. |
| `schools`, `neighborhoods` | Nearby schools with rating, distance and grade levels; neighborhood names. |
| `estimates` | Every value estimate with its provider. |
| `searchLocation`, `input`, `scrapedAt` | The search that found the row, the input entry it came from, and the collection time (UTC). |

The run summary (`OUTPUT`) lists each search with the number of homes Realtor.com has for it, how many were returned and any error, plus the run totals and any property that could not be read.

### Output example

```json
{
  "propertyId": "9572093355",
  "listingId": "3001990653",
  "url": "https://www.realtor.com/realestateandhomes-detail/11007-Strawberry-Roan-Dr_Manor_TX_78653_M95720-93355",
  "status": "for_sale",
  "listPrice": 425000,
  "listPriceMin": null,
  "listPriceMax": null,
  "soldPrice": null,
  "lastSoldPrice": null,
  "lastSoldDate": "2022-04-25",
  "listDate": "2026-10-20T03:45:21Z",
  "priceReducedAmount": null,
  "beds": 4,
  "bedsMin": null,
  "bedsMax": null,
  "baths": 3.5,
  "bathsMin": null,
  "bathsMax": null,
  "bathsFull": 3,
  "bathsHalf": 1,
  "sqft": 3411,
  "sqftMin": null,
  "sqftMax": null,
  "lotSqft": 5998,
  "yearBuilt": 2021,
  "propertyType": "single_family",
  "propertySubType": null,
  "garageSpaces": 2,
  "stories": 2,
  "buildingName": null,
  "address": "11007 Strawberry Roan Dr",
  "unit": null,
  "city": "Manor",
  "state": "TX",
  "postalCode": "78653",
  "county": "Travis",
  "latitude": 30.328128,
  "longitude": -97.580788,
  "hoaFee": 77,
  "estimate": 444796,
  "estimateLow": 431452,
  "estimateHigh": 458139,
  "isNewListing": true,
  "isPriceReduced": null,
  "isPending": null,
  "isContingent": null,
  "isForeclosure": null,
  "isNewConstruction": null,
  "isComingSoon": null,
  "primaryPhoto": "https://ap.rdcpix.com/c4621a4daf0689cbbbffbda742178818l-m3647582128s.jpg",
  "photos": [
    "https://ap.rdcpix.com/c4621a4daf0689cbbbffbda742178818l-m3647582128s.jpg",
    "https://ap.rdcpix.com/c4621a4daf0689cbbbffbda742178818l-m1886352127s.jpg",
    "https://ap.rdcpix.com/c4621a4daf0689cbbbffbda742178818l-m691905739s.jpg"
  ],
  "photoCount": 16,
  "virtualTours": [],
  "agentName": "Alex Morgan",
  "agentPhone": "(512) 555-0142",
  "agentEmail": "agent@example.com",
  "officeName": "ReKonnection, LLC",
  "officePhone": "(512) 555-0100",
  "brokerName": "ReKonnection, LLC - Broker",
  "agents": [
    {
      "role": "seller",
      "name": "Alex Morgan",
      "email": "agent@example.com",
      "phones": [
        {
          "number": "(512) 555-0142",
          "type": "BUSINESS_PHONE",
          "ext": null
        }
      ],
      "officeName": "ReKonnection, LLC",
      "officeEmail": "office@example.com",
      "officePhones": [
        {
          "number": "(512) 555-0100",
          "type": "Office"
        }
      ],
      "brokerName": "ReKonnection, LLC - Broker"
    }
  ],
  "mlsName": "UnlockMLS",
  "mlsId": "AUTX",
  "mlsListingId": "2901678",
  "detailIncluded": true,
  "description": "Stunning 2-story home in the highly sought after Wildhorse Ranch community! This 3,411 SF floor plan offers 4 bedrooms, 3 full baths, a dedicated media room, and a separate game room. Enjoy a premium greenbelt adjacent lot with an extended ...",
  "features": [
    {
      "category": "Bedrooms",
      "items": [
        "Bedrooms: 4",
        "Bedrooms On Main Level: 1"
      ]
    },
    {
      "category": "Bathrooms",
      "items": [
        "Total Bathrooms: 4",
        "Full Bathrooms: 3",
        "1/2 Bathrooms: 1"
      ]
    }
  ],
  "propertyHistory": [
    {
      "date": "2026-10-20",
      "event": "Listed",
      "price": 425000,
      "source": "UnlockMLS"
    },
    {
      "date": "2026-10-04",
      "event": "Price Changed for rent",
      "price": 2750,
      "source": "UnlockMLS"
    }
  ],
  "taxHistory": [
    {
      "year": 2026,
      "tax": 10260,
      "assessedTotal": 465813,
      "assessedBuilding": 386127,
      "assessedLand": 79686
    },
    {
      "year": 2025,
      "tax": 10519,
      "assessedTotal": 497923,
      "assessedBuilding": 418237,
      "assessedLand": 79686
    }
  ],
  "schools": [
    {
      "name": "Lagos Elementary School",
      "rating": 3,
      "distanceMiles": 1.3,
      "levels": [
        "elementary"
      ]
    },
    {
      "name": "Manor Middle School",
      "rating": 2,
      "distanceMiles": 2.3,
      "levels": [
        "middle"
      ]
    }
  ],
  "neighborhoods": [],
  "estimates": [
    {
      "estimate": 444796,
      "low": 431452,
      "high": 458139,
      "date": "2026-10-14",
      "source": "Quantarium"
    },
    {
      "estimate": 417000,
      "low": 341900,
      "high": 492100,
      "date": "2026-10-14",
      "source": "Collateral Analytics"
    }
  ],
  "searchLocation": "Austin, TX",
  "input": "Austin, TX",
  "scrapedAt": "2026-10-20T05:00:00Z"
}
```

### Good to know

- Realtor.com shows at most 10,000 results for one search. To collect more from a large area, split it into ZIP codes or price ranges; the run summary notes a search that hit the limit.
- Contact details appear when the listing publishes them: most listings name an agent and office, and more than half carry the agent's phone number.
- A home found by two searches in the same run is returned once.
- If a property's details cannot be read, its search row is still returned with `detailIncluded: false`, and the run summary counts it.
- A location Realtor.com does not recognise, or a property that no longer exists, is reported in the run summary and the run continues. If nothing at all is collected, the run fails with a clear message.
- Realtor.com covers the United States only.
- Automated access is subject to Realtor.com's terms; use this actor only where you have the necessary permissions and a lawful basis, and handle agent contact details in line with the privacy and marketing rules that apply to you.

### Price

**$0.0006 per home** delivered, with or without property details, plus **$0.005 per run start**. The run-start event is charged per GB of memory; the default 512 MB run is one start event. The start is charged even if the run saves no results. Searches and properties that fail are not charged. When your maximum charge for the run is reached, the run stops and keeps the rows already saved. Platform usage is included in these prices.

# Actor input Schema

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

US places to search: a city and state (Austin, TX), a ZIP code (78704), a county (Travis County, TX) or a neighborhood (Hyde Park, Austin, TX). Each location is one search.

## `status` (type: `string`):

Which listings the locations search: for sale, for rent, or sold. Search links set their own status.

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

Realtor.com search links (realestateandhomes-search/..., apartments/..., including filters such as beds-3 or price-300000-500000) and property links (realestateandhomes-detail/...) or property IDs. Property links always include full details.

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

Lowest list price (monthly rent for rentals; sold price for sold homes), in US dollars.

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

Highest list price (monthly rent for rentals; sold price for sold homes), in US dollars.

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

Fewest bedrooms.

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

Most bedrooms.

## `minBaths` (type: `integer`):

Fewest bathrooms.

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

Smallest interior area, in square feet.

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

Largest interior area, in square feet.

## `propertyTypes` (type: `array`):

Only these home types. Leave empty for all.

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

For sale and for rent searches: only listings added in the last N days.

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

Sold searches: only homes sold in the last N days.

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

Newest first (most recently listed, or most recently sold for sold searches), or by price.

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

Also read each listing's property page data: full description, features, price history, tax history, nearby schools, neighborhoods and every value estimate. Slower, same price per row.

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

Cap for each location or search link. Realtor.com shows at most 10,000 results per search; add filters to split a larger area.

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

Cap on rows for the whole run, across every search and property.

## Actor input object example

```json
{
  "locations": [
    "Austin, TX"
  ],
  "status": "for_sale",
  "startUrls": [],
  "propertyTypes": [],
  "sort": "newest",
  "includeDetails": false,
  "maxItemsPerSearch": 100,
  "maxItems": 1000
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (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"
    ],
    "status": "for_sale",
    "startUrls": [],
    "maxItemsPerSearch": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("barefoot_grade/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"],
    "status": "for_sale",
    "startUrls": [],
    "maxItemsPerSearch": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("barefoot_grade/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"
  ],
  "status": "for_sale",
  "startUrls": [],
  "maxItemsPerSearch": 100
}' |
apify call barefoot_grade/realtor-com-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,barefoot_grade/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/fTXKA2oRzemscEKWk/builds/xkDvF9gAlHyeYnr6o/openapi.json
