# Zillow Property Search Scraper (`axesso_data/zillow-property-search-scraper`) Actor

The Zillow Property Search Scraper returns real-time listings by neighborhood, city, or ZIP code. Filter results by status, price, beds, baths, home type, and more to collect structured property data for market research and lead generation.

- **URL**: https://apify.com/axesso\_data/zillow-property-search-scraper.md
- **Developed by:** [AxCrawler](https://apify.com/axesso_data) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.10 / 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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

### How does Zillow Property Search Scraper work?

The Zillow Property Search Scraper extracts real-time property listings from Zillow based on a location, which can be an address, neighborhood, city, or ZIP code. The data extracted includes property attributes such as street address, city, state, ZIP code, price, number of bedrooms and bathrooms, living area, home type, home status, coordinates, Zestimate, rent Zestimate, tax assessed value, open house information, and the property identifier (zpid).

This Actor performs live queries directly to Zillow, ensuring that all data returned is current and accurate at the time of the request. There is no caching involved, so every invocation retrieves fresh listing data.

The extraction process involves receiving input parameters for one or more searches, executing the search request with the provided filters for each entry, and returning structured JSON output containing the matching listings together with pagination information such as the number of results per page, the total number of pages, and the total result count.

Search results can be narrowed down using a wide range of filters, including listing status, listing type, price range, number of beds and baths, living area, lot size, year built, HOA fees, monthly payment, home type flags, view and amenity flags, rental-specific flags, school filters, days on Zillow, sorting, and pagination.

### Input data

Input data must be provided in JSON format and must contain one mandatory array field "input". Each item in the array represents one search request and can include the following fields:

- `location` (Required): The location to search in. Can be an address, neighborhood, city, or ZIP code.
- `status` (Optional): Status type of the properties. Possible values: `forSale` (default), `forRent`, `recentlySold`.
- `listing_type` (Optional): Listing type. Possible values: `by_agent` (default), `by_owner_other` (for off market properties).
- `sortSelection` (Optional): Sorting of the result set. Possible values include `days` (Newest, default), `priced` (Price High to Low), `pricea` (Price Low to High), `paymentd`, `paymenta`, `beds`, `baths`, `size`, `lot`, `zest`, `zesta`, `saved`, `listingstatus`, `mostrecentchange`, `globalrelevanceex`, `featured`, `priorityscore`.
- `startPage` (Required): First page of the result set to retrieve (integer >= 1).
- `endPage` (Optional): Last page of the result set to retrieve. If omitted, the Actor keeps paginating until a page returns a 404 response or an empty results array.
- `output` (Optional): Output format. Possible values: `json` (default), `csv` (URL to the generated CSV file), `xlsx` (URL to the generated XLSX file).
- `doz` (Optional): Days on Zillow for sale/rent listings, or sold in last for sold listings. Possible values: `any`, `1`, `7`, `14`, `30`, `90`, `6m`, `12m`, `24m`, `36m`.
- `price_min` / `price_max` (Optional): Minimum and maximum price.
- `monthlyPayment_min` / `monthlyPayment_max` (Optional): Minimum and maximum monthly payment.
- `beds_min` / `beds_max` (Optional): Minimum and maximum number of bedrooms.
- `baths_min` / `baths_max` (Optional): Minimum and maximum number of bathrooms.
- `sqft_min` / `sqft_max` (Optional): Minimum and maximum living area in sqft.
- `lotSize_min` / `lotSize_max` (Optional): Minimum and maximum lot size in sqft.
- `built_min` / `built_max` (Optional): Minimum and maximum year built.
- `hoa_min` / `hoa_max` (Optional): Minimum and maximum HOA fee.
- `parkingSpots_min` (Optional): Minimum number of parking spots.
- `keywords` (Optional): Free text keywords to filter listings.
- `isSingleFamily`, `isMultiFamily`, `isCondo`, `isTownhouse`, `isApartment`, `isManufactured`, `isLotLand` (Optional): Home type filters.
- `isForSaleByAgent`, `isForSaleByOwner`, `isNewConstruction`, `isComingSoon`, `isAuction`, `isForSaleForeclosure`, `isZillowOwnedOnly` (Optional): Listing category filters.
- `hasAirConditioning`, `hasGarage`, `hasPool`, `singleStory`, `is3dHome`, `onlyWithPhotos`, `onlyPriceReduction` (Optional): Feature filters.
- `isWaterfront`, `isCityView`, `isMountainView`, `isParkView`, `isWaterView` (Optional): View filters.
- `onlyRentalPetsAllowed`, `onlyRentalCatsAllowed`, `onlyRentalSmallDogsAllowed`, `onlyRentalLargeDogsAllowed`, `onlyRentalIncomeRestricted`, `onlyRentalAcceptsApplications` (Optional): Rental specific filters.
- `enableSchools`, `isElementarySchool`, `isMiddleSchool`, `isPublicSchool`, `isPrivateSchool`, `greatSchoolsRating_min` (Optional): School related filters.

Multiple searches can be executed in a single run by providing multiple entries in the "input" array.

#### Pagination

Each input entry is paginated from `startPage` to `endPage`. If `endPage` is not provided, the Actor continues requesting subsequent pages until one of the following stop conditions is met:

- the API responds with HTTP 404 (a dataset item with `statusCode: 404` and `statusMessage: "NOT_FOUND"` is written for that page),
- the API responds with an empty `results` array,
- the last page reported by the API (`totalPages`) has been reached.

#### Example input

```json
{
  "input": [
    {
      "location": "New York, NY 10001",
      "status": "forSale",
      "startPage": 1,
      "endPage": 2,
      "sortSelection": "days"
    },
    {
      "location": "Santa Monica, CA",
      "status": "forRent",
      "startPage": 1,
      "beds_min": 2,
      "price_max": 5000,
      "output": "json"
    },
    {
      "location": "New York, NY 10001",
      "status": "forSale",
      "startPage": 99
    }
  ]
}
```

The third entry requests a page beyond the last available page, which returns HTTP 404 and can be used to test the 404 output line.

### Output data

Each property found lands as its own item in the dataset, together with the input parameters it originates from, the page it was found on, and the pagination metadata (`resultsPerPage`, `totalPages`, `totalResultCount`). If a page returns HTTP 404, a single item with `statusCode: 404` and `statusMessage: "NOT_FOUND"` is written instead.

```json
[
  {
    "location": "New York, NY 10001",
    "status": "forSale",
    "startPage": 1,
    "statusCode": 200,
    "statusMessage": "FOUND",
    "page": 1,
    "resultsPerPage": 41,
    "totalPages": 3,
    "totalResultCount": 117,
    "zpid": 347569676,
    "streetAddress": "215 W 28th St APT 12A",
    "unit": "Apt 12A",
    "city": "New York",
    "state": "NY",
    "zipcode": "10001",
    "country": "USA",
    "currency": "USD",
    "price": 2375000,
    "priceForHDP": 2375000,
    "bedrooms": 2,
    "bathrooms": 2,
    "livingArea": 1115,
    "homeType": "CONDO",
    "homeStatus": "FOR_SALE",
    "homeStatusForHDP": "FOR_SALE",
    "latitude": 40.747784,
    "longitude": -73.99409,
    "imgSrc": "https://photos.zillowstatic.com/fp/c560f4768ade03c776e9dc90acbaac99-p_e.jpg",
    "zestimate": 2336000,
    "rentZestimate": 7940,
    "taxAssessedValue": 466728,
    "daysOnZillow": -1,
    "timeOnZillow": 93365000,
    "isZillowOwned": false,
    "isNonOwnerOccupied": true,
    "listing_sub_type": {
      "is_FSBA": true,
      "is_openHouse": true
    },
    "openHouse": "Sat. 10-11am",
    "open_house_info": {
      "open_house_showing": [
        {
          "open_house_start": 1730566800000,
          "open_house_end": 1730570400000
        }
      ]
    }
  },
  {
    "location": "New York, NY 10001",
    "status": "forSale",
    "startPage": 1,
    "statusCode": 200,
    "statusMessage": "FOUND",
    "page": 1,
    "resultsPerPage": 41,
    "totalPages": 3,
    "totalResultCount": 117,
    "zpid": 2067600551,
    "streetAddress": "15 Hudson Yards #77E",
    "unit": "# 77E",
    "city": "New York",
    "state": "NY",
    "zipcode": "10001",
    "country": "USA",
    "currency": "USD",
    "price": 5750000,
    "bedrooms": 3,
    "bathrooms": 4,
    "livingArea": 2249,
    "homeType": "CONDO",
    "homeStatus": "FOR_SALE",
    "latitude": 40.75381,
    "longitude": -74.00255,
    "imgSrc": "https://photos.zillowstatic.com/fp/c62555153aed7be79b1c931c2f5a98b0-p_e.jpg",
    "zestimate": 5544900,
    "rentZestimate": 25000,
    "daysOnZillow": -1,
    "timeOnZillow": 435425000,
    "listing_sub_type": {
      "is_FSBA": true
    }
  },
  {
    "location": "New York, NY 10001",
    "status": "forSale",
    "startPage": 99,
    "statusCode": 404,
    "statusMessage": "NOT_FOUND",
    "page": 99
  }
]
```

### How much does Zillow Property Search Scraper cost?

Estimating the cost for this Actor depends on the volume of data and the number of search requests, including the number of pages retrieved per location. It is recommended to perform a test run with a small input sample to determine the cost for your specific requirements. The cost can then be extrapolated based on your total expected usage.

### What to consider when using this Actor?

This Actor integrates the full lifecycle of web data extraction ensuring stability and reliability:

1. **Proxy Rotation:** Uses a large proxy pool to avoid blocks by Zillow, ensuring smooth data retrieval.

2. **Geo Targeting:** Determines appropriate proxy location based on the provided search locations to minimize geo-restriction issues.

3. **Captcha and Blocking Handling:** Automatically manages captchas or temporary access blocks without user intervention.

4. **Stability and Reliability:** Designed to handle large scale requests with error handling and retries for consistent and dependable operation.

### More Zillow Actors by Axesso

Looking for a different slice of Zillow data? Axesso offers a full suite of real-time Zillow Actors - each one dedicated to a specific endpoint:

| Actor | What it does |
|---|---|
| [Zillow Accessibility Scores Scraper](https://apify.com/axesso_data/zillow-accessibility-scores-scraper) | The Zillow Accessibility Scores Scraper retrieves real-time walk, transit, and bike scores for any property listed on Zillow using ZPID ... |
| [Zillow Market Data Scraper](https://apify.com/axesso_data/zillow-market-data-scraper) | The Zillow Market Data Scraper retrieves real-time rental market data for any city, neighborhood, or ZIP code on Zillow, including ... |
| [Zillow Nearby Schools Scraper](https://apify.com/axesso_data/zillow-nearby-schools-scraper) | The Zillow Nearby Schools Scraper retrieves real-time data on schools near any property listed on Zillow using ZPID or URL. |
| [Zillow Price and Tax History Scraper](https://apify.com/axesso_data/zillow-price-tax-history-scraper) | The Zillow Price and Tax History Scraper retrieves real-time price and tax history for any property listed on Zillow using ZPID or URL. |
| [Zillow Property Details Scraper V2](https://apify.com/axesso_data/zillow-property-details-scraper-v2) | The Zillow Property Details Scraper V2 fetches detailed, real-time property data by ZPID or URL from Zillow. |
| [Zillow Property Photos Scraper](https://apify.com/axesso_data/zillow-property-photos-scraper) | The Zillow Property Photos Scraper retrieves real-time photo galleries for any property listed on Zillow using ZPID or URL. |
| [Zillow Rent Estimate Scraper](https://apify.com/axesso_data/zillow-rent-estimate-scraper) | The Zillow Rent Estimate Scraper retrieves real-time rent zestimates, market summaries, and comparable rental floorplans for any ... |
| [Zillow Search by Address Scraper](https://apify.com/axesso_data/zillow-search-by-address-scraper) | The Zillow Search by Address Scraper retrieves real-time property data by address from Zillow, providing accurate details including ... |
| [Zillow Search by Coordinates Scraper](https://apify.com/axesso_data/zillow-search-by-coordinates-scraper) | The Zillow Search by Coordinates Scraper retrieves real-time property listings within a radius of any latitude and longitude point. |
| [Zillow Search by MLS Scraper](https://apify.com/axesso_data/zillow-search-by-mls-scraper) | The Zillow Search by MLS Scraper retrieves real-time property listings by MLS number from Zillow, returning matching addresses and ZPIDs. |
| [Zillow Search by Polygon Scraper](https://apify.com/axesso_data/zillow-search-by-polygon-scraper) | The Zillow Search by Polygon Scraper retrieves real-time property listings within a custom map area defined by polygon coordinates. |
| [Zillow Similar Properties Scraper](https://apify.com/axesso_data/zillow-similar-properties-scraper) | The Zillow Similar Properties Scraper retrieves real-time listings of comparable homes for sale near any property on Zillow using ... |
| [Zillow Similar Rental Properties Scraper](https://apify.com/axesso_data/zillow-similar-rental-properties-scraper) | The Zillow Similar Rental Properties Scraper retrieves real-time listings of comparable rental homes near any property on Zillow using ... |
| [Zillow Similar Sold Properties Scraper](https://apify.com/axesso_data/zillow-similar-sold-properties-scraper) | The Zillow Similar Sold Properties Scraper retrieves real-time data on recently sold comparable homes near any property on Zillow using ... |
| [Zillow Zestimate History Scraper](https://apify.com/axesso_data/zillow-zestimate-history-scraper) | The Zillow Zestimate History Scraper retrieves historical Zestimate value estimates for any property listed on Zillow using ZPID or URL. |

All Axesso Actors are built and maintained to the same standards: real-time data without caching, high availability and active maintenance, consistent input patterns, and responsive support when you need help. If you are missing a specific endpoint, reach out - the portfolio is continuously growing.

### Where else you can find Axesso - Data Service solutions?

Axesso APIs and Actors are available through the Axesso own [API Portal](https://axesso.developer.azure-api.net/apis) and on [RapidAPI](https://rapidapi.com/search?term=axesso\&sortBy=ByRelevance). Our track record includes thousands of subscribers and stable service for over 5 years.

- **Direct API access**: You can also consume the same real-time Zillow data directly via the [Axesso Zillow API](https://axesso.de/zillow-api/) - ideal for high-volume or backend integrations.

### Use cases for our Axesso Actors

1. **Market Research:** Collect listing data by location to analyze supply, pricing, and property characteristics.

2. **Price Monitoring:** Track prices, price reductions, and days on market for listings in a given area.

3. **Inventory Management:** Automate the collection of available listings and their current status.

4. **Property Valuation:** Use Zestimates, rent Zestimates, and tax assessed values to assess property values.

5. **Agent Insights:** Identify listing categories such as for sale by agent or by owner within a market.

6. **Content Aggregation:** Collect property listings for real estate websites or applications.

7. **Lead Generation:** Extract listings matching specific criteria for buyer or renter outreach.

8. **Competitive Analysis:** Monitor market trends and competitor listings across neighborhoods and ZIP codes.

9. **Data Enrichment:** Enhance existing real estate databases with comprehensive, live listing data.

# Actor input Schema

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

List of inputs, each entry refers to one search to be executed. 'startPage' is required; 'endPage' is optional - without it the actor paginates until a 404 response or an empty results page. Full list of valid parameters can be found in the README tab.

## Actor input object example

```json
{
  "input": [
    {
      "location": "New York, NY 10001",
      "status": "forSale",
      "startPage": 1,
      "endPage": 2,
      "sortSelection": "days"
    },
    {
      "location": "Santa Monica, CA",
      "status": "forRent",
      "startPage": 1,
      "beds_min": 2,
      "price_max": 5000,
      "output": "json"
    },
    {
      "location": "New York, NY 10001",
      "status": "forSale",
      "startPage": 99
    }
  ]
}
```

# 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 = {
    "input": [
        {
            "location": "New York, NY 10001",
            "status": "forSale",
            "startPage": 1,
            "endPage": 2,
            "sortSelection": "days"
        },
        {
            "location": "Santa Monica, CA",
            "status": "forRent",
            "startPage": 1,
            "beds_min": 2,
            "price_max": 5000,
            "output": "json"
        },
        {
            "location": "New York, NY 10001",
            "status": "forSale",
            "startPage": 99
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("axesso_data/zillow-property-search-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 = { "input": [
        {
            "location": "New York, NY 10001",
            "status": "forSale",
            "startPage": 1,
            "endPage": 2,
            "sortSelection": "days",
        },
        {
            "location": "Santa Monica, CA",
            "status": "forRent",
            "startPage": 1,
            "beds_min": 2,
            "price_max": 5000,
            "output": "json",
        },
        {
            "location": "New York, NY 10001",
            "status": "forSale",
            "startPage": 99,
        },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("axesso_data/zillow-property-search-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 '{
  "input": [
    {
      "location": "New York, NY 10001",
      "status": "forSale",
      "startPage": 1,
      "endPage": 2,
      "sortSelection": "days"
    },
    {
      "location": "Santa Monica, CA",
      "status": "forRent",
      "startPage": 1,
      "beds_min": 2,
      "price_max": 5000,
      "output": "json"
    },
    {
      "location": "New York, NY 10001",
      "status": "forSale",
      "startPage": 99
    }
  ]
}' |
apify call axesso_data/zillow-property-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,axesso_data/zillow-property-search-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/0bXtUsoFcAKVulosM/builds/pema64Xcj1gevCZiA/openapi.json
