# Zillow Property Scraper 🏡 (`shahidirfan/zillow-property-scraper`) Actor

Extract comprehensive Zillow property listings with prices, addresses, photos, home details, Zestimate values, features, agent information, and listing URLs. Perfect for real estate research, market analysis, lead generation, investment insights, and property monitoring.

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

## Pricing

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

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

### What does Zillow Property Scraper do?

Zillow Property Scraper collects structured Zillow property listings from Zillow search pages or from a location search such as New York, NY, Seattle, WA, Florida, or 90210. It extracts prices, addresses, bedrooms, bathrooms, square footage, listing status, broker attribution, images, coordinates, Zillow property IDs, and direct listing URLs for real estate research and monitoring.

Use this Actor when you need Zillow listing data in a clean dataset for property analysis, market research, lead workflows, price tracking, or enrichment. You can start with a copied Zillow search URL or enter a location and optional keyword filter.

***

### Why use Zillow Property Scraper?

- **Search URL support** - Paste a Zillow results URL and collect the listings shown for that search area and filters.
- **Location search support** - Enter a city, state, county, neighborhood, or ZIP code when you do not have a Zillow URL.
- **Property-focused output** - Export addresses, prices, bed and bath counts, area, property type, broker names, image URLs, map coordinates, and Zillow listing links.
- **Automation-ready data** - Download results as JSON, CSV, Excel, XML, or connect them to Apify integrations.
- **Market monitoring workflows** - Schedule repeat runs for pricing checks, inventory tracking, local market research, and comparable property analysis.

***

### What data can you extract from Zillow?

| Field | Description |
|-------|-------------|
| `zpid` | Zillow property ID |
| `address` | Full property address |
| `street_address` | Street address when available |
| `city` | City name |
| `state` | State code |
| `zipcode` | ZIP code |
| `price` | Displayed listing price |
| `unformatted_price` | Numeric listing price |
| `currency` | Listing currency |
| `beds` | Bedroom count |
| `baths` | Bathroom count |
| `area_sqft` | Living area in square feet |
| `property_type` | Zillow property type |
| `home_status` | Home status, such as for sale |
| `listing_status` | Displayed listing status |
| `broker_name` | Broker or listing attribution |
| `detail_url` | Direct Zillow property URL |
| `image_url` | Primary property image URL |
| `photo_urls` | Available property photo URLs |
| `latitude` | Property latitude |
| `longitude` | Property longitude |
| `days_on_zillow` | Days on Zillow when available |
| `tax_assessed_value` | Tax assessed value when available |
| `lot_area_value` | Lot size value when available |
| `lot_area_unit` | Lot size unit |
| `scraped_at` | Time the record was saved |

Fields that are not published for a listing are omitted from that dataset item instead of being saved as empty values.

***

### How to use Zillow Property Scraper

1. Open the Actor on Apify.
2. Paste a Zillow search URL, or leave the URL empty and enter a location.
3. Add an optional keyword filter such as `condo`, `waterfront`, `garage`, or `new construction`.
4. Set `results_wanted` and `max_pages`.
5. Run the Actor and export the dataset.

***

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `url` | String | No | New York Zillow URL | Zillow search results URL. URLs with `searchQueryState` preserve the map area and filters best. Plain location URLs are also supported. |
| `keyword` | String | No | Empty | Optional Zillow keyword filter. |
| `location` | String | No | `New York, NY` | Location used when no URL is provided. Supports cities, states, counties, neighborhoods, and ZIP codes. |
| `results_wanted` | Integer | No | `20` | Maximum number of property listings to save. |
| `max_pages` | Integer | No | `2` | Maximum number of Zillow result pages to request per search. |
| `proxyConfiguration` | Object | No | Apify Residential Proxy enabled | Proxy settings for larger or cloud runs. |

***

### Usage Examples

#### Scrape a Zillow Search URL

Collect listings from a copied Zillow results URL:

```json
{
  "url": "https://www.zillow.com/new-york-ny/?searchQueryState=%7B%22isMapVisible%22%3Atrue%2C%22mapBounds%22%3A%7B%22north%22%3A40.988741695224775%2C%22south%22%3A40.405685665239744%2C%22east%22%3A-73.49353598046878%2C%22west%22%3A-74.46582601953128%7D%2C%22filterState%22%3A%7B%22sort%22%3A%7B%22value%22%3A%22globalrelevanceex%22%7D%7D%2C%22isListVisible%22%3Atrue%2C%22usersSearchTerm%22%3A%22new%20york%22%2C%22regionSelection%22%3A%5B%7B%22regionId%22%3A6181%2C%22regionType%22%3A6%7D%5D%7D",
  "results_wanted": 20,
  "max_pages": 2
}
```

