# Zillow Detail Scraper (`automly/zillow-detail-scraper`) Actor

Zillow Detail Scraper gets the full property record from Zillow links, ZPIDs or street addresses: price and price history, Zestimate and rent Zestimate, beds, baths, lot, year built, photos, agent and broker, tax history, schools, HOA, days on Zillow, views and saves.

- **URL**: https://apify.com/automly/zillow-detail-scraper.md
- **Developed by:** [Automly](https://apify.com/automly) (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 $0.79 / 1,000 homes

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/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

## Zillow Detail Scraper

### What is Zillow Detail Scraper?

**Zillow Detail Scraper** gets the **full property record for any Zillow home**: give it Zillow property links, ZPIDs or plain street addresses and it returns price and price history, Zestimate and Rent Zestimate, beds, baths, living area, lot size, year built, home type, status, address and coordinates, description, photos, listing agent and broker, tax history, schools, HOA fee, days on Zillow, and views and saves where Zillow shows them.

- 🏠 **Three ways in:** Zillow links, ZPIDs, or street addresses (no Zillow link needed)
- 📈 **Full history:** every price event (listed, price cut, pending, sold) and the tax paid and assessed value per year
- 🏫 **Schools:** nearby and assigned schools with ratings, grades and distance
- 👤 **Agent and broker:** listing agent name, phone and brokerage as shown on the listing, Zillow Showcase listings included
- 👀 **Views and saves:** how many people viewed and saved a listing, where Zillow shows the counts
- 🏢 **Apartment buildings too:** floor plans, unit rents, available units, amenities and pet policy
- 🔓 **No login:** no Zillow account, cookies or API key
- 💸 **Free to try:** the $5 of free usage every Apify account gets each month covers your first homes

### What can Zillow Detail Scraper do?

- Get the details of Zillow homes from a list of Zillow links
- Look up homes by ZPID
- Look up homes by street address, with the unit for condos and apartments
- Get Zestimate and Rent Zestimate for valuation and comps
- Get price history and tax history for every home
- Get assigned schools with GreatSchools ratings
- Get the listing agent and brokerage for lead lists
- Get floor plans and unit rents of apartment buildings
- Enrich the results of a Zillow search (for example from [Zillow Scraper](https://apify.com/automly/zillow-scraper)) with the full record of each home

### What data can you get from Zillow?

| | | |
|---|---|---|
| 🏠 Address, ZPID, county, neighborhood | 💲 Price, Zestimate, Rent Zestimate | 🛏️ Beds, baths, living area, lot size |
| 📅 Year built, date posted, days on Zillow | 📈 Price history, last sold price, price per sq ft | 🧾 Tax history, annual tax, tax rate, parcel ID |
| 🏫 Nearby and assigned schools with ratings | ✨ "What's special" highlights | 📝 Description and every fact and feature |
| 👤 Listing agent name, phone, email | 🏢 Broker, MLS name and number | 💵 Monthly HOA fee |
| 👀 Views and saves | 🖼️ All photos in full size, 3D tours | 📍 Latitude and longitude |
| 🏬 Building name, units, units available | 📐 Floor plans with unit rents | 🐾 Amenities, pet policy, Walk Score |

### How to get Zillow property details

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open **Zillow Detail Scraper**.
3. Paste Zillow home links into **Zillow property links**, ZPIDs into **ZPIDs**, or addresses into **Street addresses**. You can mix all three.
4. Click **Start**.
5. When the run finishes, download the homes as Excel, CSV, JSON or XML, or fetch them from the API.

### How much does it cost to get Zillow property details?

You pay for each home saved, with a lower price on higher Apify plans:

| Apify plan | Homes per 1,000 |
|---|---|
| Free | $3.40 |
| Starter (Bronze) | $2.80 |
| Scale (Silver) | $2.20 |
| Business (Gold) and higher | $0.79 |

A run also has a start fee of **$0.0005 per run** at the default settings. Platform usage is included in these prices, so you pay nothing else for the run. A home that does not exist on Zillow is not charged.

Example: 1,000 homes cost $3.40 on the Free plan and $0.79 on Business. You can set a maximum cost per run, and the run stops there. Every Apify account gets **$5 of free usage each month**, enough for about 1,450 homes on the Free plan.

### ⬇️ Input

| Setting | What it does |
|---|---|
| **Zillow property links** | Links to Zillow home pages, like `https://www.zillow.com/homedetails/1709-Broderick-St-San-Francisco-CA-94115/15083084_zpid/`. Apartment building pages (`zillow.com/apartments/...`) work too |
| **ZPIDs** | Zillow property IDs, like `15083084` (the number before `_zpid` in a home link) |
| **Street addresses** | Full addresses, like `2919 Jubilee Trl, Austin, TX 78748`. Add the unit for condos and apartments |

The same home given twice (for example as a link and as its ZPID) is read once.

```json
{
  "startUrls": [
    { "url": "https://www.zillow.com/homedetails/1709-Broderick-St-San-Francisco-CA-94115/15083084_zpid/" }
  ],
  "zpids": ["29510325"],
  "addresses": ["67 Morton St APT 6E, New York, NY 10014"]
}
```

### ⬆️ Output

A real row (the "Full House" house in San Francisco), trimmed:

```json
{
  "input": "https://www.zillow.com/homedetails/1709-Broderick-St-San-Francisco-CA-94115/15083084_zpid/",
  "zpid": "15083084",
  "url": "https://www.zillow.com/homedetails/1709-Broderick-St-San-Francisco-CA-94115/15083084_zpid/",
  "address": "1709 Broderick St, San Francisco, CA, 94115",
  "county": "San Francisco County",
  "latitude": 37.78633,
  "longitude": -122.442085,
  "price": 6000000,
  "zestimate": 7276500,
  "bedrooms": 4,
  "bathrooms": 4,
  "livingArea": 3737,
  "lotSize": 3125,
  "yearBuilt": 1900,
  "homeType": "SINGLE_FAMILY",
  "homeStatus": "SOLD",
  "lastSoldPrice": 6000000,
  "daysOnZillow": 565,
  "parcelId": "1048007",
  "agentName": "Rachel E. Swann",
  "brokerName": "Coldwell Banker Realty",
  "priceHistory": [
    { "date": "2025-04-07", "event": "Sold", "price": 6000000, "pricePerSquareFoot": 1606 },
    { "date": "2025-03-18", "event": "Pending sale", "price": 5995000 }
  ],
  "taxHistory": [
    { "year": 2025, "taxPaid": 69297, "value": 5791011 }
  ],
  "schools": [
    { "name": "Cobb (William L.) Elementary School", "rating": 3, "grades": "K-5", "distance": 0.2 }
  ]
}
```

Rows also carry `description`, `photos`, `resoFacts` (every fact and feature on the listing: heating, cooling, parking, appliances, HOA, construction, utilities and more), `assignedSchools`, `whatsSpecial`, `monthlyHoaFee`, `propertyTaxRate`, `taxAnnualAmount`, `pricePerSquareFoot`, `datePosted`, `timeOnZillow`, `pageViewCount`, `favoriteCount`, `agentPhoneNumber`, `agentEmail`, `mlsId`, `mlsName`, `attributionInfo` and `richMedia` (3D tours). Apartment building rows carry `buildingName`, `floorPlans` with units and rents, `unitCount`, `availabilityCount`, `amenityDetails`, `petPolicy`, `specialOffers` and Walk, Transit and Bike Scores.

The **Homes**, **Agents and brokers** and **Price and tax history** tabs show the most useful columns as tables. You can export as JSON, CSV, Excel, XML, HTML or RSS.

### How can I use Zillow property data?

- **Valuation and comps:** Zestimate, last sold price, price history and tax assessments for a list of addresses
- **Real estate lead generation:** listing agent, phone and brokerage for the homes you care about
- **Portfolio and CRM enrichment:** turn a spreadsheet of addresses into full property records
- **Investor research:** tax history, HOA fees, schools and days on market before an offer
- **Rental research:** Rent Zestimate, floor plans and unit rents
- **Monitoring:** run the same homes on a schedule and track price changes, status, views and saves

### What are the limits?

- **Fields vary by listing.** For-sale, sold, rental and off-market homes show different facts on Zillow. Missing values come back as `null` or an empty list; nothing is made up. Sold prices are empty in non-disclosure states such as Texas.
- **Views and saves** are only shown on listings Zillow shows them on (usually homes for sale).
- **Addresses must be a single home.** A city, ZIP code or street without a house number is reported as not found. To search a whole area, use [Zillow Scraper](https://apify.com/automly/zillow-scraper) and send its results here.
- **Search result links** are not property pages: they are reported as failed inputs.

### Scrape more real estate data

| Actor | What it gets |
|---|---|
| [Zillow Scraper](https://apify.com/automly/zillow-scraper) | Zillow homes for sale, rentals and recently sold by city, ZIP code, radius or search link, with 44 filters |
| [Apartments.com Scraper](https://apify.com/automly/apartments-com-scraper) | Apartments.com rentals by city, ZIP code or search link: rent, phone, beds, floor plans, units, fees |
| [Airbnb Scraper](https://apify.com/automly/airbnb-listings-scraper) | Airbnb listings by city, search or link: prices, ratings, hosts, amenities and photos |

### 🤖 Use with AI agents (MCP)

This actor works as a tool for AI agents. Connect any MCP-compatible AI assistant or agent to the Apify MCP server at [mcp.apify.com](https://mcp.apify.com) (sign in with your Apify account), and it can find this actor, fill in the input and read the results by itself. Ask in plain words, for example: "Get the Zestimate, tax history and schools for 2919 Jubilee Trl, Austin, TX 78748."

### ❓FAQ

#### How much does it cost?

$3.40 per 1,000 homes on the Free plan, down to $0.79 on Business, plus a $0.0005 start fee per run, with platform usage included. See [How much does it cost to get Zillow property details?](#how-much-does-it-cost-to-get-zillow-property-details) above for every plan.

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

No. There is no login, cookie or API key, and no daily call limit. You only need a free Apify account.

#### Can I look up a home by its address?

Yes. Put full addresses in **Street addresses**, with the unit for condos and apartments. Only a home with the same house number (and unit) counts as a match, so a near miss is reported as not found instead of returning another home.

#### Can I use it with Zillow Scraper's results?

Yes. Run [Zillow Scraper](https://apify.com/automly/zillow-scraper) for an area, then pass its `url` or `zpid` column to this actor to get the full record of each home.

#### Does it return the listing agent's phone number?

Yes, when Zillow shows it on the listing: `agentName`, `agentPhoneNumber`, `agentEmail`, `brokerName`, `mlsId` and `mlsName`, on Zillow Showcase listings too.

#### What happens with a home that no longer exists?

It is reported as not found in the run's status and its report, it is not charged, and the run still succeeds with the other homes.

#### Do I need to change the connection settings?

No. Keep the default; it is the setup the scraper is tested with.

#### Can I connect Zillow Detail Scraper to other tools?

Yes. Start runs and download results with the Apify API or the Python and JavaScript clients, and send results to Make, Zapier, n8n, Google Sheets or Slack with Apify integrations and webhooks. AI agents can run it through the Apify MCP server, see the **Use with AI agents (MCP)** section above.

#### Is it legal to scrape Zillow?

Zillow Detail Scraper only collects public property data that anyone can see on Zillow, and it never logs in. The Ninth Circuit held that accessing publicly available web data does not violate the Computer Fraud and Abuse Act (hiQ Labs v. LinkedIn, 2022). Agent names, phone numbers and emails are personal data: use them in line with the GDPR, the CCPA and anti-spam laws, and ask a lawyer if you are unsure.

Zillow Detail Scraper is an independent tool. It is not affiliated with, endorsed by or sponsored by Zillow.

#### Something isn't working?

Open the **Issues** tab with your input and what you expected, or tell us which field you need.

### ⭐ Your feedback

Have an idea or found a problem? Tell us in the **Issues** tab. If Zillow Detail Scraper saved you time, a short review on the **Reviews** tab helps other people find it.

# Actor input Schema

## `startUrls` (type: `array`):

Links to Zillow home pages, e.g. https://www.zillow.com/homedetails/1709-Broderick-St-San-Francisco-CA-94115/15083084_zpid/. Apartment building pages (zillow.com/apartments/...) work too. Search result pages are not property pages: use Zillow Scraper for those.

## `zpids` (type: `array`):

Zillow property IDs, e.g. 15083084. The ZPID is the number before \_zpid in a Zillow home link.

## `addresses` (type: `array`):

Full street addresses, e.g. 2919 Jubilee Trl, Austin, TX 78748. Add the unit for apartments and condos (e.g. 67 Morton St APT 6E, New York, NY 10014). An address Zillow does not know is reported as not found.

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

Proxy settings. The default works for most runs.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.zillow.com/homedetails/1709-Broderick-St-San-Francisco-CA-94115/15083084_zpid/"
    }
  ],
  "addresses": [
    "2919 Jubilee Trl, Austin, TX 78748"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `homes` (type: `string`):

No description

## `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 = {
    "startUrls": [
        {
            "url": "https://www.zillow.com/homedetails/1709-Broderick-St-San-Francisco-CA-94115/15083084_zpid/"
        }
    ],
    "addresses": [
        "2919 Jubilee Trl, Austin, TX 78748"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("automly/zillow-detail-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 = {
    "startUrls": [{ "url": "https://www.zillow.com/homedetails/1709-Broderick-St-San-Francisco-CA-94115/15083084_zpid/" }],
    "addresses": ["2919 Jubilee Trl, Austin, TX 78748"],
}

# Run the Actor and wait for it to finish
run = client.actor("automly/zillow-detail-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 '{
  "startUrls": [
    {
      "url": "https://www.zillow.com/homedetails/1709-Broderick-St-San-Francisco-CA-94115/15083084_zpid/"
    }
  ],
  "addresses": [
    "2919 Jubilee Trl, Austin, TX 78748"
  ]
}' |
apify call automly/zillow-detail-scraper --silent --output-dataset

```

## MCP server setup

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