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

Scrape Realtor.com for-sale, rental and sold listings by city, ZIP code or URL. Get prices, beds, baths, sqft, photos, price and tax history, schools and agent contacts as JSON, CSV or Excel. Flat $0.89 per 1,000 results with full details included. No login, cookies or proxies needed.

- **URL**: https://apify.com/batscrape/realtor-scraper.md
- **Developed by:** [BatScrape](https://apify.com/batscrape) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.89 / 1,000 property results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Realtor.com Scraper: For-Sale, Rental & Sold Listings with Full Property Details 🏡

Scrape Realtor.com by city, ZIP code, neighborhood or county, or paste any Realtor.com search or property URL, and export listings as clean JSON: price, beds, baths, size, address, coordinates, all photos, price and sale history, tax history, nearby schools, listing agents, HOA fee, value estimates, and flood and noise data. Pricing is transparent and flat per result. There's no Realtor.com account to log in with, no cookies, and no proxies to manage. Perfect for market research, investment screening, sold comps, rental market analysis, and PropTech data feeds on America's leading home-listing site.

💰 Price: $0.0005 flat per run + $0.00089/result (no query fee, full details included) 🌏 Coverage: Realtor.com USA: for sale, for rent and recently sold 📊 Data: Price, beds/baths, sqft, address, photos, price & tax history, schools, agents, estimates 🎯 Filters: Property type, price, beds, baths, size, lot, year built, amenities, days on market, radius, keyword, sort 🛡️ Flat Per-Result Pricing

### Quick Navigation

- [🧭 What Does This Actor Do?](#🧭-what-does-this-actor-do)
- [🏡 Features and Functionality](#🏡-features-and-functionality)
- [💰 Pricing: Transparent Event-Based Costs](#💰-pricing-transparent-event-based-costs)
- [🔑 Who Needs This?](#🔑-who-needs-this)
- [🗺️ Input Parameters](#🗺️-input-parameters)
- [💡 Input Strategy Guide](#💡-input-strategy-guide)
- [🔎 Example Requests](#🔎-example-requests)
- [📦 Output](#📦-output)
- [🔧 Troubleshooting](#🔧-troubleshooting)
- [❔ FAQ](#❔-faq)
- [📞 Contact](#📞-contact)

### 🧭 What Does This Actor Do?

This actor searches Realtor.com and pushes every listing to your dataset as structured JSON. There's no headless browser, no bot challenge to fight, and no login wall on your end. Give it locations, Realtor.com URLs, or both, and it queues exactly the searches needed. It deduplicates across queries and stays within your `maxItems` cap and pay-per-event budget as it goes.

**🔍 Location & URL Search**: search as many cities, ZIP codes, neighborhoods or counties as you like, or paste Realtor.com search URLs with their filters already applied. Property page URLs return that single property.

**🏷️ Buy, Rent or Sold**: switch between for-sale listings, rentals (including community rental floor plans) and recently sold homes, with a sold-within window for comps.

**📋 Full Property Details Included**: by default every result is the complete property record (description, all photos, price and tax history, schools, agents, estimates, flood and noise scores) at the same flat price as a summary.

### 🏡 Features and Functionality

| Feature                    | Description                                                                                 | Benefit                                                    |
| -------------------------- | ------------------------------------------------------------------------------------------- | ---------------------------------------------------------- |
| 💰 Flat Per-Result Pricing | One price per unique property delivered, whether it's a summary or has full details         | Predictable cost, with no query, detail or floor-plan fees |
| 🔍 Locations & URLs        | Cities, ZIP codes, neighborhoods, counties, Realtor.com search URLs and property URLs       | Start from whatever you already have                       |
| 🏷️ Buy / Rent / Sold       | For-sale, for-rent and recently sold listings, with a sold-within window                    | Listings, rentals and comps from one actor                 |
| 🧹 Cross-Query Dedup       | A property found by two locations or URLs is stored (and charged) once                      | Never pay twice for the same property                      |
| 🎯 Rich Filters            | Type, price, beds, baths, size, lot, year built, amenities, days on market, radius, keyword | Narrow results down at no extra cost                       |
| 📋 Full Details Included   | Price and tax history, schools, agents, HOA fee, estimates, flood and noise data            | No separate detail lookups to pay for                      |
| 🔧 Custom Map Function     | JavaScript function to reshape or enrich output on the fly                                  | Shape results to match your exact requirements             |
| 💵 Budget-Aware            | Every result is checked against the run's charge budget before it's stored                  | A run stops cleanly instead of overspending                |

### 💰 Pricing: Transparent Event-Based Costs

Pay-per-event pricing with no subscription and no hidden fees: a flat run fee, then one charge per unique property actually delivered.

#### Pricing Structure

| Event              | Price (USD) | Charged For                                         |
| ------------------ | ----------- | --------------------------------------------------- |
| 🚀 Actor Start     | $0.0005     | Once per run, regardless of input                   |
| 🏠 Property Result | $0.00089    | Each unique Realtor.com property actually delivered |

#### How Pricing Works

Every run charges a flat $0.0005 Actor Start fee once, however many locations or results you request. After that, each unique property stored in your dataset costs $0.00089, and nothing else is charged: full details, floor plans and photos are all included. A search that returns nothing costs only the run fee. For paying users, the first page of results (up to 42 properties) for each location or search URL is free. Property URLs you look up directly are always charged.

#### 💵 Real-World Pricing Examples

| Use Case                          | Configuration                                     | Total Cost | Breakdown                    |
| --------------------------------- | ------------------------------------------------- | ---------- | ---------------------------- |
| Quick sample                      | 1 location, 10 results                            | $0.0094    | $0.0005 + (10 × $0.00089)    |
| Single location, default settings | 1 location, up to 100 results                     | $0.0895    | $0.0005 + (100 × $0.00089)   |
| Multi-market sweep                | 5 locations, up to 100 results each (~500 unique) | $0.4455    | $0.0005 + (500 × $0.00089)   |
| Large market pull                 | 1 location, up to 5,000 results                   | $4.4505    | $0.0005 + (5,000 × $0.00089) |

Result counts vary from location to location. A small town or a tightly filtered search returns fewer properties (and costs less) than a big metro. The rows above are illustrative at the volumes shown, before the free first page for paying users.

### 🔑 Who Needs This?

- **📈 Market researchers & analysts**: track inventory, list prices, price cuts and days on market across metros.
- **💼 Investors & wholesalers**: screen for-sale and sold listings by price, size and lot to find deals and pull comps.
- **🏢 Agents & brokerages**: monitor competing listings, price reductions and recent sales in your farm area.
- **🏘️ Rental analysts & property managers**: follow asking rents and community floor plans with `mode: RENT`.
- **🧮 Appraisers & lenders**: pull sale history, tax assessments and value estimates for valuation work.
- **🤖 PropTech & data teams**: feed structured US listing data into apps, dashboards and models.

### 🗺️ Input Parameters

| Field                           | Description                                                                                                                                                                                                                                                                                                                                                                                                                                          | Default               |
| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- |
| `locations`                     | Cities, ZIP codes, neighborhoods or counties (`"Austin, TX"`, `"78701"`, `"Travis County, TX"`). Provide locations, start URLs, or both.                                                                                                                                                                                                                                                                                                             | —                     |
| `startUrls`                     | Realtor.com search URLs (they keep their own mode and filters) and property page URLs (one property each).                                                                                                                                                                                                                                                                                                                                           | —                     |
| `mode`                          | `BUY` (for sale) / `RENT` (for rent) / `SOLD` (recently sold). Applies to `locations`; search URLs use their own mode.                                                                                                                                                                                                                                                                                                                               | `BUY`                 |
| `maxResultsPerQuery`            | Properties per location or search URL. `0` = all available (Realtor.com shows at most 10,000 per search).                                                                                                                                                                                                                                                                                                                                            | `100`                 |
| `includeDetails`                | Full property record (on) or a lighter summary (off). Same price either way.                                                                                                                                                                                                                                                                                                                                                                         | `true`                |
| `includeFloorplans`             | Add floor plans to full property details (community rentals only).                                                                                                                                                                                                                                                                                                                                                                                   | `false`               |
| `type`                          | Property types: `single-family-home`, `multi-family-home`, `condo`, `condop`, `coop`, `townhome`, `apartments`, `mfd-mobile-home`, `farms-ranches`, `land`.                                                                                                                                                                                                                                                                                          | (all)                 |
| `sort`                          | For sale: `relevant`, `newest`, `newest-built`, `luxury`, `affordable`, `highest-price`, `lowest-price`, `open-house-date`, `recently-reduced`, `largest-sqft`, `lot-size`, `photo-count`. For rent: `best-match`, `recently-added`, `newest-built`, `luxury`, `affordable`, `highest-price`, `lowest-price`. Sold: `sold-date`, `newest-built`, `luxury`, `affordable`, `highest-price`, `lowest-price`, `largest-sqft`, `lot-size`, `photo-count`. | (Realtor.com default) |
| `minPrice` / `maxPrice`         | Price range in USD (monthly rent for rentals; listing price in sold mode).                                                                                                                                                                                                                                                                                                                                                                           | —                     |
| `minBed` / `maxBed`             | Bedroom range. `minBed: 0` includes studios.                                                                                                                                                                                                                                                                                                                                                                                                         | —                     |
| `minBath` / `maxBath`           | Bathroom range.                                                                                                                                                                                                                                                                                                                                                                                                                                      | —                     |
| `minSqft` / `maxSqft`           | Interior size range in square feet.                                                                                                                                                                                                                                                                                                                                                                                                                  | —                     |
| `minLotSqft` / `maxLotSqft`     | Lot size range in square feet.                                                                                                                                                                                                                                                                                                                                                                                                                       | —                     |
| `minYearBuilt` / `maxYearBuilt` | Year built range (1500–2100).                                                                                                                                                                                                                                                                                                                                                                                                                        | —                     |
| `keyword`                       | Listing text must contain this keyword, e.g. `"pool"`.                                                                                                                                                                                                                                                                                                                                                                                               | —                     |
| `radius`                        | Miles around the location (0–50).                                                                                                                                                                                                                                                                                                                                                                                                                    | —                     |
| `daysOnMarket`                  | Only listings added within this many days.                                                                                                                                                                                                                                                                                                                                                                                                           | —                     |
| `tags`                          | Required amenities: `garage-1-or-more`, `garage-2-or-more`, `garage-3-or-more`, `swimming-pool`, `spa-or-hot-tub`, `horse-facilities`.                                                                                                                                                                                                                                                                                                               | —                     |
| `includePending`                | Include pending and contingent listings.                                                                                                                                                                                                                                                                                                                                                                                                             | `true`                |
| `soldWithin`                    | Sold mode only: `1`, `3`, `6`, `12`, `24` or `36` months back.                                                                                                                                                                                                                                                                                                                                                                                       | `6`                   |
| `maxItems`                      | Overall cap across all locations and URLs combined. `0`/empty = unlimited (each query is still capped by `maxResultsPerQuery`).                                                                                                                                                                                                                                                                                                                      | `1000`                |
| `customMapFunction`             | `(object) => object` applied to every item. Must not be used for filtering.                                                                                                                                                                                                                                                                                                                                                                          | (none)                |

See [`INPUT_SCHEMA.json`](INPUT_SCHEMA.json) for the full schema.

### 💡 Input Strategy Guide

**Just want a quick sample?** Set `maxResultsPerQuery` to 10 and run one location. It's a cheap, fast check that the location and filters return what you expect.

**Already have a search set up on Realtor.com?** Copy the URL from your browser into `startUrls`. Its mode and filters (type, price, beds, baths, size, lot, days on market, radius, hide pending, page) are kept, and any filters you set in the input are applied on top.

**Pulling sold comps?** Use `mode: SOLD` with `sort: sold-date` and a `soldWithin` window, plus the same bed, bath and size range as your subject property. Note that sold prices are blank in non-disclosure states such as Texas.

**Covering a whole region?** List every city or ZIP code up front. Cross-query dedup means a property found by two overlapping locations is never charged twice, so one batched run never costs more than separate runs.

### 🔎 Example Requests

Search two cities for single-family homes under $600,000 with at least 3 bedrooms:

```json
{
    "locations": ["Austin, TX", "Round Rock, TX"],
    "mode": "BUY",
    "type": ["single-family-home"],
    "maxPrice": 600000,
    "minBed": 3,
    "maxResultsPerQuery": 200
}
```

Pull the last 3 months of sold comps in one ZIP code, newest sales first:

```json
{
    "locations": ["78701"],
    "mode": "SOLD",
    "sort": "sold-date",
    "soldWithin": "3",
    "maxResultsPerQuery": 100
}
```

Mix a filtered Realtor.com search URL with a single property page:

```json
{
    "startUrls": [
        {
            "url": "https://www.realtor.com/realestateandhomes-search/Austin_TX/type-condo/price-200000-500000"
        },
        {
            "url": "https://www.realtor.com/realestateandhomes-detail/48-East-Ave-1705_Austin_TX_78701_M93840-73561"
        }
    ],
    "maxResultsPerQuery": 50
}
```

### 📦 Output

One dataset item per unique Realtor.com property. A location that returns no matches simply adds no items; no placeholder row is stored.

Captured from a real run (`locations: ["Austin, TX", "78701"]`, `type: ["condo"]`, `minBed: 1`). The item is trimmed for brevity: arrays are cut to one or two entries, the long description is shortened with `…`, the signed Street View URL is shortened with `…`, and the listing agent's contact details are replaced with `…`:

```json
{
    "inputSource": "78701",
    "includeDetails": true,
    "id": "9384073561",
    "listingId": "2980201441",
    "permalink": "48-East-Ave-1705_Austin_TX_78701_M93840-73561",
    "url": "https://www.realtor.com/realestateandhomes-detail/48-East-Ave-1705_Austin_TX_78701_M93840-73561",
    "status": "for_sale",
    "listPrice": 520000,
    "lastSoldPrice": null,
    "soldOn": "2022-03-02",
    "listDate": "2025-04-04T17:12:02Z",
    "priceReducedAmount": 2500,
    "name": null,
    "type": "condos",
    "subType": "condo",
    "beds": 1,
    "baths": 1,
    "bathsFull": 1,
    "bathsHalf": null,
    "sqft": 749,
    "lotSqft": 61,
    "garage": null,
    "stories": 1,
    "yearBuilt": 2022,
    "units": null,
    "description": "Located in the heart of downtown Austin, #1705 offers unmatched access to the city's most exciting destinations…",
    "address": {
        "street": "48 East Ave Unit 1705",
        "locality": "Austin",
        "region": "TX",
        "postalCode": "78701",
        "county": "Travis",
        "countyFipsCode": "48453"
    },
    "coordinates": { "latitude": 30.256396, "longitude": -97.738839 },
    "photoCount": 11,
    "photos": [
        {
            "href": "https://ap.rdcpix.com/f2ba032c8172c56e67de1962b9114bb5l-m1247951936s.jpg",
            "tags": ["exterior"]
        }
    ],
    "streetViewUrl": "https://maps.googleapis.com/maps/api/streetview?…",
    "flags": {
        "isNewListing": false,
        "isPriceReduced": false,
        "isPending": false,
        "isContingent": false,
        "isForeclosure": false,
        "isNewConstruction": false,
        "isComingSoon": false
    },
    "hoaFee": 0,
    "taxHistory": [
        {
            "year": 2026,
            "tax": 8726,
            "assessment": { "building": 374849, "land": 51564, "total": 426413 }
        }
    ],
    "history": [
        {
            "date": "2026-03-19",
            "eventName": "Price Changed",
            "price": 520000,
            "sourceName": "UnlockMLS"
        },
        {
            "date": "2026-01-13",
            "eventName": "Price Changed",
            "price": 522500,
            "sourceName": "UnlockMLS"
        }
    ],
    "nearbySchools": [
        {
            "name": "Mathews Elementary School",
            "rating": 10,
            "levels": ["elementary"],
            "distance": 2,
            "fundingType": "public"
        }
    ],
    "details": [
        {
            "category": "Bedrooms",
            "parentCategory": "Interior",
            "text": ["Bedrooms: 1"]
        }
    ],
    "advertisers": [
        {
            "name": "…",
            "type": "seller",
            "email": "…",
            "href": "…",
            "office": "…",
            "phones": [{ "number": "…", "type": "Mobile" }]
        }
    ],
    "branding": [{ "type": "Agent", "name": "…", "photo": null }],
    "estimates": [
        {
            "source": "Collateral Analytics",
            "estimate": 526000,
            "date": "2026-09-15"
        }
    ],
    "mls": {
        "id": "AUTX",
        "name": "UnlockMLS",
        "listingId": "9946797",
        "type": "mls"
    },
    "local": {
        "noise": { "score": null },
        "flood": { "score": 1, "severity": "minimal" }
    },
    "floorplans": []
}
```

Notes on the fields:

- `includeDetails` tells the two shapes apart. With `includeDetails: false`, an item is a lighter summary keyed on `propertyId` (instead of `id`). It has `price`, `soldPrice`, a `location` object and up to 3 `photos`, plus `priceMin`/`priceMax` and similar ranges for community rentals. If a property's full details can't be loaded, that property comes back as a summary instead of being dropped.
- `inputSource` is the location or URL from your input that found the property.
- `lastSoldPrice` / `soldPrice` are often `null`, even for sold homes, because many states (such as Texas) don't disclose sale prices.
- Missing values are `null`, not absent, so every item of a shape has the same keys.

In the Apify Console, the dataset opens with ready-made table views of the same data:

| View             | Shows                                                                 |
| ---------------- | --------------------------------------------------------------------- |
| Overview         | One row per property: address, status, price, beds, baths, size, type |
| Pricing          | List price, price cut, last sale, HOA fee and listing flags           |
| Property details | Type, rooms, size, lot, year built, description                       |
| Location         | Full address, county, coordinates, Street View link                   |
| Price history    | One row per price or sale event                                       |
| Tax history      | One row per tax year                                                  |
| Nearby schools   | One row per school                                                    |
| Agents           | One row per listing agent or office                                   |
| Summaries        | For runs with `includeDetails` turned off                             |

### 🔧 Troubleshooting

#### ❓ Getting Few or No Results?

- ✅ Check `maxItems` / `maxResultsPerQuery`: the run stops once either is reached
- ✅ Check the charge budget: a run that can't afford another result stops cleanly rather than erroring
- ✅ Check the location spelling: use "City, ST", a 5-digit ZIP code or "County Name, ST"
- ✅ Loosen the filters: a narrow price, bed or year range combined with amenities can leave nothing
- ✅ Check the `sort` value: a sort that doesn't belong to the chosen mode is ignored (see the log)
- ✅ Confirm `locations` or `startUrls` isn't empty, and that start URLs are realtor.com URLs

#### 💰 Unexpected Costs?

Every run charges a flat $0.0005 Actor Start fee once, whatever you ask for. Beyond that, the cost is simply $0.00089 × unique properties delivered. There's no separate per-location, per-page, detail or floor-plan fee to budget for.

#### 💡 Want to Minimize Costs?

- ✅ Set `maxResultsPerQuery` to only what you actually need per location
- ✅ Set `maxItems` to a hard cap matching your budget
- ✅ Use filters to narrow results instead of scraping a whole market and filtering afterwards
- ✅ Batch overlapping locations into one run, since cross-query dedup means overlaps are never charged twice

### ❔ FAQ

**Do I need a Realtor.com account, cookies or proxies?**
No. Searches run through a backend service, so you don't need a login, cookies or proxies.

**Are full property details and floor plans extra?**
No. Every result costs the same $0.00089, whether it's a summary or a full property record, with or without floor plans.

**Can I use a Realtor.com URL with filters already applied?**
Yes. Paste search URLs (for sale, `/rentals/`, `/apartments/` or `/show-recently-sold`) into `startUrls`. Their filters are kept. Property page URLs work too.

**Does this actor download photos?**
No. It returns photo URLs (with room tags) but doesn't download or store image files itself.

**Which countries are covered?**
The United States, which is what Realtor.com lists. International listings aren't supported.

### 📞 Contact

Reach out to the maintainers directly for support.

- ✉️ Email: batscrape@gmail.com
- 💬 Discord: discord.com/invite/ZRANXwhWU
- 🐦 X (Twitter): x.com/batscrape
- 🛒 Apify: apify.com/batscrape

# Actor input Schema

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

Places to search on Realtor.com: a city ("Austin, TX"), ZIP code ("78701"), neighborhood or county ("Travis County, TX"). Each location is searched separately, and results are deduplicated across locations so you never pay twice for the same property. Provide locations, start URLs, or both.

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

Realtor.com URLs. Search pages (for example realtor.com/realestateandhomes-search/Austin_TX/type-condo/price-200000-500000, /rentals/..., /show-recently-sold) keep their own mode and filters. Property pages (realtor.com/realestateandhomes-detail/...) return that one property.

## `mode` (type: `string`):

Which listings to search for "Locations". Search URLs use the mode in the URL itself.

## `maxResultsPerQuery` (type: `integer`):

How many properties to fetch for each location or search URL. 0 means all available results (Realtor.com shows at most 10,000 per search).

## `includeDetails` (type: `boolean`):

On: each result is the full property (description, all photos, price and sale history, tax history, schools, agents, HOA fee, estimates, flood and noise data). Off: a lighter summary (price, beds, baths, size, address, up to 3 photos). Same price either way.

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

Add floor plans to full property details. Only community rentals (apartment buildings) have them.

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

Only return these property types. Leave empty for all types.

## `sort` (type: `string`):

Result order. For sale: relevant, newest, newest-built, luxury, affordable, highest-price, lowest-price, open-house-date, recently-reduced, largest-sqft, lot-size, photo-count. For rent: best-match, recently-added, newest-built, luxury, affordable, highest-price, lowest-price. Sold: sold-date, newest-built, luxury, affordable, highest-price, lowest-price, largest-sqft, lot-size, photo-count. A sort that doesn't fit the mode is ignored. Leave empty for Realtor.com's default order.

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

Minimum price. For rentals this is the monthly rent. In sold mode it filters on the listing price.

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

Maximum price. For rentals this is the monthly rent. In sold mode it filters on the listing price.

## `minBed` (type: `integer`):

Minimum number of bedrooms. 0 includes studios.

## `maxBed` (type: `integer`):

Maximum number of bedrooms.

## `minBath` (type: `integer`):

Minimum number of bathrooms.

## `maxBath` (type: `integer`):

Maximum number of bathrooms.

## `minSqft` (type: `integer`):

Minimum interior size in square feet.

## `maxSqft` (type: `integer`):

Maximum interior size in square feet.

## `minLotSqft` (type: `integer`):

Minimum lot size in square feet (1 acre = 43,560 sqft).

## `maxLotSqft` (type: `integer`):

Maximum lot size in square feet (1 acre = 43,560 sqft).

## `minYearBuilt` (type: `integer`):

Earliest year built.

## `maxYearBuilt` (type: `integer`):

Latest year built.

## `keyword` (type: `string`):

Only listings whose text contains this keyword, e.g. "pool" or "waterfront".

## `radius` (type: `integer`):

Widen the search to this many miles around the location (0-50).

## `daysOnMarket` (type: `integer`):

Only listings added to Realtor.com within this many days.

## `tags` (type: `array`):

Only listings that have all of these amenities.

## `includePending` (type: `boolean`):

Turn off to hide listings that are already pending or contingent.

## `soldWithin` (type: `string`):

Sold mode only: how far back to look for sales.

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

Overall cap across all locations and URLs combined. 0 or empty means unlimited (each location or URL is still separately capped by "Max results per location or URL").

## `customMapFunction` (type: `string`):

A function that takes each output object and returns a transformed object. MUST NOT be used for filtering — accounts using it for filtering may be banned. Leave empty to store items unchanged.

## Actor input object example

```json
{
  "locations": [
    "Austin, TX"
  ],
  "mode": "BUY",
  "maxResultsPerQuery": 100,
  "includeDetails": true,
  "includeFloorplans": false,
  "includePending": true,
  "soldWithin": "6",
  "maxItems": 1000,
  "customMapFunction": "(object) => { return {...object} }"
}
```

# Actor output Schema

## `overview` (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 = {
    "locations": [
        "Austin, TX"
    ],
    "maxResultsPerQuery": 100,
    "maxItems": 1000,
    "customMapFunction": (object) => { return {...object} }
};

// Run the Actor and wait for it to finish
const run = await client.actor("batscrape/realtor-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 = {
    "locations": ["Austin, TX"],
    "maxResultsPerQuery": 100,
    "maxItems": 1000,
    "customMapFunction": "(object) => { return {...object} }",
}

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

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

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

```

## CLI example

```bash
echo '{
  "locations": [
    "Austin, TX"
  ],
  "maxResultsPerQuery": 100,
  "maxItems": 1000,
  "customMapFunction": "(object) => { return {...object} }"
}' |
apify call batscrape/realtor-scraper --silent --output-dataset

```

## MCP server setup

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

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/1fzZzoAbq76QjrgGi/builds/VgTIA0PWoxnMzwIcg/openapi.json