#### Search by Location

Collect listings for a location without pasting a Zillow URL:

```json
{
  "location": "Seattle, WA",
  "results_wanted": 50,
  "max_pages": 3
}
```

#### Filter by Keyword

Collect listings that match a Zillow keyword filter:

```json
{
  "location": "Miami, FL",
  "keyword": "condo",
  "results_wanted": 40,
  "max_pages": 3
}
```

***

### Sample Output

```json
{
  "zpid": "29833067",
  "id": "29833067",
  "address": "4059 Paulding Avenue, Bronx, NY 10466",
  "street_address": "4059 Paulding Avenue",
  "city": "Bronx",
  "state": "NY",
  "zipcode": "10466",
  "price": "$749,999",
  "unformatted_price": 749999,
  "currency": "USD",
  "beds": 5,
  "baths": 3,
  "area_sqft": 1485,
  "latitude": 40.887577,
  "longitude": -73.85079,
  "property_type": "SINGLE_FAMILY",
  "home_status": "FOR_SALE",
  "listing_status": "House for sale",
  "broker_name": "Listing by: Douglas Elliman Real Estate",
  "detail_url": "https://www.zillow.com/homedetails/4059-Paulding-Ave-Bronx-NY-10466/29833067_zpid/",
  "image_url": "https://photos.zillowstatic.com/fp/19459b85527e6856dcc2a3c164097155-p_e.jpg",
  "has_image": true,
  "has_3d_model": true,
  "is_showcase_listing": true,
  "days_on_zillow": 6,
  "source": "https://www.zillow.com/new-york-ny/",
  "scraped_at": "2026-08-07T07:30:00.000Z"
}
```

***

### Tips for Best Results

- Use a Zillow URL copied after applying filters on Zillow when you need a specific map area or property search.
- Use `location` when you want a quick search by city, state, county, neighborhood, or ZIP code.
- Start with `results_wanted` set to 20 for testing, then increase it for larger runs.
- Increase `max_pages` when you need more listings than the first result page can provide.
- Use residential proxy settings for larger scheduled jobs.
- Some listing fields may be missing because Zillow does not publish every detail for every property.

***

### Integrations

- **Google Sheets** - Send Zillow listings to spreadsheets for market analysis.
- **Webhooks** - Trigger downstream workflows after each scrape finishes.
- **Make or Zapier** - Connect property data to no-code automations.
- **CSV and Excel** - Download listings for analysts, investors, and lead teams.
- **API** - Access dataset items from your own applications and data pipelines.

***

### Frequently Asked Questions

#### Can I scrape Zillow by URL?

Yes. Paste a Zillow search results URL into `url`. URLs that include `searchQueryState` preserve the map bounds and Zillow filters best.

#### Can I scrape Zillow by location?

Yes. Leave `url` empty and enter a location such as `New York, NY`, `Seattle, WA`, `Florida`, `Kings County, NY`, or `90210`.

#### Can I use a keyword filter?

Yes. Add a keyword such as `condo`, `waterfront`, `garage`, or `new construction`. The keyword is applied to the Zillow search.

#### Can I export Zillow data to CSV or Excel?

Yes. Apify datasets can be downloaded as CSV, Excel, JSON, XML, HTML, RSS, and other formats.

#### Why are some fields missing from some records?

Some fields are missing when Zillow does not publish that value for a listing. Empty and unavailable values are omitted from the record to keep the dataset clean.

#### Is it legal to scrape Zillow?

Scraping public web data can be legal, but you are responsible for complying with applicable laws, Zillow terms, privacy rules, and data usage requirements.

***

### Related Actors

