# Realtor.com US Property Listings Scraper (`datascraperes/realtor-property-search`) Actor

Search Realtor.com property listings across the United States by city, state, or ZIP. Get homes for sale, rent, or sold with prices, beds, baths, photos, location data, optional property details, and listing history.

- **URL**: https://apify.com/datascraperes/realtor-property-search.md
- **Developed by:** [DataScraperES](https://apify.com/datascraperes) (community)
- **Categories:** Real estate, Automation, Lead generation
- **Features:** Limited permissions
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.75 / 1,000 property results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

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

Search public Realtor.com property listings across the United States by city, state, or ZIP code. **Get one structured Dataset item per unique property**, with prices, address, beds, baths, size, status, and optional detail or history data.

This Actor is an unofficial tool and is not affiliated with, endorsed by, or sponsored by Realtor.com.

### What this Actor does

Realtor.com US Property Listings Scraper collects homes for sale, rentals, and recently sold properties from one or many US locations. Choose compact, standard, or full output, apply property filters, and optionally enrich each result with available property details and listing or tax history.

### Use cases

- Compare current property inventory and advertised prices across US markets.
- Research comparable active or recently sold properties by ZIP code.
- Build rental, acquisition, or market-analysis datasets.
- Monitor selected locations through scheduled runs and Dataset exports.

### How to use

1. Open the Actor in Apify Console.
2. Add at least one location as city plus state, a ZIP code, or a state code.
3. Choose listing statuses, filters, output mode, enrichment, and result limits.
4. Click **Start** and open the Dataset when the run finishes.

Start with one ZIP code and a small `maxTotalResults` value to confirm that your filters match the intended inventory.

### Input

```json
{
  "locations": [
    {
      "city": "Austin",
      "stateCode": "TX"
    }
  ],
  "listingStatuses": [
    "for_sale"
  ],
  "minPrice": 100000,
  "maxPrice": 500000,
  "minBeds": 2,
  "minBaths": 1,
  "propertyTypes": [
    "single_family"
  ],
  "maxResultsPerLocation": 10,
  "maxTotalResults": 20,
  "outputMode": "full",
  "fetchDetails": false,
  "fetchHistory": false,
  "requestDelaySeconds": 0.2
}
```

| Field | Type | Required | Description |
|---|---|---:|---|
| `locations` | array | Yes | From 1 to 1,000 location objects. Use `city` with `stateCode`, a `postalCode`, or `stateCode` alone. |
| `listingStatuses` | array | No | Any of `for_sale`, `for_rent`, or `sold`; default `for_sale`. |
| `minPrice` / `maxPrice` | integer | No | Minimum and maximum listing price in USD. |
| `minBeds` / `minBaths` | number | No | Minimum bedrooms and bathrooms. |
| `propertyTypes` | array | No | Up to 25 property-type values such as `single_family` or `condo`. |
| `maxResultsPerLocation` | integer | No | Maximum unique properties per location, from 1 to 10,000; default 100. |
| `maxTotalResults` | integer | No | Run-wide maximum unique properties, from 1 to 10,000; default 1,000. |
| `outputMode` | string | No | `compact`, `standard`, or `full`; default `full`. |
| `fetchDetails` | boolean | No | Adds an available detail record to each result; default `false`. |
| `fetchHistory` | boolean | No | Adds available listing-event and tax history and automatically enables details; default `false`. |
| `requestDelaySeconds` | number | No | Delay between paginated search requests, from 0 to 10 seconds; default 0.2. |

`compact` contains listing identity, status, URL, price, date, compact address, and core property features. `standard` also includes price ranges and reductions, update date, source, flags, and tags. `full` adds the complete returned location and description objects, photos, branding, and open houses when available.

This input was used for the complete real output example below:

```json
{
  "locations": [
    {
      "postalCode": "10026"
    }
  ],
  "listingStatuses": [
    "for_sale"
  ],
  "maxResultsPerLocation": 1,
  "maxTotalResults": 1,
  "outputMode": "compact",
  "fetchDetails": false,
  "fetchHistory": false,
  "requestDelaySeconds": 0
}
```

### Output

Results are saved to the run's default Dataset. Each item represents one unique property and can be exported as JSON, CSV, Excel, XML, RSS, or HTML. Field availability depends on the selected output mode and the data published for each listing. When optional detail enrichment fails, `detail_status` can contain a safe failure category while the base property result remains available.

The following is the complete Dataset item from the real run using the input above:

```json
{
  "property_id": "9659447386",
  "listing_id": "2997964684",
  "status": "for_sale",
  "permalink": "15-Saint-Nicholas-Ave-Apt-2G_New-York_NY_10026_M96594-47386",
  "list_price": 195000,
  "list_date": "2026-07-01T20:01:48Z",
  "location": {
    "address": {
      "line": "11 St Nicholas Ave Unit 2G",
      "city": "Manhattan",
      "state": "New York",
      "state_code": "NY",
      "postal_code": "10026"
    }
  },
  "description": {
    "beds": 1,
    "baths": 1,
    "sqft": 700,
    "type": "coop",
    "sub_type": "co_op",
    "year_built": 1900
  },
  "search_context": {
    "location": {
      "postalCode": "10026"
    },
    "statuses": [
      "for_sale"
    ]
  }
}
```

### Pricing

The Actor charges only unique properties successfully saved to the default Dataset. Apify selects your account tier automatically.

| Apify plan tier | Price per property | Equivalent per 1,000 properties |
|---|---:|---:|
| Free | $0.001 | $1.00 |
| Bronze | $0.0009 | $0.90 |
| Silver | $0.0008 | $0.80 |
| Gold | $0.00075 | $0.75 |
| Platinum | $0.00075 | $0.75 |
| Diamond | $0.00075 | $0.75 |

Empty searches, duplicate properties, and unavailable optional enrichment are free. Use `maxTotalResults` and Apify's maximum charge per run to control the collection size and billing ceiling.

### Related Actors

| Actor | Best for |
|---|---|
| [Fotocasa Spain Property Listings Scraper](https://apify.com/datascraperes/fotocasa-property-search-scraper) | Searching sale, rental, and shared-accommodation listings across Spain. |
| [Google Maps Business Scraper | $1 per 1,000](https://apify.com/datascraperes/actor-google-maps) | Adding nearby businesses, amenities, contact details, ratings, and coordinates to location research. |

### Limits and data quality

Each run accepts up to 1,000 locations and returns at most 10,000 unique properties. `maxResultsPerLocation` limits each search area, while `maxTotalResults` limits the combined Dataset. Available counts and fields vary by location, listing status, current public inventory, and output mode. Photos, coordinates, open houses, branding, history, tax data, and other optional values may be absent.

Property listings and advertised values change frequently. Rerun the Actor when freshness matters, use ZIP codes for focused samples, and test broad multi-location inputs at a small limit before scaling. When some requested data is unavailable, the Actor preserves saved properties and reports a partial outcome in `SUMMARY`. A stopped search with no saved properties is not proof that the selected area has no listings. Review the outcome and use a smaller or more focused search when needed.

### Frequently asked questions

#### Which location formats can I use?

Use a city together with its two-letter state code, a five-digit or ZIP+4 postal code, or a state code alone. A city without `stateCode` is invalid.

#### Which output mode should I choose?

Use `compact` for lightweight inventory and pricing exports, `standard` for additional market fields, and `full` for the richest search response including photos and open houses when available. Enable details or history only when you need those additional lookups.

#### Are duplicate properties charged more than once?

No. Each unique property saved to the default Dataset triggers one result charge per run.

### Responsible use

Use public property data responsibly. You are responsible for complying with applicable laws, privacy and data-protection requirements, and the source website's terms, and for confirming that your intended use is permitted.

### Support

Open an issue in the Actor's **Issues** tab and include a reproducible input and run ID. Mention the affected location, filters, expected result, and observed result so the issue can be investigated.

# Actor input Schema

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

Add each search area as a simple form. Enter city and state together, a ZIP code, or only a state code. Leave unused fields blank.

## `listingStatuses` (type: `array`):

Choose purchase, rental, or recently sold properties.

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

Lowest listing price to include.

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

Highest listing price to include.

## `minBeds` (type: `number`):

Minimum bedroom count.

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

Minimum bathroom count.

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

Optional Realtor property-type values, for example single_family.

## `maxResultsPerLocation` (type: `integer`):

Stop after this many unique properties for each location.

## `maxTotalResults` (type: `integer`):

Hard run-wide result limit across all locations. Apify's maximum charge per run can impose a lower billing limit.

## `outputMode` (type: `string`):

Choose compact, standard, or the richest listing record.

## `fetchDetails` (type: `boolean`):

Add a detail lookup for every returned property.

## `fetchHistory` (type: `boolean`):

Add listing event history for every returned property. Automatically enables property details.

## `requestDelaySeconds` (type: `number`):

Pause between paginated search requests.

## Actor input object example

```json
{
  "locations": [
    {
      "city": "Austin",
      "stateCode": "TX"
    }
  ],
  "listingStatuses": [
    "for_sale"
  ],
  "minPrice": 100000,
  "maxPrice": 500000,
  "minBeds": 2,
  "minBaths": 1,
  "propertyTypes": [
    "single_family"
  ],
  "maxResultsPerLocation": 10,
  "maxTotalResults": 20,
  "outputMode": "full",
  "fetchDetails": false,
  "fetchHistory": false,
  "requestDelaySeconds": 0.2
}
```

# Actor output Schema

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

Properties saved by the run.

## `summary` (type: `string`):

Aggregate progress, failure, billing, and transport metrics.

# 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": [
        {
            "city": "Austin",
            "stateCode": "TX"
        }
    ],
    "listingStatuses": [
        "for_sale"
    ],
    "minPrice": 100000,
    "maxPrice": 500000,
    "minBeds": 2,
    "minBaths": 1,
    "propertyTypes": [
        "single_family"
    ],
    "maxResultsPerLocation": 10,
    "maxTotalResults": 20,
    "outputMode": "full",
    "fetchDetails": false,
    "fetchHistory": false,
    "requestDelaySeconds": 0.2
};

// Run the Actor and wait for it to finish
const run = await client.actor("datascraperes/realtor-property-search").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": [{
            "city": "Austin",
            "stateCode": "TX",
        }],
    "listingStatuses": ["for_sale"],
    "minPrice": 100000,
    "maxPrice": 500000,
    "minBeds": 2,
    "minBaths": 1,
    "propertyTypes": ["single_family"],
    "maxResultsPerLocation": 10,
    "maxTotalResults": 20,
    "outputMode": "full",
    "fetchDetails": False,
    "fetchHistory": False,
    "requestDelaySeconds": 0.2,
}

# Run the Actor and wait for it to finish
run = client.actor("datascraperes/realtor-property-search").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": [
    {
      "city": "Austin",
      "stateCode": "TX"
    }
  ],
  "listingStatuses": [
    "for_sale"
  ],
  "minPrice": 100000,
  "maxPrice": 500000,
  "minBeds": 2,
  "minBaths": 1,
  "propertyTypes": [
    "single_family"
  ],
  "maxResultsPerLocation": 10,
  "maxTotalResults": 20,
  "outputMode": "full",
  "fetchDetails": false,
  "fetchHistory": false,
  "requestDelaySeconds": 0.2
}' |
apify call datascraperes/realtor-property-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datascraperes/realtor-property-search"
        }
    }
}
```

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/UQrXuMMWkLKBiJsYn/builds/o7AjxFvjB7Na76ePW/openapi.json
