# Zillow Search Scraper (`crawl_craft/zillow-search-scraper`) Actor

Zillow shows only a few hundred homes per search. Get every listing from any search link, city or ZIP: for sale, for rent and sold, with price, Zestimate, beds, baths, photos, broker and agent details. Duplicates removed. No login or cookies.

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

## Pricing

from $1.00 / 1,000 results

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

Learn more: https://docs.apify.com/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

### 🚀 What is Zillow Search Scraper?

Zillow Search Scraper is an Apify Actor that collects listings from Zillow searches in bulk. Paste Zillow search links or type a city, ZIP code, county or neighborhood, and get one row per listing for homes for sale, homes for rent and recently sold homes, with price, Zestimate, address, beds, baths and photos. No login or cookies.

- 🔗 **Links or plain places.** Mix Zillow search links and places such as `Austin, TX`, `78701` or `Brooklyn NY` in one run. Typing a ZIP code is the quickest way to set up a Zillow zip code search scraper run.
- 🗺️ **Beyond one results page.** The default Pagination with zoom-in method is designed to return every listing of a search, even past the number of results Zillow shows on its own pages.
- 🎛️ **Filters in the form.** Set listing status, home types, price range, minimum bedrooms, days on Zillow and sort order on top of the filters already in your links.
- 📊 **Clear tables.** Results appear in sections such as price and value, location, photos and agent and broker, plus separate tables for photos, price history, open houses and rental units.
- ⚡ **Live results.** Listings arrive in the Output tab page by page while the run is going.
- 🔁 **No repeats.** Every Zillow listing scraper run saves a listing once, even when more than one of your searches finds it.
- 📦 **Easy export.** Export Zillow search results as JSON, CSV, Excel, XML or HTML, or read them through the API.

Click **Try for free**, add your searches and press **Start**.

### 📊 What data can you extract from Zillow?

The Actor saves one row per listing, so you can scrape Zillow listings into a clean table. From there, export Zillow data to Excel, or download JSON, CSV, XML or HTML. Fields marked "details" are filled only when **Property details** is on.

