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

(Cheap rate) Just input location, bedrooms, price range & property type to scrape  bulk Zillow listings. Outputs complete property data: prices, floor plans, amenities, photos, videos, Walk Score & more. ❤️Zillow Property Scraper❤️.

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

## Pricing

Pay per event + usage

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## 🏢 Zillow Property Scraper - Ultimate Real Estate Data Extractor

**Easily scrape comprehensive property listings from Zillow with our powerful **Zillow Property Scraper**! This Apify actor enables bulk extraction of rental properties, complete building details, floor plans, amenities, and location intelligence.**

***

### 📋 Overview

Need to analyze real estate markets, find rental properties, or build property databases? This **Zillow Property Scraper** delivers:

- 🏠 **Comprehensive Property Data** - Full building info, floor plans, and unit details
- 📊 **Rich Amenity Extraction** - Building amenities, unit features, and pet policies
- 🎯 **Advanced Filtering** - Search by bedrooms, price range, property type, and more
- 🔍 **Location Intelligence** - Walk Score, Bike Score, and transit information
- 📸 **Complete Media Assets** - Photos, videos, virtual tours, and street views

Perfect for real estate agents 🏡, property investors 💰, market analysts 📈, and relocation specialists 🚚!

***

### ⭐ Core Capabilities of Zillow Property Scraper

#### 🏢 Property Extraction

- **Multi-Property Support** - Scrape multiple listings with intelligent filtering
- **Complete Building Data** - Name, address, price, and contact information
- **Floor Plan Details** - Unit availability, square footage, and layout specifications
- **Status Detection** - FOR\_RENT, FOR\_SALE, and other listing statuses

#### 📊 Rich Data Mastery

- **Price Intelligence** - Formatted and unformatted pricing data
- **Location Precision** - Latitude/longitude coordinates
- **Comprehensive Descriptions** - Full property narratives
- **Contact Information** - Building phone numbers and provider details

#### 🎯 Advanced Search Capabilities

- **Bedroom Filtering** - Search by 1, 2, 3+ bedrooms
- **Price Range** - Set min/max price filters
- **Property Type** - Apartments, condos, houses, and more
- **Extra Keywords** - Custom search terms for specific needs

#### 🏆 Amenity & Feature Extraction

- **Building Amenities** - Pools, gyms, parking, and more
- **Unit Features** - In-unit laundry, appliances, flooring
- **Pet Policies** - Dogs, cats, weight restrictions
- **Operating Hours** - Leasing office schedules

***

### ⚙️ Input Configuration

Simply configure your search parameters and click "Start". Input looks like this:

```json
{
  "bedrooms": 3,
  "listingType": "rent",
  "location": "New York, NY",
  "maxItems": 20,
  "propertyType": "apartment",
  "minPrice": 0,
  "maxPrice": 0,
  "extraKeywords": [],
  "urls": [],
  "maxConcurrency": 3,
  "minDelayMs": 1000,
  "maxDelayMs": 3000
}
```

#### 📝 Input Specifications

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `location` | String | ✅ Yes | - | City, state, or ZIP code to search |
| `listingType` | String | ❌ No | "rent" | "rent" or "sale" |
| `propertyType` | String | ❌ No | "apartment" | Apartment, condo, house, etc. |
| `bedrooms` | Integer | ❌ No | Any | Number of bedrooms to filter |
| `minPrice` | Integer | ❌ No | 0 | Minimum price filter |
| `maxPrice` | Integer | ❌ No | 0 | Maximum price filter (0 = no limit) |
| `maxItems` | Integer | ❌ No | 20 | Maximum listings to scrape |
| `extraKeywords` | Array | ❌ No | \[] | Additional search keywords |
| `urls` | Array | ❌ No | \[] | Direct listing URLs to scrape |
| `maxConcurrency` | Integer | ❌ No | 3 | Parallel scraping threads (1-10) |
| `minDelayMs` | Integer | ❌ No | 1000 | Minimum delay between requests (ms) |
| `maxDelayMs` | Integer | ❌ No | 3000 | Maximum delay between requests (ms) |

***

### 📤 Output Structure

Your **Zillow Property Scraper** produces comprehensive property data with building details and floor plans:

