# Realtor.com Scraper - For Sale, Rent, Sold, No Login (`benthepythondev/realtor-com-scraper`) Actor

Realtor.com homes for sale, for rent, sold and pending with price, beds, baths, sqft, address, coordinates, photos, listing agent and office with phone and email, estimates and flags. Full records add price and tax history and schools. Filters, radius search, 10,000+ per search. No login.

- **URL**: https://apify.com/benthepythondev/realtor-com-scraper.md
- **Developed by:** [Ben](https://apify.com/benthepythondev) (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.80 / 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 Scraper - For Sale, For Rent, Sold, No Login

Export Realtor.com listings for any US city, ZIP code, county, neighborhood or address: homes for sale, rentals, recently sold homes and pending sales, with price, beds, baths, square feet, lot size, year built, address, coordinates, photos, the listing agent and office with phone and email, value estimates and listing flags. Turn on full records to add price history, tax history and nearby schools. Export to JSON/CSV/Excel, run on a schedule, call via API, or connect to Make, Zapier or n8n.

**What a run costs:** $0.001 per property on the Free plan, $0.00095 on Bronze, $0.0009 on Silver and $0.0008 from Gold up. A full record (price and tax history, schools) adds the same again per property. A search without results, a link without a property and a request Realtor.com does not answer cost nothing. 1,000 homes with agent contacts: $1.00 on Free.

### 🔎 What is the Realtor.com Scraper?

It reads Realtor.com's own search service, the one its website calls, so it gets the same data as the website without a browser, without cookies and without an account. A default run (20 homes in Austin, TX) takes about 3 seconds.

| What users report about other Realtor.com Actors | What this Actor does |
|---|---|
| "We got blocked", "zero results returned", "all requests failed" | No browser and no page loads: one data call per 200 homes, asked from US addresses (Realtor.com shows "not available in your region" to Europe, which looks like a block) |
| "Only shows 165 results" | Up to 10,000 homes per search directly; a larger search is split into date windows automatically (10,500 of Denver's 92,227 sales in 96 s) |
| "Actor ignores filter parameters for sold data" | Price filter on sold searches filters by sale price; beds, baths, size, year, type and days filters apply to every listing type |
| "How can I scrape only contingent listings" | `listingType: pending` returns pending and contingent sales; `for_sale` leaves them out |
| "Missing fields", "unusable due to missing data" | 70+ fields per home; full records add price history, tax history and schools |
| "Runs forever on a few listings" | 200 homes per call, full records 20 per call, three searches side by side |

#### What data does it extract?

- **Listing:** property id, listing id, link, status, list price (rent per month for rentals), price per square foot, list date, pending date, last update, MLS id
- **Sold data:** sale price and sale date (empty in non-disclosure states such as Texas, where sale prices are not public)
- **Home:** property type, beds, baths (full and half), square feet, lot size, year built, stories, garage, HOA fee, description, features by category, tags
- **Location:** full address, street, unit, city, state, ZIP, county with FIPS code, neighborhoods, latitude and longitude
- **Contacts:** listing agent name, phone numbers, email and license; broker; office name, phones and email; builder; rental manager
- **Value:** best current estimate with low and high range and its source
- **Media and events:** primary photo, all photo links, open houses (with virtual tours flagged)
- **Rentals:** units with beds, baths, size, price and availability date, pet policy
- **Flags:** pending, contingent, new construction, foreclosure, price reduced, new listing
- **Full records (optional):** price history (listed, price changed, sold, with source), tax history (yearly tax and assessment), nearby schools with rating, grades and distance, all estimates, monthly and one-time fees, parking, lease terms

### ⬇️ Input

| Field | What it does |
|---|---|
| `locations` | City and state, ZIP, county, neighborhood or a street address, as typed on Realtor.com: `"Austin, TX"`, `"78704"`, `"Travis County, TX"`. An address returns that property. |
| `startUrls` | Realtor.com search links (location, rent or sold, beds and price segments are read) or property links |
| `propertyIds` | Realtor.com property ids; each returns its full record |
| `listingType` | `for_sale` (default), `for_rent`, `sold`, `pending`, `off_market` |
| `maxResults` | Homes to save per search (default 20, up to 100,000) |
| `includeDetails` | Add price history, tax history, schools and fees to every row |
| `minPrice`, `maxPrice` | List price; sale price on sold searches |
| `minBeds`, `maxBeds`, `minBaths`, `maxBaths` | Bedrooms and bathrooms |
| `minSqft`, `maxSqft`, `minLotSqft`, `maxLotSqft` | Living area and lot size |
| `minYearBuilt`, `maxYearBuilt` | Year built |
| `propertyTypes` | `single_family`, `condos`, `townhomes`, `multi_family`, `duplex_triplex`, `land`, `farm`, `mobile`, `apartment`, ... |
| `daysOnMarket` | Listed (or sold, for sold searches) in the last N days |
| `radiusMiles` | Search around the location's center or an address instead of inside its boundary |
| `sort` | `newest`, `price_low`, `price_high`, `sqft_high`, `recently_sold`, `recently_updated` |
| `foreclosureOnly`, `newConstructionOnly`, `openHouseOnly` | Narrow to those listings |

#### Example input

```json
{
  "locations": ["Denver, CO", "78704"],
  "listingType": "sold",
  "minPrice": 500000,
  "minBeds": 3,
  "daysOnMarket": 30,
  "maxResults": 200,
  "includeDetails": true
}
```

### ⬆️ Output

```json
{
  "propertyId": "8102930727",
  "listingId": "2991781467",
  "url": "https://www.realtor.com/realestateandhomes-detail/1704-Shelbourne-Dr_Austin_TX_78752_M81029-30727",
  "status": "for_sale",
  "listPrice": 400000,
  "pricePerSqft": 257,
  "listDate": "2026-02-21T14:21:38.000000Z",
  "propertyType": "single_family",
  "beds": 3,
  "baths": 2,
  "sqft": 1556,
  "lotSqft": 9561,
  "yearBuilt": 1969,
  "garage": 2,
  "hoaFee": 0,
  "address": "1704 Shelbourne Dr, Austin, TX 78752",
  "city": "Austin",
  "state": "TX",
  "zipCode": "78752",
  "county": "Travis",
  "latitude": 30.327864,
  "longitude": -97.683779,
  "estimate": 391000,
  "estimateLow": 351900,
  "estimateHigh": 430100,
  "estimateSource": "Collateral Analytics",
  "photoCount": 38,
  "agentName": "Knolly Williams",
  "agentPhones": ["7372051640"],
  "brokerName": "eXp Realty, LLC",
  "officeName": "eXp Realty, LLC",
  "officePhones": ["8885197431"],
  "tags": ["central_air", "hardwood_floors", "swimming_pool", "home_office"],
  "mlsId": "AUTX",
  "mlsListingId": "3401964",
  "searchLocation": "Austin, TX",
  "priceHistory": [{"date": "2026-10-22", "event": "Listed", "price": 395000, "source": "UnlockMLS"}],
  "taxHistory": [{"year": 2026, "tax": 7755, "assessment": {"building": 137848, "land": 280530, "total": 418378}}],
  "schools": [{"name": "Wells Branch Elementary School", "levels": ["elementary"], "rating": 6, "distanceMiles": 0.1, "funding": "public"}],
  "scrapedAt": "2026-10-22T17:21:03+00:00"
}
```

The three history and school lines above are taken from the full record of another home (2800 Single Trace Ct, Austin) to show their shape. `priceHistory`, `taxHistory`, `schools`, `estimates`, `monthlyFees`, `oneTimeFees`, `parking` and `terms` are in rows with full records. The key-value record `SUMMARY` lists every search with how many homes Realtor.com reports and how many were saved.

### 🤖 For AI agents

One input to copy; every field is optional, no credential is needed:

```json
{"locations": ["Austin, TX"], "listingType": "for_rent", "maxResults": 50, "minBeds": 2, "maxPrice": 2500}
```

### 💡 Use cases

- 📈 **Investors:** pull recent sales with sale price, tax history and estimates to price a deal or build comps around an address (`radiusMiles`)
- 🏢 **Property managers:** track rents by ZIP, beds and building, with unit-level prices and availability
- 📇 **Lead generation:** collect listing agents and brokerages with phones and emails per city
- 📊 **Data teams and proptech:** feed a daily export of new listings (`daysOnMarket: 1`, schedule) into a warehouse

### ❓ FAQ

**Do I need a Realtor.com account or proxies?** No. The Actor reads public listing data and handles the routing itself.

**How many homes can one run return?** Up to 10,000 per search directly. Above that the search is read in date windows, newest first; homes without a list date (or sale date, for sold searches) cannot be placed in a window and are left out, which the run reports.

**Why is the sale price empty?** Several US states do not disclose sale prices (Texas, Utah, New Mexico and others). Realtor.com shows the sale date there, and so does this Actor.

**Does a property link cost more?** A property link or id returns the full record: one property plus one full-record charge.

**Why do I get fewer homes than Realtor.com shows?** `for_sale` leaves out pending and contingent homes (ask for `pending` for those), and homes already saved in the run for another search are not saved twice.

**Can I run it every day?** Yes. Use `daysOnMarket: 1` with a schedule to get only new listings.

**Is it legal?** The Actor reads listing data Realtor.com shows to every visitor. Agent contact details are business contacts published with the listing; use them under the rules that apply to you (CAN-SPAM, TCPA, GDPR where relevant) and respect Realtor.com's terms for your use.

**Something missing or wrong?** Open an issue on the Issues tab; it is answered within a business day.

### Limits

- US listings only (Realtor.com covers the US).
- Realtor.com does not give visitors view or save counts, and its school list is limited to the nearest three schools per level within 5 miles.
- Rental buildings list one row per building with a price range and the units in `units`.

### 🔗 You might also like

- [Zillow Scraper](https://apify.com/benthepythondev/zillow-scraper) and [Zillow Property Details](https://apify.com/benthepythondev/zillow-detail-scraper)
- [Redfin Scraper](https://apify.com/benthepythondev/redfin-scraper)
- [Zumper Rental Scraper](https://apify.com/benthepythondev/zumper-rental-scraper), [PadMapper](https://apify.com/benthepythondev/padmapper-rental-scraper) and [HotPads](https://apify.com/benthepythondev/hotpads-rental-scraper)
- [Craigslist Real Estate Scraper](https://apify.com/benthepythondev/craigslist-real-estate-scraper)

**Keywords:** realtor.com scraper, realtor scraper, realtor.com API, real estate data API, homes for sale data, sold homes data, rental listings scraper, US property data, MLS listings export, real estate agent leads, listing agent phone email, home price history, property tax history, comps data, housing market data, real estate CSV export

# Actor input Schema

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

City and state, ZIP code, county, neighborhood or street address, as you would type it on Realtor.com: "Austin, TX", "78704", "Travis County, TX", "Brooklyn, NY". A street address returns that one property.

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

Search links (https://www.realtor.com/realestateandhomes-search/Austin_TX/beds-3, /apartments/Denver_CO, .../show-recently-sold) or property links (.../realestateandhomes-detail/...\_M72854-81643). A property link returns its full record.

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

Realtor.com property ids (the digits after \_M in a property link, without the hyphen), for example 7285481643. Each returns the full record.

## `listingType` (type: `string`):

for_sale (active, without pending), for_rent, sold, pending (pending and contingent sales), or off_market.

## `maxResults` (type: `integer`):

How many properties to save for each location or search link. One search reaches 10,000 directly; above that the Actor splits it into date windows.

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

Adds price history, tax history, nearby schools, all estimates, fees, parking and lease terms to every row (one extra call per 20 homes; charged as property-details).

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

List price for sale and rent; sale price for sold searches (sale prices are not public in non-disclosure states such as Texas).

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

Upper bound of the price filter.

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

At least this many bedrooms.

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

At most this many bedrooms.

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

At least this many bathrooms.

## `maxBaths` (type: `integer`):

At most this many bathrooms.

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

Living area at least.

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

Living area at most.

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

Lot size at least.

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

Lot size at most.

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

Year built at least.

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

Year built at most.

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

Leave empty for all. single_family, condos, townhomes, multi_family, duplex_triplex, land, farm, mobile, apartment, condo_townhome_rowhome_coop, coop.

## `daysOnMarket` (type: `integer`):

Only listings added (for sale, for rent, pending) or sold (sold searches) in the last N days.

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

Search around the location's center (or an address) within this radius instead of inside its boundary.

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

Realtor.com's own order when empty. Sold searches default to most recently sold.

## `foreclosureOnly` (type: `boolean`):

Only foreclosure listings.

## `newConstructionOnly` (type: `boolean`):

Only new construction.

## `openHouseOnly` (type: `boolean`):

Only listings with an upcoming open house.

## `debug` (type: `boolean`):

Logs every request with its size and time.

## Actor input object example

```json
{
  "locations": [
    "Austin, TX"
  ],
  "listingType": "for_sale",
  "maxResults": 20,
  "includeDetails": false
}
```

# 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"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("benthepythondev/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"] }

# Run the Actor and wait for it to finish
run = client.actor("benthepythondev/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"
  ]
}' |
apify call benthepythondev/realtor-com-scraper --silent --output-dataset

```

## MCP server setup

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