# Zillow Property Search Scraper (`myagizm/zillow-scraper`) Actor

Search public Zillow listings by location or URL for sale, rent, and recently sold.

- **URL**: https://apify.com/myagizm/zillow-scraper.md
- **Developed by:** [MYM](https://apify.com/myagizm) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 50.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.20 / 1,000 property listings

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/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 Property Search Scraper

Search Zillow public listing pages by location or Zillow search URL. Choose for sale, for rent, or recently sold and receive one structured dataset row per unique property.

### What it returns

| Field | Description |
|---|---|
| `zpid`, `address`, `detailUrl` | Zillow property ID, listing address, and listing page URL |
| `price`, `zestimate`, `rentZestimate` | Listed price and estimates when present in the search data |
| `beds`, `baths`, `sqft`, `lot`, `yearBuilt`, `homeType` | Property characteristics when available |
| `status`, `daysOnZillow`, `priceChange` | Listing status, age, and latest price change when present |
| `photos` | Photo URLs included in the search result |
| `agent`, `broker`, `lat`, `lng` | Search-page attribution and coordinates when available |

Fields absent from Zillow's public search payload are returned as `null` or an empty photo list. This is a search-only Actor; it does not open property detail pages or claim full price/tax history.

### Input

Provide either `location` (for example, `Seattle, WA`) or an HTTPS Zillow homes search URL. If both are present, `searchUrl` takes precedence. Select `listingType`: `for_sale`, `for_rent`, or `sold`.

`maxItems` caps the number of unique rows. Dense areas are subdivided by map bounds and paginated per area; results are deduplicated by `zpid`. A global time budget bounds the full run. Verified partial results can be returned if the deadline is reached after listings have been collected.

### Errors & billing

Input errors finish with status SUCCEEDED, no results and no charge; see the OUTPUT record for the reason. Upstream access denials remain FAILED and are never classified as customer input errors.

### Pricing

PAY\_PER\_EVENT: **$0.0012 per stored listing result** ($1.20 per 1,000 results). A failed or zero-result run stores no rows and does not bill result events.

### Limits

- Data is limited to fields Zillow exposes on public search pages; estimates and some property attributes may not be present for every listing.
- Zillow may deny or challenge a search. If access is denied, the run fails rather than returning an empty successful dataset.
- A search URL must be an HTTPS `zillow.com` homes search URL.

***

## Zillow 房源搜索爬虫

按地点或 Zillow 搜索链接检索 Zillow 公开房源页面。可选择出售、出租或已售房源；每个去重后的房源写入一条结构化数据记录。

### 输出字段

| 字段 | 说明 |
|---|---|
| `zpid`、`address`、`detailUrl` | Zillow 房源 ID、地址和房源页面链接 |
| `price`、`zestimate`、`rentZestimate` | 挂牌价格及搜索数据中提供的估值 |
| `beds`、`baths`、`sqft`、`lot`、`yearBuilt`、`homeType` | 房屋属性（如页面提供） |
| `status`、`daysOnZillow`、`priceChange` | 房源状态、挂牌天数及最新价格变化（如有） |
| `photos` | 搜索结果提供的照片链接 |
| `agent`、`broker`、`lat`、`lng` | 页面中的经纪人/公司信息和坐标（如有） |

Zillow 公开搜索数据中没有的字段会返回 `null`，照片缺失时返回空列表。本 Actor 仅搜索房源，不访问房屋详情页，也不承诺提供完整价格或税费历史。

### 输入

填写 `location`（例如 `Seattle, WA`）或 HTTPS Zillow 房源搜索链接。两者都填写时优先使用 `searchUrl`。`listingType` 可选 `for_sale`、`for_rent` 或 `sold`。

`maxItems` 限制唯一房源数量。高密度区域会按地图范围递归细分，并在各区域分页；结果按 `zpid` 去重。整个运行受统一时间预算限制。若已收集到房源后达到时限，可能返回已验证的部分结果。

### 错误与计费

输入错误会以 SUCCEEDED 状态结束，不返回结果且不收费；原因请查看 OUTPUT 记录。上游访问拒绝仍以 FAILED 结束，不会误判为客户输入错误。

### 价格

按事件计费：**每条已存储房源 $0.0012**（每 1,000 条 $1.20）。运行失败或没有结果时不会写入数据，也不会产生结果事件费用。

### 限制

- 输出仅包含 Zillow 公开搜索页面提供的字段；不同房源可能缺少估值或部分属性。
- Zillow 可能拒绝请求或要求验证。遇到访问拒绝时，运行会失败，不会伪装成空结果成功。
- 搜索链接必须是 HTTPS `zillow.com` 房源搜索链接。

### Free plan limits

Free Apify plan users may request up to 40 listing results per Apify user ID per UTC day. Requested results count even when Zillow returns fewer rows. Paid Apify plans are unlimited. When the limit is reached, the Actor exits successfully with a clear note, no new dataset rows, and no result charge.

### 免费计划限制

Apify 免费计划用户每个 UTC 日、每个 Apify 用户 ID 最多可请求 40 条房源结果；即使 Zillow 返回的行数较少，也按请求数量计数。付费 Apify 套餐不受此限制。达到上限时，Actor 会正常成功退出并显示说明，不新增数据行，也不收取结果费用。

# Actor input Schema

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

City, ZIP code, neighborhood, or other Zillow search location. Use either this or Search URL; Search URL takes precedence if both are supplied.

## `searchUrl` (type: `string`):

Optional HTTPS Zillow homes search URL. Use this to preserve Zillow search filters or a map area. Only zillow.com homes search URLs are accepted; when both target fields are provided this URL is used.

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

Listings to search: for\_sale, for\_rent, or sold. For an input URL, this selects the corresponding Zillow search status.

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

Maximum unique listings to return. Results are deduplicated by Zillow property ID (zpid).

## `maxPagesPerBounds` (type: `integer`):

Page cap for each map-bounds area. Dense areas are recursively divided to search beyond Zillow's per-area result cap.

## `timeoutSeconds` (type: `integer`):

One global deadline for the full search, including map subdivision and pagination. Verified partial results may be returned if the deadline is reached after results are found.

## Actor input object example

```json
{
  "location": "Seattle, WA",
  "listingType": "for_sale",
  "maxItems": 100,
  "maxPagesPerBounds": 40,
  "timeoutSeconds": 210
}
```

# Actor output Schema

## `results` (type: `string`):

All returned property listings with search-page fields.

## `fullJson` (type: `string`):

Complete listing records, including fields not shown in the table view.

# 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 = {
    "location": "Seattle, WA",
    "listingType": "for_sale",
    "maxItems": 100,
    "maxPagesPerBounds": 40,
    "timeoutSeconds": 210
};

// Run the Actor and wait for it to finish
const run = await client.actor("myagizm/zillow-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 = {
    "location": "Seattle, WA",
    "listingType": "for_sale",
    "maxItems": 100,
    "maxPagesPerBounds": 40,
    "timeoutSeconds": 210,
}

# Run the Actor and wait for it to finish
run = client.actor("myagizm/zillow-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 '{
  "location": "Seattle, WA",
  "listingType": "for_sale",
  "maxItems": 100,
  "maxPagesPerBounds": 40,
  "timeoutSeconds": 210
}' |
apify call myagizm/zillow-scraper --silent --output-dataset

```

## MCP server setup

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