```json
[
  {
    "zpid": "464076237",
    "buildingName": "Sky Three",
    "price": "$3,400",
    "unformattedPrice": 3400,
    "address": "532 Neptune Ave, Brooklyn, NY 11224",
    "addressCity": "Brooklyn",
    "addressState": "NY",
    "addressZipcode": "11224",
    "latLong": {
      "latitude": 40.579343,
      "longitude": -73.974419
    },
    "description": "Sky Three Residences Club starts a new conversation for life in Southern Brooklyn...",
    "buildingPhoneNumber": "(917) 746-5049",
    "floorPlans": [
      {
        "name": "Tower 1 G-line",
        "beds": 1,
        "baths": 1,
        "sqft": 668,
        "minPrice": 3400,
        "maxPrice": 3400,
        "units": [
          {
            "unitNumber": "Unit 111G",
            "price": 3400,
            "availableFrom": "1785308400000",
            "allowedPets": ["Cats", "Dogs", "Small Dogs"]
          }
        ]
      }
    ],
    "amenities": {
      "hours": ["Mon: 10:00AM - 8:00PM"],
      "pets": ["Cats", "Large dogs", "Small dogs"],
      "customAmenities": {
        "rawAmenities": ["Concierge", "Media Room", "Garage"]
      },
      "unitFeatures": ["Dishwasher", "Hardwood flooring", "Patio/balcony"]
    },
    "scores": {
      "walkScore": { "walkscore": 90, "description": "Very Walkable" },
      "bikeScore": { "bikescore": 75, "description": "Very Bikeable" }
    },
    "media": {
      "photos": ["https://photos.zillowstatic.com/..."],
      "photoCount": 36,
      "videoCount": 4
    }
  }
]
```

#### 📖 Output Field Documentation

**🔹 Property Identification**
| Field | Description |
|-------|-------------|
| `zpid` | Zillow Property ID (unique identifier) |
| `buildingName` | Name of the building/complex |
| `providerListingId` | Listing ID from provider |
| `detailUrl` | Direct Zillow listing URL |

**🔹 Pricing & Address**
| Field | Description |
|-------|-------------|
| `price` | Formatted price string with currency |
| `unformattedPrice` | Numeric price value |
| `address` | Full street address |
| `addressCity` | City name |
| `addressState` | State abbreviation |
| `addressZipcode` | ZIP/Postal code |
| `latLong` | Geographic coordinates |

**🔹 Floor Plans & Units**
| Field | Description |
|-------|-------------|
| `name` | Floor plan/line name |
| `beds` | Number of bedrooms |
| `baths` | Number of bathrooms |
| `sqft` | Square footage |
| `minPrice` | Minimum unit price |
| `maxPrice` | Maximum unit price |
| `units` | Individual unit details |
| `unitNumber` | Specific unit identifier |
| `availableFrom` | Availability date (timestamp) |

**🔹 Amenities**
| Field | Description |
|-------|-------------|
| `hours` | Leasing office hours |
| `pets` | Allowed pet types |
| `rawAmenities` | Building amenities list |
| `unitFeatures` | In-unit features |
| `leaseTerm` | Available lease durations |

**🔹 Location Scores**
| Field | Description |
|-------|-------------|
| `walkScore` | Walkability score (0-100) |
| `bikeScore` | Bikeability score (0-100) |
| `transitScore` | Transit accessibility score |

***

### 🎨 Key Features of This Zillow Property Scraper

#### 🏙️ Location Intelligence

- **Walk Score Integration** - Walkability metrics with descriptions
- **Bike Score** - Cycling infrastructure assessment
- **Transit Accessibility** - Public transportation options
- **Static Maps** - Visual location context
- **Street View** - Ground-level imagery

#### 📸 Rich Media Extraction

- **High-Resolution Photos** - Multiple property images
- **Video Tours** - Embedded virtual walkthroughs
- **Floor Plan Visuals** - Layout diagrams
- **Photo Count** - Total available media

#### 🏢 Comprehensive Building Data

- **Description Extraction** - Full property narratives
- **Contact Information** - Phone numbers and provider details
- **Building Type** - Residential, commercial, mixed-use
- **Status Detection** - FOR\_RENT, FOR\_SALE, etc.

