# Realtor.com All-in-One Scraper (`xtracto/realtor-all-in-one-scraper`) Actor

Scrape Realtor.com listings, property details, photos, agents, price history, and tax history - all in one actor. Search by URL, location, or map area.

- **URL**: https://apify.com/xtracto/realtor-all-in-one-scraper.md
- **Developed by:** [Xtractoo](https://apify.com/xtracto) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 All-in-One Scraper

**Listings, full property details, photos, agents, and addresses -- in one actor.**

Point it at a city, a ZIP, or a Realtor.com search URL. The actor returns
a clean, normalized dataset row for every property: address, geo
coordinates, list price, beds, baths, living area, lot size, year built,
property type, full-resolution photo URLs, and the listing agent's name,
phone, and brokerage.

### What it can do

- **Search by URL or location** -- supply a Realtor.com search-results URL,
  or a free-text location like "Austin, TX". The actor builds the right
  search URL automatically.
- **Auto-pagination** -- the actor walks every page of a search result up
  to the per-seed cap (default 50 pages). No "stopped at 40 listings"
  surprises on big metros.
- **Full property details** -- every listing is enriched with the full
  property page, not just the search-results summary. Address, photos,
  agent, and the rest are populated per row.
- **High-resolution photos** -- up to ~50 photo URLs per listing direct
  from Realtor's CDN, no auth required.
- **Listing agent contact** -- name, phone number, brokerage for every
  active listing.

### Use cases

- Real-estate market analytics, comparable-sales modelling.
- Investor lead lists -- agents, brokerages, neighborhoods.
- Filtered home-search products, neighborhood inventory tracking.
- Cross-source unification with Zillow data (the dataset schema is identical
  to our [Zillow All-in-One Scraper](https://apify.com/xtracto/zillow-all-in-one-scraper)).

### Why use this actor

- **Production-tested on Apify cloud.** The sample output below is real
  data from an actual run on Apify (run id `BC23gG...`, dataset
  `DSCTabz6Va9rHeMHl`).
- **One run, complete data.** Search + detail enrichment happen in the
  same pipeline. No second actor to wire up.
- **Normalized schema.** Unions cleanly with Zillow rows for portfolio-wide
  analytics.
- **Fast.** 5 listings emitted in ~6 seconds on the test run below; runs
  scale linearly with `maxItems`.

### Sample input

```json
{
  "locations": ["Austin, TX"],
  "status": ["for_sale"],
  "maxItems": 50,
  "maxConcurrency": 4,
  "maxRetries": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "US"
  }
}
````

Other ways to seed:

```json
{ "searchUrls": [{ "url": "https://www.realtor.com/realestateandhomes-search/Austin_TX" }] }
```

```json
{ "locations": ["94110", "Brooklyn, NY", "Austin, TX"], "maxItems": 200 }
```

### Sample output (real data from a live Apify run)

Five real Austin TX listings emitted on 2026-05-14 from `locations: ["Austin, TX"]`:

```json
{
  "source": "realtor",
  "sourceId": "9369011918",
  "url": "https://www.realtor.com/realestateandhomes-detail/4015-Margarita-St_Austin_TX_78723_M93690-11918",
  "address": {
    "line": "4015 Margarita St",
    "city": "Austin",
    "state": "TX",
    "zip": "78723",
    "lat": 30.292977,
    "lng": -97.6925
  },
  "status": "FOR_SALE",
  "price": 700000,
  "currency": "USD",
  "beds": 4,
  "baths": 3.5,
  "sqft": 2282,
  "lotSqft": 1512,
  "yearBuilt": 2022,
  "propertyType": "townhomes",
  "photos": [
    "https://ap.rdcpix.com/0f1732fda1bfb88b843986c6d7a49961l-m927859354s.jpg",
    "https://ap.rdcpix.com/0f1732fda1bfb88b843986c6d7a49961l-m1011188171s.jpg"
    /* ... 35 more photo URLs ... */
  ],
  "listingAgent": {
    "name": "Carolina Aceituno",
    "phone": "(512) 255-5050",
    "brokerage": "Keller Williams Realty -  Broker"
  },
  "priceHistory": [],
  "taxHistory": [],
  "scrapedAt": "2026-05-14T16:31:34Z"
}
```

Four more rows from the same run:

| sourceId    | Address                                  | Price     | Beds | Baths | sqft | Type           | Year | Agent             | Brokerage                                    | Photos |
|-------------|------------------------------------------|----------:|-----:|------:|-----:|----------------|-----:|-------------------|----------------------------------------------|-------:|
| 9797030113  | 3524 Gonzales St Unit 2A, Austin 78702   | $285,000  |    4 |   3.5 | 1925 | townhomes      | 2025 | Laura Ruiz        | HomeBase                                     |     36 |
| 7686835844  | 11602 Maybach Dr, Del Valle 78617        |  $55,000  |    3 |   2   | 1331 | single\_family  | 1996 | Dan O'Connell     | Berkshire Hathaway HomeServices Texas Realty |      1 |
| 9821033366  | 200 W 56th St Unit 8101, Austin 78751    | $574,999  |    3 |   3   | 1525 | multi\_family   |    - | Koenig Townhomes  |  -                                           |      1 |
| 8861052094  | 7024 Thistle Hill Way, Austin 78754      | $389,900  |    4 |   2.5 | 2788 | single\_family  | 1999 | MARY MERRELL      | Keller Williams Realty -  Broker             |     40 |

### Tips for best results

- **Residential proxy recommended.** Default is `RESIDENTIAL` / `US` --
  keep it. Datacenter IPs work too on most runs but residential is more
  reliable for sustained crawls.
- **Start small.** First run with `maxItems: 5` to confirm your input
  shape, then scale up.
- **One location at a time for large cities.** Pagination caps out around
  50 pages per location seed -- if you need every listing in NYC or LA,
  feed multiple ZIP codes or neighborhood-level slugs in `locations`.
- **Photos are CDN-direct.** Each URL in `photos` is a stable
  `ap.rdcpix.com` URL you can store or hot-link.

### Output dataset

Each row is pushed to the actor's **default dataset** as a flat JSON object
matching the schema above. Export to CSV, JSON, JSONL, XML, or Excel from
the Apify Console.

### Notes & limits

- The actor scrapes only publicly visible data -- no login, no agent-only
  MLS fields, no off-market records.
- `priceHistory` and `taxHistory` fields are present in the schema but may
  be empty for some listings depending on what Realtor surfaces server-side
  for that property.
- Bounding-box inputs (`boundingBoxes`) are accepted for forward
  compatibility but currently ignored -- use `locations` or `searchUrls`
  for area-based scraping.
- For technical / architectural details, see the repo's root README.

# Actor input Schema

## `searchUrls` (type: `array`):

Realtor.com search-results URLs to start from. The URL slug encodes the location, filters, and sort.

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

Free-text locations such as 'Austin, TX' or '94110'. Translated into Realtor geo slugs automatically.

## `boundingBoxes` (type: `array`):

Map-area searches as { north, south, east, west } in decimal degrees. Tiles with > 9,900 results are auto-subdivided.

## `status` (type: `array`):

Which listing statuses to collect.

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

Soft cap on the number of dataset rows to emit. Set to 0 for unlimited.

## `maxConcurrency` (type: `integer`):

Maximum number of concurrent HTTP requests. 4-6 is the sweet spot; higher values can trigger blocks.

## `maxRetries` (type: `integer`):

How many times to retry a request before giving up. Kasada-class blocks are never retried.

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

Required. Realtor.com is protected by Kasada and will block runs without a residential proxy.

## Actor input object example

```json
{
  "searchUrls": [
    {
      "url": "https://www.realtor.com/realestateandhomes-search/Austin_TX"
    }
  ],
  "locations": [],
  "boundingBoxes": [],
  "status": [
    "for_sale"
  ],
  "maxItems": 0,
  "maxConcurrency": 4,
  "maxRetries": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# 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 = {
    "searchUrls": [
        {
            "url": "https://www.realtor.com/realestateandhomes-search/Austin_TX"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("xtracto/realtor-all-in-one-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 = {
    "searchUrls": [{ "url": "https://www.realtor.com/realestateandhomes-search/Austin_TX" }],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("xtracto/realtor-all-in-one-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 '{
  "searchUrls": [
    {
      "url": "https://www.realtor.com/realestateandhomes-search/Austin_TX"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call xtracto/realtor-all-in-one-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Realtor.com All-in-One Scraper",
        "description": "Scrape Realtor.com listings, property details, photos, agents, price history, and tax history - all in one actor. Search by URL, location, or map area.",
        "version": "0.1",
        "x-build-id": "yuzJVJxyM1gMbJER1"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/xtracto~realtor-all-in-one-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-xtracto-realtor-all-in-one-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/xtracto~realtor-all-in-one-scraper/runs": {
            "post": {
                "operationId": "runs-sync-xtracto-realtor-all-in-one-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/xtracto~realtor-all-in-one-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-xtracto-realtor-all-in-one-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",
                "properties": {
                    "searchUrls": {
                        "title": "Search URLs",
                        "type": "array",
                        "description": "Realtor.com search-results URLs to start from. The URL slug encodes the location, filters, and sort.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "Free-text locations such as 'Austin, TX' or '94110'. Translated into Realtor geo slugs automatically.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "boundingBoxes": {
                        "title": "Map bounding boxes",
                        "type": "array",
                        "description": "Map-area searches as { north, south, east, west } in decimal degrees. Tiles with > 9,900 results are auto-subdivided.",
                        "default": []
                    },
                    "status": {
                        "title": "Listing status",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Which listing statuses to collect.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "for_sale",
                                "for_rent",
                                "sold",
                                "ready_to_build"
                            ]
                        },
                        "default": [
                            "for_sale"
                        ]
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Soft cap on the number of dataset rows to emit. Set to 0 for unlimited.",
                        "default": 0
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum number of concurrent HTTP requests. 4-6 is the sweet spot; higher values can trigger blocks.",
                        "default": 4
                    },
                    "maxRetries": {
                        "title": "Max retries per request",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "How many times to retry a request before giving up. Kasada-class blocks are never retried.",
                        "default": 5
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Required. Realtor.com is protected by Kasada and will block runs without a residential proxy."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
