# Realtor - Property Listings - $1/1k (`datasaurus/realtor`) Actor

Scrape property data from realtor.com. Fast and efficient. This scrapes the key information for each property and can run very quickly - therefore it is suitable for large volume scrapes. Scrapes properties for-sale and to-rent. n8n node: n8n-nodes-realtor

- **URL**: https://apify.com/datasaurus/realtor.md
- **Developed by:** [datasaurus](https://apify.com/datasaurus) (community)
- **Categories:** Real estate
- **Stats:** 6 total users, 0 monthly users, 92.9% runs succeeded, 3 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 property listings

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

<style>
  table th, table td {
    padding: 4px 8px !important; /* Adjust first number for top/bottom, second for left/right */
  }
</style>

## Realtor.com Scraper – Property Listings, Rentals & Real Estate Data

Extract structured **Realtor.com property listings** including **sale prices, rental price ranges, addresses, coordinates, property attributes and photos**. The Actor supports **for-sale and rental searches** and respects advanced filters in Realtor.com search URLs.

Designed for fast, listing-level collection, with optional property-page enrichment. Rental listings can also include amenities, pet policies, management contacts and individual units with prices and availability dates where returned by Realtor.com.

n8n node: [n8n-nodes-realtor](https://www.npmjs.com/package/n8n-nodes-realtor)

### Why use this Actor?

- Collect sale, rental and sold listings from one Actor, with multiple search URLs and cross-search deduplication.
- Use fast listing-only collection by default, or opt into full listing-page details and expanded advertiser/contact data.
- Filter searches by location, property type, price, bedrooms and bathrooms without building every filter into a URL.
- Keep rental-specific data such as unit availability, pet policies and rent ranges in structured output.

### What data can be extracted?

| Data | Available information |
|---|---|
| Listing | Property ID, listing ID, listing slug, status, listing date and permalink |
| Pricing | List price, rental price range and price reduction amount; last sold price and date when Realtor.com supplies them |
| Location | Address, city, state, postcode, country, coordinates and county information |
| Property | Bedrooms, bathrooms, floor area, lot area, property type, year built and garage details |
| Rental details | Community name, amenities, pet policies and application URL where available |
| Rental units | Unit-level bedrooms, bathrooms, floor area, rent and availability dates |
| Media | Primary photo, photo URLs and virtual-tour data where available |
| Contacts and source | Advertiser or management names, phone numbers, branding and listing-source metadata |
| Listing flags | Pending status, new-listing indicator and new-availability indicator |

Available fields depend on the listing.

### Use cases

- **Property market research** — examine listing prices, property types and locations.
- **Rental comparison** — compare rents, amenities and available units.
- **Listing monitoring** — collect new listings or price changes for comparison over time.
- **Geographic analysis** — compare listings across cities, postcodes and neighbourhoods.
- **Property discovery** — collect listings matching a defined search.

### Supported URLs

| Search | Example |
|---|---|
| For sale | `https://www.realtor.com/realestateandhomes-search/Las-Vegas_NV` |
| Filtered for sale | `https://www.realtor.com/realestateandhomes-search/Las-Vegas_NV/type-farms-ranches,single-family-home,land,condo/beds-na-5/baths-1/features-htrvspdrwf` |
| Rentals | `https://www.realtor.com/apartments/Kansas-City_MO/type-apartments` |
| Recently sold (last six months) | `https://www.realtor.com/realestateandhomes-search/Kansas-City_MO/show-recently-sold` |

Set your location and any advanced filters on Realtor.com, then copy the resulting search URL into `start_urls`. The Actor also accepts optional common filters in `search_filters` for location, status, property type, price, beds and baths. Those filters apply to every URL in the run. Leave the location override blank to use each URL's location. The `show-recently-sold` URL path filters to sold listings from the last six months; setting `listing_mode` to `sold` filters for sold listings without a date cutoff. `sold_date` and `sold_price` are available as top-level output fields and dataset columns, but may be null when Realtor.com does not return them.

Combine several search URLs in one run, including searches for different locations and both sale and rental listings.

### Input example

```json
{
  "start_urls": [
    {
      "url": "https://www.realtor.com/realestateandhomes-search/Las-Vegas_NV"
    },
    {
      "url": "https://www.realtor.com/apartments/Kansas-City_MO/type-apartments"
    }
  ],
  "search_filters": {
    "listing_mode": "for_sale",
    "property_types": ["single_family", "condos"],
    "min_price": 100000,
    "max_price": 750000,
    "min_beds": 2,
    "min_baths": 1
  },
  "extract_details": false,
  "deduplicate_across_all_start_urls": true,
  "max_results": 100
}
```

`max_results` sets the maximum listings per start URL. `search_filters` is optional; omit it to use each URL's existing filters. `listing_mode` can be `url`, `for_sale`, `for_rent` or `sold`. Enable `deduplicate_across_all_start_urls` to remove duplicate listings across overlapping searches. See the **Input** tab for all configuration options.

### Fast and detailed extraction

Fast listing-level extraction is the default. Set `extract_details` to `true` to make one additional webpage request per listing and add `property_details`, `agent_details`, `detail_status`, `detail_description`, `property_features`, `property_history`, `tax_history` and `detail_advertisers` to each record. The first two fields preserve the complete nested responses; the detail description, feature groups, histories and expanded advertisers are also promoted to top-level fields for easier dataset-table access. The detail query returns expanded descriptions, property feature groups, full photos, advertiser contact details, price history and tax history where Realtor.com provides them. This uses Realtor.com's internal `api.frontdoor.realtor.com/graphql` endpoint; it is not a documented public API, so its schema or access rules can change. Enrichment is best-effort: the listing is retained with `detail_status: "failed"` when the request fails, or `"unavailable"` when Realtor.com returns no detail object for that property.

Example from a detailed run (shortened to highlight the enrichment fields):

```json
{
  "property_id": "8148247703",
  "listing_id": "2998738770",
  "sold_price": null,
  "sold_date": "2023-01-05",
  "detail_status": "success",
  "property_details": {
    "status": "for_sale",
    "list_price": 12000,
    "description": {
      "beds": 2,
      "baths": 1,
      "sqft": 882,
      "lot_sqft": 3920,
      "year_built": 1923,
      "text": "2 bd, 1 bath bungalow in Kansas city. Classic front porch and simple layout..."
    },
    "details": [
      {
        "category": "Building and Construction",
        "text": ["Total Square Feet Living: 882", "Year Built: 1923"],
        "parent_category": "Features"
      }
    ],
    "property_history": [
      {"date": "2026-10-17", "event_name": "Price Changed", "price": 12000}
    ],
    "tax_history": [
      {"year": 2025, "tax": 295, "assessment": {"total": 3517, "land": 599, "building": 2918}}
    ]
  },
  "agent_details": {
    "advertisers": [{"name": "Tim Ray Team", "email": "tim@hslegacy.com", "phones": [{"number": "8166823338", "type": "Mobile"}]}],
    "consumer_advertisers": [{"type": "Agent", "agent_id": "2717270", "name": "Tim Ray Team"}],
    "source_agents": [{"office_name": "HomeSmart Legacy"}]
  }
}
```

The example is shortened for readability. Realtor.com may omit or return empty values for history, contact and other property fields. Detailed-mode records also expose these same values as top-level convenience fields, which are included in the dataset table view:

```json
{
  "detail_description": {"beds": 2, "baths": 1, "sqft": 882},
  "property_features": [{"category": "Building and Construction", "parent_category": "Features"}],
  "property_history": [{"date": "2026-10-17", "event_name": "Price Changed", "price": 12000}],
  "tax_history": [{"year": 2025, "tax": 295}],
  "detail_advertisers": [{"name": "Tim Ray Team", "email": "tim@hslegacy.com"}]
}
```

### Pricing

The Actor uses pay-per-event pricing:

| Delivered record | Event | Price |
| --- | --- | ---: |
| Listing without successful full-detail enrichment | `property-listing` | **$0.001 per property** |
| Listing with successful full-detail enrichment | `property-listing-detailed` | **$0.002 per property total** |
| Actor start | `apify-actor-start` (automatic) | **$0.02** |

Every delivered listing is charged exactly once. A detailed listing uses the $0.002 all-in event; it does not also incur the basic listing event. If detail enrichment fails or Realtor.com has no detail object, the retained listing is charged at the basic rate. Apify automatically charges one Actor-start event per GB of memory; at this Actor's configured 4 GB, that is four start events, or **$0.02 per run**. The Actor does not issue a manual start charge.

Examples, excluding taxes and any platform compute or proxy costs:

- 1,000 basic listings: **$1.00** in listing events + **$0.02** in start events = **$1.02**.
- 1,000 successfully enriched detailed listings: **$2.00** in listing events + **$0.02** in start events = **$2.02**.
- 800 basic and 200 successfully enriched listings: **$1.20** in listing events + **$0.02** in start events = **$1.22**.

These are the event prices configured in this Actor's local manifest. Confirm the published rates and the pay-per-event setting on the [Apify Store pricing page](https://apify.com/datasaurus/realtor/pricing) after the next Actor build/publish; local configuration alone does not change an already published Actor's live pricing.

### Output

Results are returned as **structured JSON**, with one record per property listing. Rental units are nested within `rental_units`; they are not separate listing records.

The example below retains the supplied field names and nesting, with the amenities list shortened for readability. Prices and availability dates are sample values.

```json
{
  "property_id": "7045794925",
  "listing_id": "2966787449",
  "listing": "1000-Berkley-Pkwy_Kansas-City_MO_64120_M70457-94925",
  "list_price": null,
  "rental_list_price_min": 1080,
  "rental_list_price_max": 3120,
  "location": {
    "address": {
      "line": "1000 Berkley Pkwy",
      "city": "Kansas City",
      "coordinate": {
        "lat": 39.116867,
        "lon": -94.572589
      },
      "country": "USA",
      "state_code": "MO",
      "postal_code": "64120"
    },
    "county": {
      "name": "Jackson",
      "fips_code": "29095"
    }
  },
  "status": "for_rent",
  "beds": null,
  "baths": null,
  "sqft": null,
  "lot_sqft": null,
  "type": "apartment",
  "year_built": 2018,
  "description": {
    "baths": null,
    "garage": null,
    "garage_min": null,
    "garage_max": null,
    "name": "Union Berkley Riverfront",
    "sub_type": null
  },
  "rental_features": [
    {
      "category": "Community Features",
      "text": [
        "Barbecue Area",
        " Conference Room",
        " Direct Access to Berkley Riverfront",
        " Fitness Center",
        " GE Energy Star Slate Finish Appliances",
        " High-speed Internet Ready",
        " Pool",
        " Yoga Studio & Group Cycling Studio by MyRide",
        "Dogs Allowed",
        "Cats Allowed"
      ],
      "parent_category": "Community"
    }
  ],
  "flags": {
    "is_pending": null,
    "is_new_listing": false,
    "has_new_availability": true
  },
  "primary_photo": "https://ar.rdcpix.com/d081a363af5c0871c3a694832929515bc-f3793748800s.jpg",
  "photos": [
    "https://ar.rdcpix.com/d081a363af5c0871c3a694832929515bc-f3793748800s.jpg",
    "https://ar.rdcpix.com/d081a363af5c0871c3a694832929515bc-f2505420430s.jpg",
    "https://ar.rdcpix.com/d081a363af5c0871c3a694832929515bc-f3210258712s.jpg"
  ],
  "virtual_tours": [],
  "list_date": "2024-04-12T18:14:55.000000Z",
  "source": {
    "id": "ZILL",
    "community_id": 4217650,
    "type": "community",
    "feed_type": "Syndicator Community"
  },
  "branding": [
    {
      "type": "Office",
      "photo": null,
      "name": null
    }
  ],
  "advertisers": [
    {
      "type": "management",
      "office": {
        "name": "Buckingham Management, LLC",
        "phones": [
          {
            "number": null,
            "type": "office",
            "primary": false,
            "trackable": null,
            "ext": null
          },
          {
            "number": "8169345204",
            "type": "primary",
            "primary": false,
            "trackable": null,
            "ext": null
          }
        ]
      },
      "phones": null,
      "rental_management": null
    },
    {
      "type": "community",
      "office": {
        "name": "Union Berkley Riverfront",
        "phones": [
          {
            "number": "8169345204",
            "type": "office",
            "primary": false,
            "trackable": null,
            "ext": null
          }
        ]
      },
      "phones": null,
      "rental_management": null
    }
  ],
  "price_reduced_amount": null,
  "permalink": "https://www.realtor.com/apartments/1000-Berkley-Pkwy_Kansas-City_MO_64120_M70457-94925",
  "rental_application_url": null,
  "rental_pet_policy": {
    "cats": true,
    "dogs": true,
    "dogs_small": false,
    "dogs_large": false
  },
  "rental_units": [
    {
      "availability": {
        "date": "2025-08-29"
      },
      "description": {
        "baths_consolidated": null,
        "baths": 1,
        "beds": 1,
        "sqft": 959
      },
      "list_price": 1700
    },
    {
      "availability": {
        "date": "2025-09-07"
      },
      "description": {
        "baths_consolidated": null,
        "baths": 1,
        "beds": 0,
        "sqft": 660
      },
      "list_price": 1310
    }
  ]
}
```

### AI agents and integrations

Connect chat clients such as **Claude and ChatGPT** to Apify through the [Apify MCP server](https://docs.apify.com/integrations/mcp) to discover and run eligible Actors from a conversation. Actor availability depends on pricing and permissions; see the MCP guide for current requirements.

The structured json output let agents work directly with prices, locations, property attributes and rental-unit availability.

Example requests:

> Collect listings from this Realtor.com sale search and return their prices, addresses, bedrooms and listing URLs.

> Collect rental listings from these search URLs, including rental price ranges, amenities and unit availability where available.

n8n node: [n8n-nodes-realtor](https://www.npmjs.com/package/n8n-nodes-realtor)

#### Official integration guides

- [AI integrations](https://docs.apify.com/integrations/ai) — connect Apify data collection with AI applications and agent frameworks.
- [Apify MCP server](https://docs.apify.com/integrations/mcp) — setup, authentication and Actor eligibility requirements.
- [n8n integration](https://docs.apify.com/integrations/n8n) — run Actors and retrieve their results in n8n workflows.

### Resources

- [Getting Started with Apify 1/4 - Introduction](https://www.youtube.com/watch?v=b_nep8vMnkc\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=1)

- [Getting Started with Apify 4/4 - Integrations](https://www.youtube.com/watch?v=bNACk1_S_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4)

- [Try Apify for Free - 2,000+ Pre-built Web Scraping and Automation Tools](https://www.youtube.com/watch?v=WQNgQVRG9_U)

- [Integration with Make, GitHub, Zapier, Google Drive, and other apps](https://apify.com/integrations)

- [How to Train ChatGPT on Your Own Data - Build a Custom AI Chatbot](https://www.youtube.com/watch?v=LcG919C4UeU)

- [Apify Platform Documentation](https://docs.apify.com/platform)

### Notes

- **Scope:** The Actor focuses on key listing data for large-volume collection. The output example shows the information it returns.
- **Deduplication:** Duplicate listings are matched on the combined `property_id` and `listing_id`. Deduplication across overlapping searches can reduce the number of records returned.
- **Limits:** `max_results` applies per start URL and is a cap rather than a guaranteed record count. Results depend on the matching listings available.
- **Request handling:** The Actor uses US residential proxies, dynamic request headers and session pooling to help reduce blocking. These measures do not guarantee that every request will succeed.
- **Output format:** JSON preserves nested location, contact, amenity and rental-unit data. Source field names are retained.
- **Missing values:** A null value means the information was not returned for that record; it should not be treated as zero or false.

### Support

For bugs, additional fields or supported search URL requests, use the Actor's **Issues** tab. New to Apify? See the [platform documentation](https://docs.apify.com/platform).

[Browse all Datasaurus scrapers](https://apify.com/datasaurus).

# Actor input Schema

## `start_urls` (type: `array`):

Realtor.com search URLs. Location is taken from each URL; URL filters are supported.

## `search_filters` (type: `object`):

Apply these filters to every URL. Use URLs directly for different filters per location.

## `deduplicate_across_all_start_urls` (type: `boolean`):

Match duplicates using property_id and listing_id.

## `extract_details` (type: `boolean`):

Fetch property details from Realtor.com's GraphQL endpoint, including feature groups, price and tax history, photos, and advertiser contact details where available. Uses one additional request per listing.

## `max_results` (type: `integer`):

Maximum listings to return for each search URL.

## Actor input object example

```json
{
  "start_urls": [
    {
      "url": "https://www.realtor.com/realestateandhomes-search/Las-Vegas_NV"
    },
    {
      "url": "https://www.realtor.com/apartments/Kansas-City_MO/type-apartments"
    },
    {
      "url": "https://www.realtor.com/realestateandhomes-search/Las-Vegas_NV/show-recently-sold"
    }
  ],
  "deduplicate_across_all_start_urls": true,
  "extract_details": false,
  "max_results": 40
}
```

# Actor output Schema

## `results` (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 = {
    "start_urls": [
        {
            "url": "https://www.realtor.com/realestateandhomes-search/Las-Vegas_NV"
        },
        {
            "url": "https://www.realtor.com/apartments/Kansas-City_MO/type-apartments"
        },
        {
            "url": "https://www.realtor.com/realestateandhomes-search/Las-Vegas_NV/show-recently-sold"
        }
    ],
    "max_results": 40
};

// Run the Actor and wait for it to finish
const run = await client.actor("datasaurus/realtor").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 = {
    "start_urls": [
        { "url": "https://www.realtor.com/realestateandhomes-search/Las-Vegas_NV" },
        { "url": "https://www.realtor.com/apartments/Kansas-City_MO/type-apartments" },
        { "url": "https://www.realtor.com/realestateandhomes-search/Las-Vegas_NV/show-recently-sold" },
    ],
    "max_results": 40,
}

# Run the Actor and wait for it to finish
run = client.actor("datasaurus/realtor").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 '{
  "start_urls": [
    {
      "url": "https://www.realtor.com/realestateandhomes-search/Las-Vegas_NV"
    },
    {
      "url": "https://www.realtor.com/apartments/Kansas-City_MO/type-apartments"
    },
    {
      "url": "https://www.realtor.com/realestateandhomes-search/Las-Vegas_NV/show-recently-sold"
    }
  ],
  "max_results": 40
}' |
apify call datasaurus/realtor --silent --output-dataset

```

## MCP server setup

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

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/fmnDRsUCpblu52dKJ/builds/0dtdXFjg3O0EahD6y/openapi.json