| Field | Description | Example |
|---|---|---|
| `zpid` | Zillow property ID (ZPID). | 305433145 |
| `listingPrice` | Asking price or monthly rent: amount, currency and formatted text. Empty for sold homes. | amount 400000, currency USD |
| `listingAddress` | Street, unit, city, state, ZIP code, county, neighborhood, time zone and full address. | 11900 Cimaizon Dr, Austin, TX 78725 |
| `coordinates` | Latitude and longitude of the home. | 30.217157, -97.63407 |
| `listingStatus` | forSale, forRent, recentlySold, pending, comingSoon and similar. | forSale |
| `propertyUrl` | Link to the listing on Zillow. | Zillow listing link |
| `cardType` | `home` for a single home, `building` for an apartment building with several units. | home |
| `homeType` | SINGLE_FAMILY, CONDO, TOWNHOUSE, MULTI_FAMILY, APARTMENT, MANUFACTURED, LOT and similar. | SINGLE_FAMILY |
| `bedrooms`, `bathrooms` | Number of bedrooms and bathrooms. | 4 and 3.0 |
| `livingArea`, `livingAreaUnit` | Living area in square feet and its unit. | 2174 and sqft |
| `lotArea`, `lotAreaSqft` | Lot size as value, unit and text, and converted to square feet. | 10115 |
| `zestimate` | Zillow's estimated market value in USD. | 395900 |
| `rentZestimate` | Zillow's estimated monthly rent in USD. | 2483 |
| `zestimateDiffPct` | How far the Zestimate is above (+) or below (-) the asking price, in percent. | -1.0 |
| `pricePerSqft` | Asking price divided by living area (for-sale homes). | 184 |
| `taxAssessedValue` | Tax assessed value in USD. | 436940.0 |
| `priceChange`, `priceChangedAt` | Last price change in USD (negative means a price cut) and its date (YYYY-MM-DD). | -46000 and 2026-10-07 |
| `priceReduction` | Price cut text shown on the card. | Price cut with its date |
| `daysOnZillow` | Days since the home was listed on Zillow. | 10 |
| `listingSoldPrice`, `dateSold` | Sold price for recently sold homes where it is public, and the sold date (YYYY-MM-DD). | 2026-05-20 |
| `mainImage`, `listingPhotos`, `photoCount` | Main photo URL, all photo URLs with captions where available, and the number of photos. | 19 |
| `hasImage`, `hasVideo`, `has3DModel` | Whether the listing has a photo, a video or a 3D home tour. | true, false, true |
| `broker` | Listing brokerage name, phone and buyer brokerage. | Keller Williams Realty |
| `mlsId` | MLS listing number when available. | 2324517 |
| `openHouse` | Open house description, start, end and full schedule. | Open House - 2:00 - 4:00 PM |
| `listingType` | Flags for sale by agent or owner, coming soon, pending, open house, new home, auction, foreclosure, bank owned and contingency. | isFSBA true |
| `statusText`, `homeStatus`, `listedBy` | Status label on the card, home status and listing type label. | Active, FOR_SALE, For Sale (Broker) |
| `isNewConstruction`, `isFeaturedListing`, `isZillowOwned`, `isNonOwnerOccupied` | New construction, featured, Zillow-owned and non-owner-occupied flags. | false, false, false, true |
| `buildingName`, `availableUnits` | Name of the apartment building and the number of available units. | The Shoal and 2 |
| `rentUnits`, `minRent`, `maxRent` | Units offered in a building (beds, price text, price amount) and the lowest and highest base rent per month. | 1499.0 and 3495.0 |
| `requiredMonthlyFees`, `availabilityDate`, `priceIncludesMonthlyFees`, `isRentalWithBasePrice` | Minimum required monthly fees, the date a rental becomes available and two rent flags. | 137.0, 2026-10-15 |
| `factsAndFeatures`, `marketingTagline`, `cardHighlight`, `marketingTreatments` | Facts and marketing text shown on the card. | Showcase |
| `sourceSearchUrl`, `searchRank`, `totalResultsInSearch` | The search that found the listing, its position in that search and the total listings Zillow reports for it. | 1 and 5653 |
| `scrapedAt`, `isValid` | When the run collected the listing (UTC) and whether it has an ID and an address. | 2026-10-17T14:51:04.000Z |
| `description` (details) | Full listing description. | Text of the listing |
| `priceHistory` (details) | Price history events with date, event, price, price per sqft and source, for rental listings when Zillow shows it. | Listed for rent |
| `buildingDetails` (details) | Apartment building facts: units, scores, pet policy, schools and available units. | totalUnits 13 |
| `agentName`, `agentPhone`, `agentEmail`, `mlsName` (details) | Listing agent name, phone and email when published, and the MLS name. | Sam L |
| `yearBuilt`, `parkingSpaces`, `garageSpaces`, `propertySubType` (details) | Year built, parking, garage and property sub type. | 1983 |
| `hoaMonthly`, `hoaText`, `propertyTaxRate` (details) | Monthly HOA fee, HOA text as shown and property tax rate in percent. | Value or null |
| `neighborhood`, `county` (details) | Neighborhood and county names. | Sheepshead Bay and Kings |
| `datePosted`, `lastSoldPrice`, `lastSoldDate`, `pageViews`, `favorites` (details) | Posting date, last sold price and date, Zillow page views and how many people saved the listing. | Value or null |
| `detailsFetched` (details) | True when the property page was read, false when it could not be read, empty when the listing has no property page. | true |

Zillow Zestimate values arrive in `zestimate`, and `zestimateDiffPct` shows how far that value sits from the asking price.

Set **Listing status** to recently sold and enter a ZIP code to list Zillow sold homes by ZIP code, with `dateSold`. Zillow sold prices arrive in `listingSoldPrice` where they are public, and a field that Zillow does not show for a listing stays `null`.

Switching on **Property details** turns the run into a deeper Zillow data extractor, because the Actor then opens one extra page per listing for the "details" fields.

### 💡 Use cases for Zillow data

Teams use the rows from this Zillow data scraper for market research, investing, property management and lead generation.

