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

Scrape Realtor.com property listings for sale, for rent and recently sold: price, beds, baths, sqft, address, agent contacts, photos, price and tax history, schools, value estimates and climate risk scores.

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

## Pricing

from $0.69 / 1,000 properties

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Realtor.com Scraper

**Realtor.com Scraper** extracts property listings from [Realtor.com](https://www.realtor.com): homes for sale, rentals and recently sold properties with price, beds, baths, square footage, full address and coordinates, listing agent and office contacts, photos, value estimates, price and tax history, schools and climate risk scores, as clean JSON, CSV or Excel.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Search any US city, ZIP code, neighborhood, county or state, or paste Realtor.com search and property URLs, filter by listing status and property type, and get 88 fields per home, including assigned schools, mortgage estimate and flood, fire, heat, wind and air risk scores.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Apify Actor: parsebird/realtor-scraper. Scrapes US property listings from Realtor.com (homes for sale, rentals, recently sold). Call via ApifyClient: client.actor("parsebird/realtor-scraper").call(run_input={"searchLocations": ["Austin, TX", "78701"], "listingStatus": "for_sale", "propertyType": "single_family", "maxItems": 100, "includePropertyDetails": true}). Inputs: searchLocations (array of strings: "City, ST", ZIP code, neighborhood "Zilker, Austin, TX", county "Travis County, TX", state "Texas" or a street address), startUrls (array of Realtor.com search URLs such as https://www.realtor.com/realestateandhomes-search/Austin_TX, /apartments/Miami_FL, /realestateandhomes-search/Denver_CO/show-recently-sold, with type-, price-, beds-, baths-, sqft-, lot-sqft- filters read from the URL; or property URLs /realestateandhomes-detail/..._M12345-67890), listingStatus (for_sale | for_rent | recently_sold, default for_sale, applies to searchLocations), propertyType (all | single_family | condos | townhomes | multi_family | land | mobile | farm, default all, applies to searchLocations), maxItems (integer, total properties across all searches, default 100, 0 = no limit), includePropertyDetails (boolean, default true: schools, property_history, tax_history, mortgage estimate, local flood/fire/heat/wind/air scores and severities, features). Output: one record per property with property_id, listing_id, status, href, list_price, list_price_min, list_price_max, price_per_sqft, last_sold_price, last_sold_date, days_on_market, list_date, address_line, address_city, address_state_code, address_postal_code, address_lat, address_lon, county_name, neighborhoods, beds, baths_consolidated, sqft, lot_sqft, year_built, property_type, description_text, tags, is_new_construction, is_foreclosure, is_pending, is_contingent, primary_agent_name, primary_agent_email, primary_agent_phone, primary_office_name, source_name, source_listing_id, hoa_fee, estimates_current, photo_urls, photo_count, rental_units, open_houses, has_details, scraped_at; with details also mortgage_monthly_payment, property_tax_rate, property_history, tax_history, assigned_schools, nearby_schools, local_flood_score, local_fire_score, local_heat_score, local_wind_score, local_air_score (each with *_severity), features. Pricing: pay per event, "property" per property saved plus "details" per property with full details. Full API spec: https://apify.com/parsebird/realtor-scraper/api. Get your token: https://console.apify.com/settings/integrations.
```

### What is Realtor.com Scraper?

**Realtor.com Scraper** turns [Realtor.com](https://www.realtor.com) search results and property pages into a structured dataset. Type a location such as **"Austin, TX"** or a ZIP code, pick **For sale**, **For rent** or **Recently sold**, and click **Start**. On October 18, 2026, Realtor.com showed 6,842 homes for sale in Austin, 14,239 rentals in Miami and 92,159 sold homes in Denver, and the actor can read searches of that size end to end.

It works as a **Realtor.com API alternative**: no account, API key or browser needed. You can also set up a search on Realtor.com in your browser, copy the URL and paste it in.

### What can Realtor.com Scraper do?

- 🔎 **Search by location.** City and state, ZIP code, neighborhood, county, whole state or a single street address.
- 🔗 **Paste Realtor.com URLs.** Search-results URLs keep their location, listing status and filters (property type, price, beds, baths, sqft, lot size). Property page URLs return that one home.
- 🏠 **For sale, for rent and sold.** Recently sold searches return the most recent sales first.
- 🏘️ **Property type filter.** Single family, condos, townhomes, multi-family, land, mobile homes, farms and ranches.
- 📋 **Full property details.** Assigned and nearby schools with ratings, price and listing history, tax history with assessments, mortgage estimate, HOA fee and the full feature list.
- 🌊 **Climate risk scores.** Flood (with FEMA zone), wildfire, heat, wind and air quality scores from 1 to 10 with severity labels.
- 💵 **Value estimates.** Current automated valuations from several providers (for example Cotality™, Quantarium and Collateral Analytics), with high and low range.
- 📈 **Past the 10,000-result limit.** Realtor.com stops paging at 10,000 results; the actor splits large searches into price ranges so a whole city or state can be read.
- 📅 **Scheduling.** Run daily or weekly with [Apify Schedules](https://docs.apify.com/platform/schedules) to track new listings and price changes.
- 🔌 **API and integrations.** Use the [Apify API](https://docs.apify.com/api/v2), or send results to Google Sheets, Zapier, Make, Slack or webhooks with [Apify integrations](https://docs.apify.com/platform/integrations). Export as JSON, CSV, Excel, XML or HTML.

### What data can you extract from Realtor.com?

| Field | Description |
|-------|-------------|
| `property_id`, `listing_id`, `href` | Realtor.com property id, listing id and listing URL |
| `status` | `for_sale`, `for_rent` or `sold` |
| `list_price`, `list_price_min`, `list_price_max` | Asking price or rent in USD; rental communities show a min/max range |
| `price_per_sqft`, `hoa_fee` | Price per square foot and monthly HOA fee |
| `last_sold_price`, `last_sold_date` | Previous sale |
| `list_date`, `days_on_market` | When the current listing went live, and days since then (empty on sold listings) |
| `address_line`, `address_city`, `address_state_code`, `address_postal_code` | Full address |
| `address_lat`, `address_lon`, `county_name`, `neighborhoods` | Coordinates, county and neighborhood names |
| `beds`, `baths_consolidated`, `sqft`, `lot_sqft`, `year_built` | Size and age of the home |
| `property_type`, `property_sub_type`, `stories`, `garage` | Home type and layout |
| `description_text`, `tags` | Listing description and feature tags (e.g. `central_air`, `hardwood_floors`) |
| `is_new_construction`, `is_foreclosure`, `is_pending`, `is_contingent` | Listing flags |
| `primary_agent_name`, `primary_agent_email`, `primary_agent_phone` | Listing agent contact (when shown on Realtor.com) |
| `primary_office_name`, `primary_office_phone`, `broker_name` | Listing office and broker |
| `source_name`, `source_listing_id` | MLS name and MLS listing number |
| `estimates_current` | Automated value estimates by provider |
| `photo_urls`, `photo_count`, `primary_photo` | Full-size listing photos |
| `rental_units`, `pets_cats_allowed`, `pets_dogs_allowed` | Rental floor plans and pet policy |
| `mortgage_monthly_payment`, `property_tax_rate` | Estimated monthly payment, loan, down payment, rate and tax rate (details) |
| `property_history`, `tax_history` | Price and listing events, yearly tax and assessment (details) |
| `assigned_schools`, `nearby_schools` | Schools with rating, grades, distance and student count (details) |
| `local_flood_score` … `local_air_score` | Flood, fire, heat, wind and air risk scores and severities (details) |
| `features` | Full feature list grouped by category (details) |

### How to scrape Realtor.com

1. Open [Realtor.com Scraper](https://apify.com/parsebird/realtor-scraper) in Apify Console and sign in (or create a free account).
2. Type one or more **Locations**, for example `Austin, TX` or `78701`.
3. Pick the **Listing status** (For sale, For rent or Recently sold) and, if you like, a **Property type**.
4. Or paste **Realtor.com URLs** copied from your browser: search pages or single property pages.
5. Set **Max properties**. Start with 10-50 to test.
6. Leave **Include property details** on for schools, history, mortgage and risk scores, or turn it off for search data only.
7. Click **Start**, then download the results from the **Output** tab as JSON, CSV or Excel, or read them through the API.

### How much does it cost to scrape Realtor.com?

Realtor.com Scraper uses **pay-per-event** pricing. Compute and proxy costs are included in the event prices; there are no other usage charges for the run.

| Event | Free | Bronze | Silver | Gold |
|-------|------|--------|--------|------|
| `property` (per property saved) | $0.00089 | $0.00079 | $0.00069 | $0.00069 |
| `details` (per property with full details) | $0.00059 | $0.00049 | $0.00039 | $0.00039 |
| Per 1,000 properties, details off | **$0.89** | **$0.79** | **$0.69** | **$0.69** |
| Per 1,000 properties, details on | **$1.48** | **$1.28** | **$1.08** | **$1.08** |

For example, 1,000 Austin homes for sale with full details cost $1.48 on the Free plan, or $0.89 without details. `details` is charged only for properties whose property page was loaded. Set a maximum cost per run in Apify Console and the actor stops when it's reached.

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `searchLocations` | string\[] | No\* | `[]` | City and state (`"Austin, TX"`), ZIP code (`"78701"`), neighborhood, county, state or street address |
| `startUrls` | URL\[] | No\* | `[]` | Realtor.com search or property URLs; the type is detected automatically |
| `listingStatus` | string | No | `for_sale` | `for_sale`, `for_rent` or `recently_sold` (applies to `searchLocations`) |
| `propertyType` | string | No | `all` | `all`, `single_family`, `condos`, `townhomes`, `multi_family`, `land`, `mobile`, `farm` (applies to `searchLocations`) |
| `maxItems` | integer | No | `100` | Total properties to return across all searches; `0` = no limit |
| `includePropertyDetails` | boolean | No | `true` | Load property pages for schools, history, mortgage, risk scores and features |
| `proxyConfiguration` | object | No | none | Optional proxy; the actor switches to Apify Proxy on its own if needed |

\* Give at least one location or URL.

**Search by location**

```json
{
    "searchLocations": ["Austin, TX"],
    "maxItems": 50
}
```

**Recently sold single-family homes**

```json
{
    "searchLocations": ["Denver, CO"],
    "listingStatus": "recently_sold",
    "propertyType": "single_family",
    "maxItems": 200
}
```

**Realtor.com URLs with filters**

```json
{
    "startUrls": [
        { "url": "https://www.realtor.com/realestateandhomes-search/Austin_TX/type-single-family-home/beds-3/price-300000-600000" },
        { "url": "https://www.realtor.com/apartments/Miami_FL" },
        { "url": "https://www.realtor.com/realestateandhomes-detail/6700-Tulloch-Way_Austin_TX_78754_M83959-32351" }
    ],
    "maxItems": 100
}
```

### Output example

One property with details on (lists shortened, agent contact masked):

```json
{
    "property_id": "7989332242",
    "listing_id": "3001951700",
    "status": "for_sale",
    "href": "https://www.realtor.com/realestateandhomes-detail/9802-Zion-Way_Austin_TX_78733_M79893-32242",
    "list_price": 625000,
    "price_per_sqft": 597,
    "last_sold_date": "2021-09-22",
    "days_on_market": 0,
    "list_date": "2026-10-18T02:15:37Z",
    "photo_count": 32,
    "address_line": "9802 Zion Way",
    "address_city": "Austin",
    "address_state_code": "TX",
    "address_postal_code": "78733",
    "address_lat": 30.345631,
    "address_lon": -97.8612,
    "county_name": "Travis",
    "neighborhoods": "Austin Lake Estates, West Austin",
    "beds": 2,
    "baths_consolidated": "2",
    "sqft": 1047,
    "lot_sqft": 14505,
    "year_built": 1965,
    "property_type": "single_family",
    "description_text": "Tucked beneath a canopy of towering trees in highly sought-after Austin Lake Estates, this updated '60s fishing cabin blends original charac...",
    "tags": ["central_air", "central_heat", "community_clubhouse", "community_outdoor_space", "community_park"],
    "is_new_construction": false,
    "is_pending": false,
    "primary_agent_name": "Jane Smith",
    "primary_agent_email": "jane@example.com",
    "primary_agent_phone": "5125550100",
    "primary_office_name": "Coldwell Banker Realty",
    "source_name": "UnlockMLS",
    "source_listing_id": "7487574",
    "hoa_fee": 54,
    "estimates_current": [
        { "source": { "type": "corelogic", "name": "Cotality™" }, "estimate": 530500, "estimate_high": 574300, "estimate_low": 486800, "date": "2026-10-05", "is_best_home_value": true },
        { "source": { "type": "quantarium", "name": "Quantarium" }, "estimate": 510897, "estimate_high": 648839, "estimate_low": 372954, "date": "2026-10-14", "is_best_home_value": false }
    ],
    "photo_urls": ["https://ap.rdcpix.com/62514f69c46cf0e4708de23e2093ee45l-m1880588193r.jpg"],
    "mortgage_monthly_payment": 4422,
    "mortgage_loan_amount": 500000,
    "mortgage_down_payment": 125000,
    "mortgage_rate": 0.07247,
    "property_tax_rate": 0.01188,
    "property_history": [
        { "date": "2026-10-18", "event_name": "Listed", "price": 625000, "price_change": 0, "source_name": "UnlockMLS", "source_listing_id": "7487574" }
    ],
    "tax_history": [
        { "year": 2026, "tax": 7110, "assessment_building": 78631, "assessment_land": 401369, "assessment_total": 480000 }
    ],
    "assigned_schools": [
        { "name": "West Ridge Middle School", "rating": 10, "parent_rating": 2, "distance_in_miles": 3.2, "education_levels": ["middle"], "grades": ["6", "7", "8"], "funding_type": "public", "student_count": 885, "assigned": true }
    ],
    "local_flood_score": 1,
    "local_flood_severity": "minimal",
    "local_flood_fema_zone": ["X (unshaded)"],
    "local_fire_score": 1,
    "local_fire_severity": "Minimal",
    "local_heat_score": 8,
    "local_heat_severity": "Severe",
    "local_wind_score": 6,
    "local_wind_severity": "Major",
    "local_air_score": 2,
    "local_air_severity": "Minor",
    "has_details": true,
    "scraped_at": "2026-10-18T06:25:14Z"
}
```

With details off, the detail fields (`mortgage_*`, `property_history`, `tax_history`, schools, `local_*`, `features`) are `null` and `has_details` is `false`. Download the dataset in JSON, CSV, Excel, XML or HTML from the **Output** tab.

### Use the Realtor.com Scraper API

Start the actor and read its results from your own code with the Apify API clients. Find your token in [Apify Console → Settings → Integrations](https://console.apify.com/settings/integrations).

**Python** ([apify-client](https://docs.apify.com/api/client/python/)):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("parsebird/realtor-scraper").call(run_input={
    "searchLocations": ["Austin, TX", "78704"],
    "listingStatus": "for_sale",
    "propertyType": "single_family",
    "maxItems": 200,
})
for home in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(home["address_line"], home["list_price"], home["beds"], home["local_flood_score"])
```

**JavaScript** ([apify-client](https://docs.apify.com/api/client/js/)):

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('parsebird/realtor-scraper').call({
    startUrls: [{ url: 'https://www.realtor.com/apartments/Miami_FL' }],
    maxItems: 100,
    includePropertyDetails: false,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((home) => console.log(home.address_line, home.list_price, home.primary_agent_phone));
```

### Use cases

- **Real estate investors:** find homes by price, size and type, and compare asking prices with automated value estimates.
- **Market research:** analyse prices, price per square foot, days on market and inventory by ZIP code, city or state.
- **Comparable sales:** pull recently sold homes with sale dates and price history for valuation work.
- **Rental analysis:** collect rents, floor plans and pet policies across a metro area.
- **Lead generation:** list agents, offices and brokers with their contact details.
- **Risk and insurance:** combine flood (FEMA zone), fire, heat, wind and air scores with property data.
- **Relocation and schools:** compare homes by assigned school ratings.

### How it works

1. Each location is matched to a Realtor.com city, ZIP code, neighborhood, county, state or address; each URL is read for its location, status and filters.
2. The actor pages through the search results, newest listings first (sold searches: latest sales first), and removes duplicates across searches.
3. Searches with more than 10,000 results are split into price ranges so they can be read past Realtor.com's paging limit.
4. With **Include property details** on, it loads each property page for schools, history, mortgage, risk scores and features.
5. Records are saved as they come in, and each property is charged once, when it's saved. If Realtor.com starts refusing requests, the actor switches to Apify Proxy by itself.

### FAQ

**How many properties can I scrape?**
Set `maxItems` to `0` to read a whole search. In our tests on Apify, 1,000 properties with full details took 36 seconds, and 12,000 Chicago rentals without details took about 100 seconds.

**Why does a search return a little fewer properties than Realtor.com's total?**
Realtor.com counts listings, and some homes have more than one listing (for example, listed by two agents, or for sale and for rent at once). The actor returns each property once. When a search is split into price ranges, the few listings without any price are left out.

**How is `days_on_market` calculated?**
It's the number of days since the current listing's `list_date`. It resets when a home is relisted, and it's empty on sold listings because their clock has stopped.

**What's the sale price of a sold home?**
For sold homes, `last_sold_price` and `last_sold_date` are the sale, and `list_price` is the last asking price before the sale. A price filter in a sold search URL (e.g. `price-na-500000`) applies to the sale price.

**Why are the agent email or phone empty for some homes?**
The actor returns the contacts Realtor.com shows for the listing. Some listings show only the office, and some show no contact details.

**Do the filters in the input apply to pasted URLs?**
No. A search URL keeps its own location, status and filters (property type, price, beds, baths, sqft, lot size). **Listing status** and **Property type** apply to the **Locations** field. Filters the actor doesn't support are listed in the run log.

**Which time zone are dates in?**
Timestamps such as `list_date`, `last_update_date` and `scraped_at` are UTC. Plain dates (`last_sold_date`, `property_history.date`) are as Realtor.com shows them.

**Can I schedule runs and connect them to other tools?**
Yes. Use [Apify Schedules](https://docs.apify.com/platform/schedules) for recurring runs and [integrations](https://docs.apify.com/platform/integrations) for Google Sheets, Slack, Zapier, Make, n8n or webhooks. Results are also available through the [API](https://apify.com/parsebird/realtor-scraper/api).

**Something doesn't work or a field is missing?**
Open an issue on the actor's **Issues** tab with the input you used, and we'll look into it.

### Is it legal to scrape Realtor.com?

This actor collects publicly available property listing data from Realtor.com. Agent names, emails and phone numbers can be personal data, so if you process them, make sure you have a lawful basis under the privacy laws that apply to you (for example the CCPA), and respect Realtor.com's terms of use. Scraping public data is generally lawful, but you are responsible for how you use it. Read more in Apify's blog post [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/), and ask a lawyer if you're unsure.

### Other real estate scrapers

| Actor | What it does |
|-------|-------------|
| [Trulia Property Scraper](https://apify.com/parsebird/trulia-property-scraper) | US homes for sale and rent from Trulia |
| [Apartments.com Scraper & API](https://apify.com/parsebird/apartments-com-scraper) | US apartment rentals, prices and floor plans |
| [RentCafe Scraper](https://apify.com/parsebird/rentcafe-scraper) | US rental listings from RentCafe |
| [LoopNet Commercial Property Scraper](https://apify.com/parsebird/loopnet-scraper) | US and UK commercial real estate for sale and lease |
| [Airbnb Scraper & API](https://apify.com/parsebird/airbnb-scraper) | Short-term rental listings, prices and hosts |

# Changelog

This Actor's version history is a separate document: https://apify.com/parsebird/realtor-scraper/changelog.md

# Actor input Schema

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

Enter a city and state ("Austin, TX"), a ZIP code ("78701"), a neighborhood ("Zilker, Austin, TX"), a county ("Travis County, TX"), a state ("Texas") or a street address. Each location runs as its own search with the filters below.

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

Paste Realtor.com search-results URLs (e.g. https://www.realtor.com/realestateandhomes-search/Austin_TX) or property pages (e.g. https://www.realtor.com/realestateandhomes-detail/...). The URL type is detected automatically. Search URLs keep their own location, listing status and filters (property type, price, beds, baths, sqft, lot size); the Search filters section below applies to Locations only.

## `listingStatus` (type: `string`):

Pick which listings to search for the Locations above. Recently sold returns the most recent sales first.

## `propertyType` (type: `string`):

Limit the Locations searches to one type of property.

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

Maximum number of properties to return in total, shared across all locations and URLs. Set 0 for no limit. Start with 10-50 to test.

## `includePropertyDetails` (type: `boolean`):

Load each property page for schools, price and tax history, mortgage estimate, environmental risk scores (flood, fire, heat, wind, air) and the full feature list. Billed as an extra event per property. Turn off for search-result data only (price, address, beds, baths, agent, photos, value estimates).

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

Optional proxy to send requests through.

## Actor input object example

```json
{
  "searchLocations": [
    "Austin, TX"
  ],
  "listingStatus": "for_sale",
  "propertyType": "all",
  "maxItems": 20,
  "includePropertyDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "searchLocations": [
        "Austin, TX"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/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 = {
    "searchLocations": ["Austin, TX"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/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 '{
  "searchLocations": [
    "Austin, TX"
  ],
  "maxItems": 20
}' |
apify call parsebird/realtor-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/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/VuQIGmSMUuLBzWmHk/builds/ftmOpz1dVisgZzjOn/openapi.json
