# Realtor $1/1k - for large volume scrapes (`datasaurus/realtor-lite`) 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-lite.md
- **Developed by:** [datasaurus](https://apify.com/datasaurus) (community)
- **Categories:** Real estate
- **Stats:** 6 total users, 0 monthly users, 100.0% 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 Property Scraper

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 large-volume scrapes. 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)

### What data can be extracted?

| Data | Available information |
|---|---|
| Listing | Property ID, listing ID, listing slug, status, listing date and permalink |
| Pricing | Sale price, rental price range and price reduction amount |
| 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` |

Set your location and filters on Realtor.com, then copy the resulting search URL into `start_urls`. For example, use the website's listing-age filter to search for properties listed in the last seven days. Filters must be captured in the URL supplied to the Actor.

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"
    }
  ],
  "deduplicate_across_all_start_urls": true,
  "max_results": 100
}
```

`max_results` sets the maximum listings per start URL. Enable `deduplicate_across_all_start_urls` to remove duplicate listings across overlapping searches. See the **Input** tab for all configuration options.

### 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`):

Search page urls

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

This may reduce the total number of results to less than max_results if there are duplicates found. Duplicates are matched on the combined property_id and listing_id.

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

Select the maximum number of properties to scrape per start url.

## Actor input object example

```json
{
  "start_urls": [
    {
      "url": "https://www.realtor.com/realestateandhomes-search/Las-Vegas_NV"
    },
    {
      "url": "https://www.realtor.com/realestateandhomes-search/Las-Vegas_NV/type-farms-ranches,single-family-home,land,condo/beds-na-5/baths-1/features-htrvspdrwf/hoa-3000"
    },
    {
      "url": "https://www.realtor.com/apartments/Kansas-City_MO/type-apartments"
    }
  ],
  "deduplicate_across_all_start_urls": true,
  "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/realestateandhomes-search/Las-Vegas_NV/type-farms-ranches,single-family-home,land,condo/beds-na-5/baths-1/features-htrvspdrwf/hoa-3000"
        },
        {
            "url": "https://www.realtor.com/apartments/Kansas-City_MO/type-apartments"
        }
    ],
    "max_results": 40
};

// Run the Actor and wait for it to finish
const run = await client.actor("datasaurus/realtor-lite").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/realestateandhomes-search/Las-Vegas_NV/type-farms-ranches,single-family-home,land,condo/beds-na-5/baths-1/features-htrvspdrwf/hoa-3000" },
        { "url": "https://www.realtor.com/apartments/Kansas-City_MO/type-apartments" },
    ],
    "max_results": 40,
}

# Run the Actor and wait for it to finish
run = client.actor("datasaurus/realtor-lite").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/realestateandhomes-search/Las-Vegas_NV/type-farms-ranches,single-family-home,land,condo/beds-na-5/baths-1/features-htrvspdrwf/hoa-3000"
    },
    {
      "url": "https://www.realtor.com/apartments/Kansas-City_MO/type-apartments"
    }
  ],
  "max_results": 40
}' |
apify call datasaurus/realtor-lite --silent --output-dataset

```

## MCP server setup

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

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/RMipgV1bPWHBCAiaZ/openapi.json