- **Price tracking:** Watch Zillow listings for sale across cities or ZIP codes and follow `priceChange`, `priceChangedAt` and `daysOnZillow` to spot price cuts.
- **Comparable sales:** Recently sold searches from a Zillow sold homes scraper run give you comp sets built from `dateSold`, `livingArea` and `bedrooms`.
- **Rent and rental operations:** Compare Zillow listings for rent by neighborhood, and use `minRent` and `maxRent` to compare apartment buildings. Property managers can schedule a Zillow rental scraper job and follow `availabilityDate` and `requiredMonthlyFees` over time.
- **Investment screening:** Investors can use the Actor as a Zillow real estate scraper to find homes where `zestimateDiffPct` shows the Zestimate above the asking price.
- **Lead lists:** Collect broker names, and with Property details on, agent names, phone numbers and emails where Zillow publishes them.
- **Research datasets:** Build a Zillow real estate dataset for analysts, with one row per listing.
- **Dashboards and maps:** Feed Zillow real estate data into spreadsheets and BI tools, or plot `coordinates` on a map for neighborhood analysis.
- **App backends:** Read the dataset over HTTP and use it like a Zillow listings API for your own product.

### 🛠️ How to scrape Zillow listings

1. Create a free Apify account and log in to Apify Console.
2. Open **Zillow Search Scraper**.
3. Paste Zillow search links or type places in **Search URLs or places**, one per line.
4. Choose the extraction method, **Results per search** and any filters such as listing status, home types, price range, minimum bedrooms, days on Zillow and sort order.
5. Turn on **Property details** if you need descriptions, agent contacts and rental price history.
6. Click **Start** and watch listings arrive in the log and in the **Output** tab.
7. Download the dataset as JSON, CSV, Excel, XML or HTML.

#### How to scrape Zillow data with property details

Turn on **Property details** (`includeDetails`) to scrape Zillow data beyond the search card: description, agent name, phone and email where published, MLS name, HOA fee, tax rate, year built, parking, county, neighborhood, page views, saves and high-resolution photos. The run is slower because the Actor opens one extra page per listing. Price history is available for rental listings only, and recently sold homes usually have no description.

#### How to export Zillow search results to Excel

Run your searches, open the **Storage** tab, choose the default dataset and pick Excel in the export options. Choose CSV instead for a Zillow to CSV file.

### 💰 How much does it cost to scrape Zillow?

Zillow Search Scraper uses tiered pay-per-event pricing: you pay for each result the Actor saves, and the price per 1,000 results is lower on higher pricing tiers.

| Pricing tier | Price per 1,000 results |
|---|---|
| Free | $1.5 |
| Bronze | $1.35 |
| Silver | $1.2 |
| Gold, Platinum and Diamond | $1 |

For example, 1,000 results cost $1.5 at the Free tier price and $1 at the Gold, Platinum and Diamond tier price. A tiny Actor Start event of $0.00005 is charged once per run start. Searches that return no listings are never billed.

See the Pricing tab for current rates.

### ⬇️ Input

The only required input is **Search URLs or places** (`urls`): one Zillow search link or place per line, such as `Austin, TX`, `78701`, `Brooklyn NY` or `Travis County, TX`. Bulk input is supported, so the Actor can handle many searches as a Zillow bulk scraper job.

![Zillow Search Scraper input form with search links and filters](IMAGE_URL_PLACEHOLDER "zillow-search-scraper-input-form.png")

See the Input tab for every option. These are the options and their allowed values:

