# Realtor.com Property Scraper (`scrapelabsapi/realtor-com-scraper`) Actor

- **URL**: https://apify.com/scrapelabsapi/realtor-com-scraper.md
- **Developed by:** [ScrapeLabs](https://apify.com/scrapelabsapi) (community)
- **Categories:** Agents, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Realtor.com Scraper | Extract Realtor.com Property Data at Scale

Scrape detailed **Realtor.com property listings** from search and detail URLs with this Apify Actor.  
The actor collects structured real estate data such as price, beds, baths, sqft, address, coordinates, photos, and more.

If you need a reliable **Realtor.com data scraper** for lead generation, market research, comps analysis, or real estate intelligence workflows, this actor is built for that use case.

### What This Realtor.com Scraper Extracts

For each property detail page, the actor can return:

- Property URL / permalink
- Listing status
- Property ID
- List price
- Beds and baths
- Sqft and stories
- Property subtype / type
- Year built
- Address object
- Coordinates (latitude/longitude structure)
- Photos array (with optional floorplan filtering)

Dataset fields are aligned with the Actor storage view in `.actor/actor.json`.

### Key Features

- Scrape from **Realtor.com search URLs** and **direct detail URLs**
- Supports `BUY`, `RENT`, and `SELL` search interpretation
- Pagination support for search pages (`listingEndPage`)
- Global max cap for detail pages (`maxItems`)
- Optional floorplan filtering (`includeFloorplans`)
- Retry and backoff handling for rate limiting (including HTTP `429`)
- Automatic Apify proxy usage via residential proxy manager for request stability

### Input

#### `startUrls` (required)
One or more Realtor.com URLs:
- Search URL example: `https://www.realtor.com/realestateandhomes-search/Las-Vegas_NV`
- Detail URL example: `https://www.realtor.com/realestateandhomes-detail/...`

#### `includeFloorplans` (boolean, default: `true`)
- `true`: keep regular photos and floorplans
- `false`: remove floorplan images from output photos

#### `maxItems` (integer, default: `20`)
Maximum number of property detail pages to scrape across all inputs.

#### `listingEndPage` (integer, default: `1`)
- `1`: only first search page
- `0`: paginate automatically until no new listing URLs are found
- `>1`: stop at that search page number

#### `searchTerms` (string, optional)
Optional label used for logging context.

#### `searchMode` (`BUY` | `RENT` | `SELL`, default: `BUY`)
Controls search URL interpretation and conversion logic.

#### `proxyConfiguration` (object, optional)
Proxy configuration object from Apify input schema.  
The actor’s request layer is configured to use residential proxy flow for outgoing requests.

### Example Input

```json
{
  "startUrls": [
    "https://www.realtor.com/realestateandhomes-search/Las-Vegas_NV",
    "https://www.realtor.com/realestateandhomes-detail/8209-Spring-Arts-Ave_Las-Vegas_NV_89129_M18560-54834"
  ],
  "includeFloorplans": true,
  "maxItems": 50,
  "listingEndPage": 3,
  "searchTerms": "las vegas homes",
  "searchMode": "BUY",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
````

### Output

Results are stored in the default dataset as structured JSON rows, ready for:

- CSV/JSON export
- BI dashboards
- CRM enrichment
- Real estate market analysis pipelines

### Common Use Cases

- Real estate listing aggregation
- Property comps and neighborhood analysis
- Lead generation and prospecting
- Rental market monitoring
- Investment property scouting

### SEO Keywords

Realtor.com scraper, Realtor data scraper, Realtor listing scraper, real estate data extraction, property listing scraper, home price scraper, rental listing scraper, Apify Realtor scraper, scrape Realtor.com listings, extract Realtor property details.

### Notes

- Respect Realtor.com terms and applicable legal requirements in your jurisdiction.
- Website structure may change over time; if parsing drift occurs, update selectors/extractors in `src/`.

# Actor input Schema

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

📋 Paste one or more Realtor.com URLs.

✅ Supported:
• 🗺️ Search URLs (city/area pages)
• 🏡 Detail URLs (single property pages)

💡 You can mix both in one run.

## `includeFloorplans` (type: `boolean`):

🖼️ Keep floor plan images in the photos output.
❌ Disable to keep only regular property photos.

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

🎯 Total cap for property detail pages across all input URLs.

## `listingEndPage` (type: `integer`):

⏹️ Stop pagination at this page number.

1️⃣ = first page only
0️⃣ = auto-stop when no new listings are found

## `searchTerms` (type: `string`):

📝 Optional tag/label for logs (example: "las vegas homes").
ℹ️ Actual scraping targets always come from Start URLs.

## `searchMode` (type: `string`):

🏷️ Controls URL interpretation:
• 🛒 BUY = homes for sale
• 🏢 RENT = rentals/apartments
• 💼 SELL = seller-oriented pages

## `proxyConfiguration` (type: `object`):

🛡️ Configure proxy preferences for reliability.
⚡ Starts direct when possible, then uses stronger proxy fallback when blocked.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.realtor.com/realestateandhomes-search/Las-Vegas_NV",
    "https://www.realtor.com/realestateandhomes-detail/8209-Spring-Arts-Ave_Las-Vegas_NV_89129_M18560-54834"
  ],
  "includeFloorplans": true,
  "maxItems": 10,
  "listingEndPage": 1,
  "searchTerms": "las vegas",
  "searchMode": "BUY",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "startUrls": [
        "https://www.realtor.com/realestateandhomes-search/Las-Vegas_NV",
        "https://www.realtor.com/realestateandhomes-detail/8209-Spring-Arts-Ave_Las-Vegas_NV_89129_M18560-54834"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapelabsapi/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 = {
    "startUrls": [
        "https://www.realtor.com/realestateandhomes-search/Las-Vegas_NV",
        "https://www.realtor.com/realestateandhomes-detail/8209-Spring-Arts-Ave_Las-Vegas_NV_89129_M18560-54834",
    ],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapelabsapi/realtor-com-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.realtor.com/realestateandhomes-search/Las-Vegas_NV",
    "https://www.realtor.com/realestateandhomes-detail/8209-Spring-Arts-Ave_Las-Vegas_NV_89129_M18560-54834"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call scrapelabsapi/realtor-com-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapelabsapi/realtor-com-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Realtor.com Property Scraper",
        "version": "0.1",
        "x-build-id": "tpT10dvdBiSbfxbz3"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapelabsapi~realtor-com-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapelabsapi-realtor-com-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scrapelabsapi~realtor-com-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapelabsapi-realtor-com-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scrapelabsapi~realtor-com-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapelabsapi-realtor-com-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "🔗 Start URLs (Search or Detail)",
                        "type": "array",
                        "description": "📋 Paste one or more Realtor.com URLs.\n\n✅ Supported:\n• 🗺️ Search URLs (city/area pages)\n• 🏡 Detail URLs (single property pages)\n\n💡 You can mix both in one run.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeFloorplans": {
                        "title": "🧱 Include Floor Plans",
                        "type": "boolean",
                        "description": "🖼️ Keep floor plan images in the photos output.\n❌ Disable to keep only regular property photos.",
                        "default": true
                    },
                    "maxItems": {
                        "title": "📦 Max Properties to Scrape",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "🎯 Total cap for property detail pages across all input URLs.",
                        "default": 10
                    },
                    "listingEndPage": {
                        "title": "📄 Listing End Page",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "⏹️ Stop pagination at this page number.\n\n1️⃣ = first page only\n0️⃣ = auto-stop when no new listings are found",
                        "default": 1
                    },
                    "searchTerms": {
                        "title": "🔍 Search Terms (Optional)",
                        "type": "string",
                        "description": "📝 Optional tag/label for logs (example: \"las vegas homes\").\nℹ️ Actual scraping targets always come from Start URLs.",
                        "default": "las vegas"
                    },
                    "searchMode": {
                        "title": "🎯 Search Mode (BUY / RENT / SELL)",
                        "enum": [
                            "BUY",
                            "RENT",
                            "SELL"
                        ],
                        "type": "string",
                        "description": "🏷️ Controls URL interpretation:\n• 🛒 BUY = homes for sale\n• 🏢 RENT = rentals/apartments\n• 💼 SELL = seller-oriented pages",
                        "default": "BUY"
                    },
                    "proxyConfiguration": {
                        "title": "🌐 Proxy Configuration",
                        "type": "object",
                        "description": "🛡️ Configure proxy preferences for reliability.\n⚡ Starts direct when possible, then uses stronger proxy fallback when blocked."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