- [StreetEasy Scraper](https://apify.com/shahidirfan/streeteasy-scraper)
- [Dot Property Scraper](https://apify.com/shahidirfan/dot-property-scraper)
- [PropertyGuru Scraper](https://apify.com/shahidirfan/propertyguru-scraper)
- [Savills Property Scraper](https://apify.com/shahidirfan/savills-property-scraper)

***

### Support

For issues, feature requests, or custom Zillow property data workflows, use the Issues tab on the Actor page or contact the developer through Apify.

***

### Legal Notice

This Actor is designed for legitimate collection of publicly available Zillow listing data. Users are responsible for using the data responsibly and complying with applicable laws, website terms, and privacy requirements.

# Actor input Schema

## `url` (type: `string`):

A Zillow search results URL. URLs with searchQueryState work best; plain location URLs such as https://www.zillow.com/new-york-ny/ are also supported.

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

Optional Zillow keyword filter, for example condo, waterfront, garage, or million dollar.

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

Location to search when no Zillow URL is provided, such as New York, NY, Seattle, WA, Florida, or 90210.

## `results_wanted` (type: `integer`):

Maximum number of property listings to save.

## `max_pages` (type: `integer`):

Maximum number of Zillow result pages to request per search.

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

Use Apify Proxy for larger or cloud runs.

## Actor input object example

```json
{
  "url": "https://www.zillow.com/new-york-ny/?searchQueryState=%7B%22isMapVisible%22%3Atrue%2C%22mapBounds%22%3A%7B%22north%22%3A40.988741695224775%2C%22south%22%3A40.405685665239744%2C%22east%22%3A-73.49353598046878%2C%22west%22%3A-74.46582601953128%7D%2C%22filterState%22%3A%7B%22sort%22%3A%7B%22value%22%3A%22globalrelevanceex%22%7D%7D%2C%22isListVisible%22%3Atrue%2C%22usersSearchTerm%22%3A%22new%20york%22%2C%22regionSelection%22%3A%5B%7B%22regionId%22%3A6181%2C%22regionType%22%3A6%7D%5D%7D",
  "location": "New York, NY",
  "results_wanted": 20,
  "max_pages": 2,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

No description

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "url": "https://www.zillow.com/new-york-ny/?searchQueryState=%7B%22isMapVisible%22%3Atrue%2C%22mapBounds%22%3A%7B%22north%22%3A40.988741695224775%2C%22south%22%3A40.405685665239744%2C%22east%22%3A-73.49353598046878%2C%22west%22%3A-74.46582601953128%7D%2C%22filterState%22%3A%7B%22sort%22%3A%7B%22value%22%3A%22globalrelevanceex%22%7D%7D%2C%22isListVisible%22%3Atrue%2C%22usersSearchTerm%22%3A%22new%20york%22%2C%22regionSelection%22%3A%5B%7B%22regionId%22%3A6181%2C%22regionType%22%3A6%7D%5D%7D",
    "keyword": "",
    "location": "New York, NY",
    "results_wanted": 20,
    "max_pages": 2
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/zillow-property-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 = {
    "url": "https://www.zillow.com/new-york-ny/?searchQueryState=%7B%22isMapVisible%22%3Atrue%2C%22mapBounds%22%3A%7B%22north%22%3A40.988741695224775%2C%22south%22%3A40.405685665239744%2C%22east%22%3A-73.49353598046878%2C%22west%22%3A-74.46582601953128%7D%2C%22filterState%22%3A%7B%22sort%22%3A%7B%22value%22%3A%22globalrelevanceex%22%7D%7D%2C%22isListVisible%22%3Atrue%2C%22usersSearchTerm%22%3A%22new%20york%22%2C%22regionSelection%22%3A%5B%7B%22regionId%22%3A6181%2C%22regionType%22%3A6%7D%5D%7D",
    "keyword": "",
    "location": "New York, NY",
    "results_wanted": 20,
    "max_pages": 2,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/zillow-property-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 '{
  "url": "https://www.zillow.com/new-york-ny/?searchQueryState=%7B%22isMapVisible%22%3Atrue%2C%22mapBounds%22%3A%7B%22north%22%3A40.988741695224775%2C%22south%22%3A40.405685665239744%2C%22east%22%3A-73.49353598046878%2C%22west%22%3A-74.46582601953128%7D%2C%22filterState%22%3A%7B%22sort%22%3A%7B%22value%22%3A%22globalrelevanceex%22%7D%7D%2C%22isListVisible%22%3Atrue%2C%22usersSearchTerm%22%3A%22new%20york%22%2C%22regionSelection%22%3A%5B%7B%22regionId%22%3A6181%2C%22regionType%22%3A6%7D%5D%7D",
  "keyword": "",
  "location": "New York, NY",
  "results_wanted": 20,
  "max_pages": 2
}' |
apify call shahidirfan/zillow-property-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/i1Mouyz4BLgfouAYs/builds/7IxEGpP5gd75ePDT0/openapi.json