| Field | What it does |
|---|---|
| `urls` | Required. Zillow search links or places, one per line. |
| `extractionMethod` | `PAGINATION_WITH_ZOOM_IN` (every listing, default), `PAGINATION` (Zillow's page limit) or `MAP_MARKERS` (up to about 500 per search, fastest). |
| `resultsLimit` | Maximum listings to save from each search. `0` means every listing. Default `10`. |
| `listingStatus` | `url` (keep as in the link; plain places are searched for sale), `for_sale`, `for_rent` or `sold`. |
| `homeTypes` | Any of `house`, `condo`, `townhouse`, `multi_family`, `apartment`, `manufactured`, `land`. Empty means all types. |
| `minPrice`, `maxPrice` | Lowest and highest price in USD. For rentals this is the monthly rent. `0` means no limit. |
| `minBeds` | Only homes with at least this many bedrooms, from 0 to 10. `0` means any. |
| `daysOnZillow` | `any`, `1`, `7`, `14`, `30`, `90`, and for recently sold homes `6m`, `12m`, `24m`, `36m`. |
| `sort` | `default` (as in the link), `newest`, `price_low`, `price_high`, `beds`, `bathrooms`, `size`, `lot_size`, `zestimate_high`, `zestimate_low` or `relevance`. |
| `includeDetails` | Opens every listing for the "details" fields. Slower. |
| `proxyConfiguration` | Optional proxy settings for the run. |

Filters are added on top of the filters already in your links. Example input:

```json
{
  "urls": [
    "https://www.zillow.com/austin-tx/"
  ],
  "extractionMethod": "PAGINATION_WITH_ZOOM_IN",
  "resultsLimit": 10,
  "listingStatus": "url",
  "minPrice": 0,
  "maxPrice": 0,
  "minBeds": 0,
  "daysOnZillow": "any",
  "sort": "default",
  "includeDetails": false
}
```

### ⬆️ Output

The scraped results are shown as a dataset in the **Storage** tab. The table view is for convenience and doesn't show **all the fields**. Use the Storage tab as a simple Zillow data exporter and download the dataset as JSON, CSV, Excel, XML or HTML.

![Zillow search results scraper output table with addresses, prices and Zestimates](IMAGE_URL_PLACEHOLDER "zillow-search-scraper-output-table.png")

Example output for one listing from the input above, shortened (an example, not a captured run):

```json
{
  "zpid": "305433145",
  "zestimate": 395900,
  "has3DModel": true,
  "hasVideo": false,
  "hasImage": true,
  "isZillowOwned": false,
  "listingPrice": {
    "amount": 400000,
    "currency": "USD"
  },
  "listingAddress": {
    "street": "11900 Cimaizon Dr",
    "unit": null,
    "city": "Austin",
    "state": "TX",
    "zipCode": "78725",
    "county": null,
    "neighborhood": null,
    "timeZone": null,
    "full": "11900 Cimaizon Dr, Austin, TX 78725"
  },
  "coordinates": {
    "latitude": 30.217157,
    "longitude": -97.63407
  },
  "listingStatus": "forSale",
  "propertyUrl": "https://www.zillow.com/homedetails/11900-Cimaizon-Dr-Austin-TX-78725/305433145_zpid/",
  "cardType": "home",
  "homeType": "SINGLE_FAMILY",
  "priceChange": -46000,
  "priceChangedAt": "2026-10-07",
  "bedrooms": 4,
  "bathrooms": 3.0,
  "livingArea": 2174,
  "livingAreaUnit": "sqft",
  "daysOnZillow": 10,
  "rentZestimate": 2483,
  "taxAssessedValue": 436940.0,
  "mainImage": "https://photos.zillowstatic.com/fp/1eef4560d63824c1cf7a1355370d3e28-p_e.jpg",
  "photoCount": 19,
  "broker": {
    "name": "Keller Williams Realty",
    "phoneNumber": null,
    "buyerBrokerName": null
  },
  "sourceSearchUrl": "https://www.zillow.com/austin-tx/",
  "pricePerSqft": 184,
  "zestimateDiffPct": -1.0,
  "mlsId": "2324517",
  "statusText": "Active",
  "homeStatus": "FOR_SALE",
  "listedBy": "For Sale (Broker)",
  "searchRank": 1,
  "totalResultsInSearch": 5653,
  "scrapedAt": "2026-10-17T14:51:04.000Z",
  "isValid": true
}
```

#### Section tables and extra tables

The main listing table is split into sections you can open in the Output tab or read through the API.

| Table | Contents |
|---|---|
| Overview | Photo, address, price, size and status of every listing. |
| Price & value | Asking price, price per sqft, Zestimates, tax value and price changes. |
| Sold homes | Sold price and dates for recently sold homes. |
| Location | Full address, county, neighborhood and map coordinates. |
| Property facts | Home type, rooms, size, lot, year built, parking and HOA. |
| Listing type | Status, who lists it and listing flags. |
| Photos & media | Main photo, photo count, all photos and video or 3D tour flags. |
| Agent & broker | Brokerage, agent contact, MLS and card marketing. |
| Open houses | Open house description and times. |
| Rentals & buildings | Apartment buildings, units, rent range, fees and availability. |
| Property details | Description, posting date, views, saves, price history and building details (Property details on). |
| Run info | Which search found each listing, its rank and when it was collected. |

Separate tables hold one row per listing photo, per price history event (rental listings, when Zillow shows it), per open house time slot and per unit type in an apartment building. A Searches table has one row per search you gave, with its status and counts, and a Failed inputs table lists searches that returned no listings, with the reason. A `SUMMARY` record in the key-value store holds the run totals, per-search status and notes.

### ⚠️ Limitations and error handling

- **Spend limit:** A spend limit you set stops the run cleanly when it is reached.
- **Search links only:** Property pages (`/homedetails/...`) are single homes, not searches, and are reported in the Failed inputs table.
- **Extraction method:** `PAGINATION` stops at Zillow's page limit and `MAP_MARKERS` returns up to about 500 listings per search. Run a small test first to see how many listings your search returns.
- **Empty fields:** A field that Zillow does not show for a listing stays `null`. Sold prices are only filled where they are public, and price history is available for rental listings only.
- **Zillow stops answering:** The run ends early and keeps the listings already saved, and the run status says that results may be incomplete.
- **Public data only:** Private data and anything behind a login is not collected.

Failed inputs rows have four fields:

| Field | Meaning |
|---|---|
| `input` | The search you gave. |
| `sourceSearchUrl` | The Zillow search link that was used, when one was found. |
| `isValid` | False for a search that gave no listings. |
| `error` | The reason, in plain words. |

### 🔌 Integrating Zillow Search Scraper with other apps

Zillow Search Scraper runs on the Apify platform, so you can start it from the Apify API, schedule it and connect its dataset to other tools. Developers can call the Actor as a Zillow scraper API through the Apify API and read the listings from the run's default dataset; see the API tab for ready-made JavaScript, Python and CLI snippets.

- Connect the dataset to Make, Zapier, n8n or Google Sheets through [Apify integrations](https://docs.apify.com/platform/integrations), webhooks or the API.
- Use [schedules](https://docs.apify.com/platform/schedules) to keep a Zillow listings scraper feed fresh in your spreadsheet or database.
- Let AI agents run the Actor through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp).

### 🔗 More Apify Actors by crawl_craft

| Actor | What it extracts | When to use it |
|---|---|---|
| [Zillow Detail Scraper](https://apify.com/crawl_craft/zillow-detail-scraper) | Full property details from links, addresses or zpids: price, Zestimate, rent estimate, price and tax history, schools, comps and agents. | Use it when you need a Zillow property scraper for known homes. Use Zillow Search Scraper first to find the listings in a search. |
| [Google Job Scraper](https://apify.com/crawl_craft/google-job-scraper) | Google Jobs listings: title, company, location, salary, posting date, apply links and description. | Another data Actor from the same account, for job listing data instead of real estate. |
| [Etsy Scraper](https://apify.com/crawl_craft/etsy-scraper) | Etsy listings, shops, reviews, prices, sales estimates and keyword research. | Another data Actor from the same account, for marketplace data instead of real estate. |

### ⚖️ Is it legal to scrape Zillow?

Zillow Search Scraper collects only what Zillow shows publicly in its search results and does not use a Zillow account. Results can still contain personal data, such as agent names, phone numbers and emails where Zillow publishes them, so collect it only with a legitimate reason and consider privacy laws such as the GDPR (Regulation (EU) 2016/679) and Zillow's terms. Consult a lawyer if you are unsure. Read Apify's posts on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) and [ethical web scraping](https://blog.apify.com/what-is-ethical-web-scraping-and-how-do-you-do-it/).

### ❓ FAQ

#### Can you scrape Zillow?

Yes. As a Zillow web scraper, the Actor reads public search results that any visitor can see, with no Zillow account, cookies or login. You are responsible for using the data in line with Zillow's terms and the laws that apply to you.

#### Which links work?

Zillow search pages: city, ZIP code, county or neighborhood pages, and links with your own filters and map area. You can also type a place instead of a link. Property pages are single homes, not searches, and appear in the Failed inputs table.

#### How many listings can I get?

Set **Results per search**; `0` means every listing. With `PAGINATION` Zillow's page limit applies, and `MAP_MARKERS` returns up to about 500 listings per search.

#### Can I use a Zillow scraper free of charge?

You can try this Zillow scraper tool with a small run first. The price per 1,000 results is on the Pricing tab.

#### Do I need a Zillow API key?

No. The input needs only your searches. There is no Zillow account, cookie or API key field.

#### Is this a Zillow API alternative?

It is an option when you want listing rows from Zillow searches without building your own connection: you give searches and filters, and the Actor returns a dataset that works like a Zillow data API for your tools. Check Zillow's own documentation for what its official offerings cover.

#### Can I use it instead of a Zillow scraper Python script?

Yes. Start the Actor through the Apify API from Python, JavaScript or any HTTP client and read the dataset when the run finishes. That saves you from building a Zillow crawler yourself.

#### Why is the sold price empty for some homes?

`listingSoldPrice` is filled only where the sold price is public. The Actor never fills in a price that Zillow does not show.

#### What does Property details add?

Description, price history for rentals, agent name, phone and email where published, MLS name, HOA fee, tax rate, year built, parking, garage, county, neighborhood, posting date, page views, saves and high-resolution photos. It opens one extra page per listing, so runs take longer.

### 💬 Your feedback

Found a bug or need a field that is not there yet? Open an issue on the Actor's **Issues** tab in Apify Console. For a custom solution, write to hello.crawlcraft@gmail.com.

# Actor input Schema

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

One per line. Paste any Zillow search link (with or without the map in the link), or type a place such as Austin, TX, 78701, Brooklyn NY or Travis County, TX. Bulk input is supported.

## `extractionMethod` (type: `string`):

Pagination with zoom-in returns every listing of a search, even past the number of results Zillow shows on its pages. Pagination alone stops at Zillow's page limit. Map markers is the fastest and returns up to about 500 per search.

## `resultsLimit` (type: `integer`):

Maximum listings to save from each search. 0 means every listing. With 5 searches and 100 here you get up to 500 listings.

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

Homes for sale, for rent or recently sold. Keep as in the link uses the status of each Zillow link; plain places are searched for sale.

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

Only these home types. Leave empty for all types.

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

Lowest price in USD. For rentals this is the monthly rent. 0 means no minimum.

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

Highest price in USD. For rentals this is the monthly rent. 0 means no maximum.

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

Only homes with at least this many bedrooms. 0 means any.

## `daysOnZillow` (type: `string`):

Only listings added within this period. The month options apply to recently sold homes.

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

Order in which Zillow returns the listings. Keep as in the link uses the sort of each link (Zillow's default for plain places).

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

Open every listing for its description, agent name and phone, MLS, HOA fee, tax rate, year built, parking, county, neighborhood, page views and high-resolution photos. Price history is available for rental listings only, and recently sold homes usually have no description. Slower: one extra page per listing.

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

Choose how the Actor connects. The default works for most runs.

## Actor input object example

```json
{
  "urls": [
    "https://www.zillow.com/austin-tx/"
  ],
  "extractionMethod": "PAGINATION_WITH_ZOOM_IN",
  "resultsLimit": 10,
  "listingStatus": "url",
  "minPrice": 0,
  "maxPrice": 0,
  "minBeds": 0,
  "daysOnZillow": "any",
  "sort": "default",
  "includeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Photo, address, price, size and status of every listing.

## `price_value` (type: `string`):

Asking price, price per sqft, Zestimates, tax value and price changes.

## `sold` (type: `string`):

Sold price and dates for recently sold homes.

## `location` (type: `string`):

Full address, county, neighborhood and map coordinates.

## `property_facts` (type: `string`):

Home type, rooms, size, lot, year built, parking and HOA.

## `listing_type` (type: `string`):

Status, who lists it and listing flags.

## `media` (type: `string`):

Main photo, photo count, all photos and video / 3D tour flags.

## `agent_broker` (type: `string`):

Brokerage, agent contact, MLS and card marketing.

## `open_house` (type: `string`):

Open house description and times.

## `rentals` (type: `string`):

Apartment buildings, units, rent range, fees and availability.

## `details` (type: `string`):

Description, posting date, views, saves, price history and building details (property details on).

## `run_info` (type: `string`):

Which search found each listing, its rank and when it was collected.

## `photos` (type: `string`):

One row per listing photo.

## `price_history` (type: `string`):

One row per price history event (property details on; rental listings, when Zillow shows it).

## `open_houses` (type: `string`):

One row per open house time slot.

## `rent_units` (type: `string`):

One row per unit type offered in an apartment building.

## `searches` (type: `string`):

One row per search you gave, with status and counts.

## `failed_inputs` (type: `string`):

Searches that returned no listings, with the reason. Never billed.

## `summary` (type: `string`):

Totals, per-search status and notes for the run.

# 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 = {
    "urls": [
        "https://www.zillow.com/austin-tx/"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawl_craft/zillow-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 = {
    "urls": ["https://www.zillow.com/austin-tx/"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("crawl_craft/zillow-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 '{
  "urls": [
    "https://www.zillow.com/austin-tx/"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call crawl_craft/zillow-search-scraper --silent --output-dataset

```

## MCP server setup

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