# Zillow Suite Scraper - For Sale, For Rent & Sold Comps (`thirdwatch/zillow-suite-scraper`) Actor

Scrape public Zillow homes for sale, rentals, apartment buildings, and sold comparables. Get prices, beds, baths, area, Zestimates, taxes, days on market, photos, coordinates, and listing URLs. Optional details add agents, MLS IDs, history, schools, and property facts.

- **URL**: https://apify.com/thirdwatch/zillow-suite-scraper.md
- **Developed by:** [Thirdwatch](https://apify.com/thirdwatch) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.95 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## Zillow Suite Scraper — For Sale, For Rent & Sold Comps

Export public Zillow listings as clean, analysis-ready rows. One Actor covers the three
searches real-estate teams actually run:

- **For sale** — active listings with price, beds, baths, living area, lot size, Zestimate,
  days on market and the canonical listing URL.
- **For rent** — rental homes and apartment buildings with the advertised rent range and
  per-unit bed/price breakdown.
- **Sold** — recently sold comparables with sold date, living area, lot size, tax assessed
  value and Zestimate, for CMA and valuation work.

Give it a ZIP code, a city, a neighbourhood, a county, a Zillow search URL, or a single
property URL. Every row is normalised: prices and areas are numbers (never strings),
dates are ISO 8601 UTC, URLs are absolute, currency is explicit, and the query that
produced the row is stamped on it as `source_query`.

Optional **detail mode** visits each property page and adds year built, the full listing
description, listing agent name and phone, MLS ID, HOA fee, property tax rate, price
history, tax history, assigned schools, RESO facts and the complete photo set.

---

### What you get

| Use case | How |
|---|---|
| Comparative market analysis (CMA) | `searchMode: sold` on the subject ZIP code, then compare `price_per_sqft`, `living_area_sqft` and `date_sold` |
| Investment screening | `searchMode: forSale` + `minPrice`/`maxPrice` + `homeTypes`, then rank by `rent_zestimate` ÷ `price` for gross yield |
| Rental market pricing | `searchMode: forRent`, group `rent_min`/`rent_max` by `zip_code` and bedroom count |
| Agent and brokerage lead lists | `includeDetails: true` → `listing_agent_name`, `listing_agent_phone`, `brokerage_name` |
| Price-drop alerts | schedule a daily run and watch `price_change`, `price_change_date` and `price_reduction` |
| Territory heatmaps | `latitude` / `longitude` on every row feed straight into any GIS or mapping tool |
| Tax and assessment research | `tax_assessed_value` on search rows, full `tax_history` in detail mode |

---

### Input parameters

| Field | Type | Default | Description |
|---|---|---|---|
| `queries` | string[] | — | **Required.** One entry per search. ZIP code (`90210`), city + state (`Austin, TX`), neighbourhood (`Williamsburg, Brooklyn, NY`), county (`Travis County, TX`), a full Zillow search URL, or a `/homedetails/` property URL. |
| `searchMode` | string | `forSale` | `forSale`, `forRent` or `sold`. |
| `maxResults` | integer | `10` | Listings to return per entry in `queries`. |
| `includeDetails` | boolean | `false` | Also visit each property page for the extended field set. |
| `maxDetailPages` | integer | all | Cap on how many listings get the extra property-page visit. |
| `sortBy` | string | `relevance` | `relevance`, `newest`, `priceAsc`, `priceDesc`, `livingArea`, `lotSize`. |
| `minPrice` / `maxPrice` | integer | — | Sale price bounds, or monthly rent bounds in `forRent` mode. |
| `minBeds` / `minBaths` | integer | — | Minimum bedroom / bathroom count. |
| `homeTypes` | string[] | all | Any of `houses`, `townhomes`, `condos`, `apartments`, `multiFamily`, `lotsLand`, `manufactured`. |
| `proxyConfiguration` | object | US residential | Zillow only serves listing data to US IPs. Keep the default unless supplying your own. |

#### Example input

```json
{
  "queries": ["Austin, TX", "78704", "Travis County, TX"],
  "searchMode": "forSale",
  "maxResults": 200,
  "sortBy": "newest",
  "minPrice": 400000,
  "maxPrice": 900000,
  "minBeds": 3,
  "homeTypes": ["houses", "townhomes"],
  "includeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "US"
  }
}
````

Sold comparables for a single ZIP code:

```json
{
  "queries": ["90210"],
  "searchMode": "sold",
  "maxResults": 300
}
```

A single property, fully enriched:

```json
{
  "queries": ["https://www.zillow.com/homedetails/1740-Carla-Rdg-Beverly-Hills-CA-90210/20534384_zpid/"],
  "includeDetails": true
}
```

***

### Output fields

Every row carries the core block below. Rows produced with `includeDetails: true` (and rows
from a `/homedetails/` URL) additionally carry the detail block.

#### Core fields (every row)

| Field | Type | Description |
|---|---|---|
| `zpid` | string | Zillow property ID — the stable key for deduplication and joins |
| `property_url` | string | Absolute canonical listing URL |
| `source_query` | string | The `queries` entry that produced this row |
| `search_mode` | string | `forSale`, `forRent` or `sold` |
| `listing_status` | string | `FOR_SALE`, `FOR_RENT`, `SOLD`, `PENDING`, … |
| `status_text` | string | Human-readable status, e.g. "House for sale" |
| `home_type` | string | `SINGLE_FAMILY`, `CONDO`, `TOWNHOUSE`, `MULTI_FAMILY`, `LOT`, `MANUFACTURED`, … |
| `address` | string | Full one-line address |
| `street_address` | string | Street line only |
| `city` | string | City |
| `state` | string | Two-letter state code |
| `zip_code` | string | ZIP code |
| `country` | string | Country code, normally `USA` |
| `latitude` | number | Decimal degrees |
| `longitude` | number | Decimal degrees |
| `price` | number | List price, sold price, or starting rent — always numeric |
| `price_formatted` | string | Price as Zillow displays it |
| `currency` | string | ISO currency code, normally `USD` |
| `rent_min` | number | Lowest advertised rent (rental buildings) |
| `rent_max` | number | Highest advertised rent (rental buildings) |
| `price_per_sqft` | number | Computed `price ÷ living_area_sqft` |
| `bedrooms` | number | Bedroom count |
| `bathrooms` | number | Bathroom count (can be fractional, e.g. 2.5) |
| `living_area_sqft` | number | Interior area in square feet |
| `lot_area_value` | number | Lot size as Zillow reports it |
| `lot_area_unit` | string | Unit for `lot_area_value` (`acres` or `sqft`) |
| `lot_size_sqft` | number | Lot size normalised to square feet |
| `zestimate` | number | Zillow's estimated market value |
| `rent_zestimate` | number | Zillow's estimated monthly rent |
| `tax_assessed_value` | number | Latest assessed value |
| `days_on_zillow` | number | Days the listing has been live |
| `listed_date` | string | ISO 8601 UTC listing date |
| `date_sold` | string | ISO 8601 UTC sale date (sold mode) |
| `price_change` | number | Signed price change in currency units |
| `price_change_date` | string | ISO 8601 UTC date of that change |
| `price_reduction` | string | Reduction as displayed, e.g. "$25,000 (Jul 23)" |
| `open_house` | string | Next open-house slot, when advertised |
| `broker_name` | string | Listing brokerage from the search card |
| `agent_name` | string | Listing agent from the search card |
| `is_zillow_owned` | boolean | Zillow-owned inventory flag |
| `has_3d_model` | boolean | 3D home tour available |
| `has_video` | boolean | Video tour available |
| `is_building` | boolean | Row is an apartment building rather than one unit |
| `building_name` | string | Building name (rentals) |
| `units_available` | number | Available units in the building (rentals) |
| `units` | array | Per-unit `{beds, price, price_formatted}` (rentals) |
| `image_url` | string | Primary photo URL |
| `photo_count` | number | Number of photo URLs returned |
| `photos` | array | Full-size photo URLs |
| `scraped_at` | string | ISO 8601 UTC timestamp of the scrape |

#### Detail fields (`includeDetails: true`)

| Field | Type | Description |
|---|---|---|
| `year_built` | number | Construction year |
| `description` | string | Full listing description text |
| `county` | string | County name |
| `mls_id` | string | MLS listing number |
| `parcel_number` | string | Assessor parcel number (APN) |
| `zoning` | string | Zoning code |
| `architectural_style` | string | e.g. "Mediterranean" |
| `levels` / `stories` | string | Storey description |
| `property_condition` | string | e.g. "Updated/Remodeled" |
| `monthly_hoa_fee` | number | Monthly HOA dues |
| `property_tax_rate` | number | Effective tax rate percentage |
| `annual_tax_amount` | number | Most recent annual tax bill |
| `last_sold_price` | number | Previous sale price |
| `last_sold_date` | string | ISO 8601 UTC previous sale date |
| `on_market_date` | string | ISO 8601 UTC date the listing went live |
| `listing_agent_name` | string | Listing agent |
| `listing_agent_phone` | string | Listing agent phone |
| `listing_agent_email` | string | Listing agent email when published |
| `listing_agent_license` | string | Agent licence number |
| `brokerage_name` | string | Listing brokerage |
| `brokerage_phone` | string | Brokerage phone |
| `listing_last_updated` | string | ISO 8601 UTC last MLS update |
| `parking_capacity` | number | Total parking spaces |
| `garage_capacity` | number | Garage spaces |
| `has_garage` / `has_pool` / `has_cooling` / `has_heating` | boolean | Amenity flags |
| `fireplaces` | number | Fireplace count |
| `heating` / `cooling` / `appliances` / `flooring` / `view` | array | RESO fact lists |
| `virtual_tour_url` | string | External virtual-tour link |
| `page_view_count` | number | Zillow page views |
| `favorite_count` | number | Times saved by Zillow users |
| `price_history` | array | `{date, event, price, price_per_sqft, source}` |
| `tax_history` | array | `{date, tax_paid, assessed_value}` |
| `schools` | array | `{name, rating, grades, distance_miles}` |
| `open_house_schedule` | array | `{start, end}` in ISO 8601 UTC |
| `detail_photos` | array | Full photo set from the property page |

### Example output

```json
{
  "zpid": "20534384",
  "property_url": "https://www.zillow.com/homedetails/1740-Carla-Rdg-Beverly-Hills-CA-90210/20534384_zpid/",
  "source_query": "90210",
  "search_mode": "forSale",
  "listing_status": "FOR_SALE",
  "status_text": "House for sale",
  "home_type": "SINGLE_FAMILY",
  "address": "1740 Carla Rdg, Beverly Hills, CA 90210",
  "city": "Beverly Hills",
  "state": "CA",
  "zip_code": "90210",
  "latitude": 34.107277,
  "longitude": -118.398026,
  "price": 10495000,
  "currency": "USD",
  "price_per_sqft": 2395.57,
  "bedrooms": 4,
  "bathrooms": 5,
  "living_area_sqft": 4381,
  "lot_size_sqft": 20721,
  "zestimate": 9744000,
  "rent_zestimate": 23360,
  "tax_assessed_value": 2875317,
  "days_on_zillow": 45,
  "price_change": -1255000,
  "scraped_at": "2026-07-28T04:11:20+00:00"
}
```

***

### Use cases

- **Real estate investors**: Compare asking prices, rent estimates, taxes, and property facts across a buy box.
- **Agents and appraisers**: Build recent sold-comparable datasets for market analysis.
- **Property managers**: Monitor rental inventory and asking rents by ZIP code or neighbourhood.
- **Housing researchers**: Track listing supply, price changes, and days on market over time.

### Limitations

Read these before planning a large run.

- **Roughly 980 listings per search area.** Zillow serves a fixed 41 listings per page and
  stops returning new results after about 24 pages, regardless of how many homes match. A
  search for a large city will report tens of thousands of matches but only ever hand over
  the first ~980. To cover a whole metro, pass many narrow queries — ZIP codes,
  neighbourhoods or counties — rather than one broad city query. The Actor logs a warning
  when it hits this ceiling.
- **Sold prices are missing in non-disclosure states.** Texas, Utah, Idaho, Kansas,
  Louisiana, Mississippi, Missouri, Montana, New Mexico, North Dakota, Wyoming and Alaska do
  not publish sale prices, so `price` is empty on sold rows there. Sold date, address, beds,
  baths, area, lot size, Zestimate and tax assessed value are still returned. In disclosure
  states the sold price is populated. `includeDetails: true` adds `last_sold_price` where
  Zillow has it.
- **Rental buildings are shallower than homes.** Apartment complexes are returned as one
  building row with `is_building: true`, a `rent_min`/`rent_max` range and a `units` array,
  not as one row per unit. Building rows have no Zestimate, tax value or lot size, because
  Zillow does not attach a property record to them. Single-family rentals return the full
  field set.
- **Not every field exists on every listing.** New construction, off-market and
  agent-withheld listings routinely omit Zestimate, lot size, bathroom counts or photos.
  Missing values are returned as `null` or an empty string rather than being guessed.
- **Detail mode is much slower.** It costs one extra page load per listing and those pages
  are large. Use `maxDetailPages` to enrich only the top slice of a result set.
- **A share of requests get challenged.** Zillow rejects a minority of IP sessions outright.
  The Actor retries on a fresh session with backoff, which recovers almost all of them, but
  an unusually aggressive run can still finish short of `maxResults` on some queries.
- **US only, and US IPs only.** Zillow serves US inventory and refuses non-US traffic.
  Keep the preconfigured US connection settings.
- **Public data only.** No login, cookies or Zillow API key are used, so anything behind a
  Zillow account — saved searches, agent-only fields, contact-gated content — is out of
  scope.

***

### FAQ

**Can I scrape a specific property?**
Yes. Put its `/homedetails/…_zpid/` URL directly in `queries`; it is returned as a single
fully detailed row.

**Can I paste a Zillow search URL I built in the browser?**
Yes. Any `zillow.com` search URL in `queries` is used as the search seed. Filters set in the
Actor input are applied on top of it.

**How do I get more than ~980 results for a city?**
Split the city into ZIP codes or neighbourhoods and pass them all in `queries`. Results are
deduplicated on `zpid`, so overlapping areas are safe.

**Are rows deduplicated across runs?**
No — deduplication is per run. Use `zpid` as the primary key in your own store.

**Does it return Zestimates for sold homes?**
Yes, where Zillow publishes one. Sold rows carry `zestimate`, `rent_zestimate` and
`tax_assessed_value` alongside `date_sold`.

### Compared to alternatives

- **vs. maxcopell Zillow actors**: One actor covers for-sale listings, rentals, sold comparables, and optional property details with a shared schema.
- **vs. separate search and detail actors**: Detail enrichment is optional, so you can use fast listing rows for broad research and enrich only the properties that matter.

Last verified: 2026-07

***

Built by [Thirdwatch](https://thirdwatch.dev). Scrapes public listing data only.

# Actor input Schema

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

One entry per search. Accepts a ZIP code (90210), a city and state (Austin, TX), a neighbourhood (Williamsburg, Brooklyn, NY), a county (Travis County, TX), a full Zillow search URL, or a single /homedetails/ property URL (which is scraped as one detailed row).

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

forSale returns active for-sale listings, forRent returns rentals and apartment buildings, sold returns recently sold comparables.

## `maxResults` (type: `integer`):

How many listings to return for each entry in `queries`. For broad areas, use multiple ZIP codes or neighbourhoods to improve coverage.

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

Add year built, description, listing agent and phone, MLS ID, HOA fee, tax and price history, schools, property facts, and the full photo set. This option is slower than listing-only mode.

## `maxDetailPages` (type: `integer`):

Caps how many listings get the extra property-page visit when `includeDetails` is on. Leave empty to enrich every listing.

## `sortBy` (type: `string`):

Ordering applied by Zillow before pagination.

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

Minimum sale price, or minimum monthly rent when `searchMode` is forRent.

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

Maximum sale price, or maximum monthly rent when `searchMode` is forRent.

## `minBeds` (type: `integer`):

Minimum number of bedrooms for matching listings.

## `minBaths` (type: `integer`):

Minimum number of bathrooms for matching listings.

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

Leave empty for every property type. Each option maps to a Zillow property-type filter.

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

Zillow only serves listing data to US residential IPs. Keep the default unless you are supplying your own US proxies.

## Actor input object example

```json
{
  "queries": [
    "Austin, TX"
  ],
  "searchMode": "forSale",
  "maxResults": 10,
  "includeDetails": false,
  "sortBy": "relevance",
  "homeTypes": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "Austin, TX"
    ]
};

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

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Zillow Suite Scraper - For Sale, For Rent & Sold Comps",
        "description": "Scrape public Zillow homes for sale, rentals, apartment buildings, and sold comparables. Get prices, beds, baths, area, Zestimates, taxes, days on market, photos, coordinates, and listing URLs. Optional details add agents, MLS IDs, history, schools, and property facts.",
        "version": "1.0",
        "x-build-id": "UOgVAmtRtawafFnq4"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/thirdwatch~zillow-suite-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-thirdwatch-zillow-suite-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/thirdwatch~zillow-suite-scraper/runs": {
            "post": {
                "operationId": "runs-sync-thirdwatch-zillow-suite-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/thirdwatch~zillow-suite-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-thirdwatch-zillow-suite-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "queries"
                ],
                "properties": {
                    "queries": {
                        "title": "Locations or Zillow URLs",
                        "type": "array",
                        "description": "One entry per search. Accepts a ZIP code (90210), a city and state (Austin, TX), a neighbourhood (Williamsburg, Brooklyn, NY), a county (Travis County, TX), a full Zillow search URL, or a single /homedetails/ property URL (which is scraped as one detailed row).",
                        "default": [
                            "Austin, TX"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchMode": {
                        "title": "Search mode",
                        "enum": [
                            "forSale",
                            "forRent",
                            "sold"
                        ],
                        "type": "string",
                        "description": "forSale returns active for-sale listings, forRent returns rentals and apartment buildings, sold returns recently sold comparables.",
                        "default": "forSale"
                    },
                    "maxResults": {
                        "title": "Max results per location",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "How many listings to return for each entry in `queries`. For broad areas, use multiple ZIP codes or neighbourhoods to improve coverage.",
                        "default": 10
                    },
                    "includeDetails": {
                        "title": "Fetch full property details",
                        "type": "boolean",
                        "description": "Add year built, description, listing agent and phone, MLS ID, HOA fee, tax and price history, schools, property facts, and the full photo set. This option is slower than listing-only mode.",
                        "default": false
                    },
                    "maxDetailPages": {
                        "title": "Max detail pages per location",
                        "minimum": 0,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Caps how many listings get the extra property-page visit when `includeDetails` is on. Leave empty to enrich every listing."
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "relevance",
                            "newest",
                            "priceAsc",
                            "priceDesc",
                            "livingArea",
                            "lotSize"
                        ],
                        "type": "string",
                        "description": "Ordering applied by Zillow before pagination.",
                        "default": "relevance"
                    },
                    "minPrice": {
                        "title": "Min price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum sale price, or minimum monthly rent when `searchMode` is forRent."
                    },
                    "maxPrice": {
                        "title": "Max price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum sale price, or maximum monthly rent when `searchMode` is forRent."
                    },
                    "minBeds": {
                        "title": "Min bedrooms",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Minimum number of bedrooms for matching listings."
                    },
                    "minBaths": {
                        "title": "Min bathrooms",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Minimum number of bathrooms for matching listings."
                    },
                    "homeTypes": {
                        "title": "Property types",
                        "type": "array",
                        "description": "Leave empty for every property type. Each option maps to a Zillow property-type filter.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "houses",
                                "townhomes",
                                "condos",
                                "apartments",
                                "multiFamily",
                                "lotsLand",
                                "manufactured"
                            ],
                            "enumTitles": [
                                "Houses",
                                "Townhomes",
                                "Condos / co-ops",
                                "Apartments",
                                "Multi-family",
                                "Lots / land",
                                "Manufactured"
                            ]
                        },
                        "default": []
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Zillow only serves listing data to US residential IPs. Keep the default unless you are supplying your own US proxies.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