#### 🎯 Smart Scraping Features

- **Concurrency Control** - Adjustable parallel processing
- **Rate Limiting** - Configurable delays to avoid blocks
- **URL Support** - Direct listing scraping option
- **Error Resilience** - Individual failures handled gracefully

***

### 💡 Use Cases for Zillow Property Scraper

- **🏡 Real Estate Agents** - Build comprehensive listing databases
- **💰 Property Investors** - Analyze market trends and pricing
- **📊 Market Analysts** - Track rental and sale prices
- **🚚 Relocation Specialists** - Help clients find suitable properties
- **🔬 Researchers** - Study housing market dynamics
- **📱 App Developers** - Power real estate applications
- **🏦 Financial Institutions** - Property valuation and risk assessment
- **🎯 Marketing Teams** - Identify target property demographics

***

### ✨ Why Choose Our Zillow Property Scraper?

- **⚡ Blazing Fast** - Concurrent scraping with optimized request handling
- **🎯 100% Accurate** - Preserves all property data without alteration
- **🔄 Regular Updates** - Adapts to Zillow platform changes automatically
- **📦 Complete Data** - Everything from amenities to location scores
- **🛡️ Production Ready** - Battle-tested with thousands of properties
- **💰 Cost Efficient** - Optimized to minimize compute time
- **🔒 Privacy Focused** - No personal data stored or shared

***

### ⚠️ Limitations

- Only works with publicly accessible Zillow listings
- Some listings may require specific filters or keywords
- Extremely high concurrency may trigger rate limiting
- Search results limited to Zillow's available inventory
- Media URLs may expire after a certain period

### 📧 Need Custom Features for Your Zillow Property Scraper?

Want **additional property fields**, **specific search filters**, **custom output formats**, **advanced analytics**, or **automated reporting**?

✉️ Email **<codenest2.0@gmail.com>** for tailored enterprise solutions!

***

# Actor input Schema

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

Enter city, state, or ZIP code in plain text. Examples: 'New York', 'Los Angeles CA', 'Chicago Illinois', '90210'. This will be included in the Google search query to find the matching Zillow URL automatically.

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

Type of property to search for. The selected value is added to the Google search query automatically.

## `listingType` (type: `string`):

Whether to search for rentals or properties for sale. Added to the Google search query automatically.

## `bedrooms` (type: `integer`):

Filter by number of bedrooms. Set to 0 for no bedroom filter. Example: 2 adds '2 bedrooms' to the Google search query.

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

Minimum price in USD. Set to 0 for no minimum. When set, adds price context to the Google search query.

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

Maximum price in USD. Set to 0 for no maximum. When set, adds price context to the Google search query. Example: 3000 = under $3,000.

## `extraKeywords` (type: `array`):

Any additional search terms to include in the Google query. For example: 'open house', 'pool', 'garage', 'pet friendly'. Each entry is a separate keyword.

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

Optionally enter direct Zillow property or search/category URLs to scrape. If filled, these are scraped in addition to any keyword-based search results. Leave empty when using the keyword fields above.

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

Maximum properties to scrape per search URL (e.g. 10, 50, 100). Default is 50.

## `maxConcurrency` (type: `integer`):

Maximum number of Zillow pages to scrape in parallel. Lower values are safer against blocks. Default is 3.

## `minDelayMs` (type: `integer`):

Minimum random delay in milliseconds between requests. Default is 1000ms.

## `maxDelayMs` (type: `integer`):

Maximum random delay in milliseconds between requests. Default is 3000ms.

## Actor input object example

```json
{
  "location": "",
  "propertyType": "",
  "listingType": "",
  "bedrooms": 0,
  "minPrice": 0,
  "maxPrice": 0,
  "extraKeywords": [],
  "urls": [],
  "maxItems": 50,
  "maxConcurrency": 3,
  "minDelayMs": 1000,
  "maxDelayMs": 3000
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("codenest/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 = {}

# Run the Actor and wait for it to finish
run = client.actor("codenest/zillow-property-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 '{}' |
apify call codenest/zillow-property-scraper --silent --output-dataset

```

## MCP server setup

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