# Zillow Area Statistic (`alol/zillow-area-statistic`) Actor

Get Zillow ZIP market medians, quartiles, and inventory breakdowns with coverage checks. Incomplete samples are flagged and unreliable aggregates are withheld.

- **URL**: https://apify.com/alol/zillow-area-statistic.md
- **Developed by:** [Al Ol](https://apify.com/alol) (community)
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.30 / 1,000 zillow area statistics

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?

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 Market Statistics by ZIP Code: Sale and Rental Data

**Get Zillow housing market statistics by ZIP code for active homes for sale or rent.** Zillow Area Statistic calculates medians, quartiles, and property-type counts from collected listing data, with an explicit check on sample coverage. Use one aggregate row to compare asking prices and inventory in a local market.

- **Calculate directly from map listings:** use each individual card’s price and area, skipping building inventories and per-unit requests.
- **Keep available statistics:** receive every computable metric, with coverage and sample-quality flags alongside the values.
- **Understand the sample:** expected and collected counts, coverage, exclusions, and metric availability accompany the statistics.
- **Skip manual aggregation:** get price distributions and available rent, size, bedroom, bathroom, and Zestimate summaries from a single ZIP input.

Zillow Area Statistic returns one aggregate row for one five-digit US ZIP code. Choose active homes for sale or active rentals; the Actor collects Zillow `mapResults`, removes unsuitable observations, and calculates metrics from the available sample. Low coverage, degraded collection, or a small price-per-square-foot sample do not suppress values. A metric is null only when its inputs are unavailable or it does not apply to the selected listing type.

`status` is `ok`, `insufficient_data`, or `failed`. `insufficient_data` flags a price-per-square-foot sample below 10 valid observations or 80% coverage while still returning its available metrics. `ok` does not promise full market coverage: inspect `quality.completeness`, `quality.coverage`, and `quality.reasons`. Partial collections are returned but are not stored in the aggregate cache.

To collect the individual map cards used for this type of analysis, use [Zillow Map Results](https://apify.com/alol/zillow-map-results). For source-provided Realtor.com ZIP market aggregates, use [Realtor.com ZIP Market Stats](https://apify.com/alol/realtor-zip-statistics).

### Grouped building cards and sample counts

Zillow sometimes combines several properties into one building card. This Actor identifies groups from building flags, identifiers, or building/apartment URLs and excludes them before any inventory or property-detail request. A building’s “from” price never enters price or price-per-square-foot statistics. An individual property already present as its own map card remains eligible and is deduplicated by ZPID.

`listing_count`, `collected_count`, and collection coverage describe source map cards, including each unique excluded group once. Zillow’s `displayResultsCount` is used when present because its total may count apartments inside groups. `quality.rental_community_cards_excluded` reports excluded groups for both sale and rental searches; `quality.eligible_listing_count` reports the individual, non-land listings used for price metrics. These card counts do not estimate the number of apartments inside buildings.

Only individual cards matching the selected sale or rental cohort enter price metrics. Sold, pending, and off-market properties do not enter active-sale statistics. Excluded groups alone do not degrade collection; missing search cards, failed search requests, and truncated scans still affect quality. Missing numeric values are excluded from the relevant metric, and a metric without enough usable data remains `null`.

### Input examples

#### For-sale ZIP

```json
{
  "zipCode": "10001",
  "listing_type": "for_sale"
}
```

#### For-rent ZIP

```json
{
  "zipCode": "10001",
  "listing_type": "for_rent"
}
```

### Output examples

#### Successful aggregate

```json
{
  "record_type": "area_statistic",
  "zip_code": "10001",
  "listing_type": "for_sale",
  "price_basis": "listing_price",
  "status": "ok",
  "listing_count": 125,
  "collected_count": 125,
  "valid_price_per_sqft_count": 112,
  "median_listing_price": 895000,
  "listing_price_p25": 699000,
  "listing_price_p75": 1250000,
  "median_rent_price": null,
  "rent_price_p25": null,
  "rent_price_p75": null,
  "median_price_per_sqft": 1042.31,
  "price_per_sqft_p25": 899.45,
  "price_per_sqft_p75": 1215.7,
  "median_living_area_sqft": 875,
  "median_beds": 1,
  "median_baths": 1,
  "median_zestimate": 902500,
  "median_rent_zestimate": 4200,
  "home_type_counts": {
    "CONDO": 89,
    "SINGLE_FAMILY": 36
  },
  "status_counts": {
    "FOR_SALE": 118,
    "FSBO": 5,
    "FORECLOSURE": 2
  },
  "quality": {
    "expected": 125,
    "collected": 125,
    "coverage": 1,
    "truncated": false,
    "degraded": false,
    "eligible_listing_count": 125,
    "valid_price_count": 125,
    "valid_price_per_sqft_count": 112,
    "price_per_sqft_coverage": 0.896,
    "rental_community_cards_excluded": 0,
    "data_age_seconds": null,
    "completeness": "complete",
    "reasons": [
      "searchCacheAgeUnavailable"
    ]
  },
  "generated_at": "2026-09-02T00:00:00.000Z"
}
```

#### Insufficient-data aggregate

```json
{
  "record_type": "area_statistic",
  "zip_code": "10001",
  "listing_type": "for_rent",
  "price_basis": "monthly_rent",
  "status": "insufficient_data",
  "listing_count": 8,
  "collected_count": 8,
  "valid_price_per_sqft_count": 6,
  "median_listing_price": null,
  "listing_price_p25": null,
  "listing_price_p75": null,
  "median_rent_price": 4100,
  "rent_price_p25": 3650,
  "rent_price_p75": 4850,
  "median_price_per_sqft": 5.25,
  "price_per_sqft_p25": 4.63,
  "price_per_sqft_p75": 5.88,
  "median_living_area_sqft": 760,
  "median_beds": 1,
  "median_baths": 1,
  "median_zestimate": null,
  "median_rent_zestimate": 4050,
  "home_type_counts": {
    "APARTMENT": 8
  },
  "status_counts": {
    "FOR_RENT": 8
  },
  "quality": {
    "expected": 8,
    "collected": 8,
    "coverage": 1,
    "truncated": false,
    "degraded": false,
    "eligible_listing_count": 8,
    "valid_price_count": 8,
    "valid_price_per_sqft_count": 6,
    "price_per_sqft_coverage": 0.75,
    "rental_community_cards_excluded": 0,
    "data_age_seconds": null,
    "completeness": "complete",
    "reasons": [
      "pricePerSqftSampleBelow10",
      "pricePerSqftCoverageBelow0.8",
      "searchCacheAgeUnavailable"
    ]
  },
  "generated_at": "2026-09-02T00:00:00.000Z"
}
```

#### Failed aggregate

```json
{
  "record_type": "area_statistic",
  "zip_code": "10001",
  "listing_type": "for_sale",
  "price_basis": "listing_price",
  "status": "failed",
  "listing_count": null,
  "collected_count": null,
  "valid_price_per_sqft_count": null,
  "median_listing_price": null,
  "listing_price_p25": null,
  "listing_price_p75": null,
  "median_rent_price": null,
  "rent_price_p25": null,
  "rent_price_p75": null,
  "median_price_per_sqft": null,
  "price_per_sqft_p25": null,
  "price_per_sqft_p75": null,
  "median_living_area_sqft": null,
  "median_beds": null,
  "median_baths": null,
  "median_zestimate": null,
  "median_rent_zestimate": null,
  "home_type_counts": null,
  "status_counts": null,
  "quality": {
    "expected": null,
    "collected": 0,
    "coverage": null,
    "truncated": true,
    "degraded": true,
    "eligible_listing_count": 0,
    "valid_price_count": 0,
    "valid_price_per_sqft_count": 0,
    "price_per_sqft_coverage": 0,
    "rental_community_cards_excluded": 0,
    "data_age_seconds": null,
    "completeness": "failed",
    "reasons": [
      "targetFetchFailed"
    ]
  },
  "generated_at": "2026-09-02T00:00:00.000Z"
}
```

### Pricing

There is no fixed start charge. Platform usage is included in the event prices below. One published non-failed ZIP aggregate row is charged as one `area-statistic`; failed rows and failed dataset writes are free. `ok` and `insufficient_data` rows are billed, including rows calculated from a partial collection.

The effective result price depends on the customer's Apify account tier. Apify applies the rate for the customer's eligible account tier to every charged area-statistic row:

| Apify tier | Per area-statistic row | Per 1,000 rows |
| --- | ---: | ---: |
| FREE | `$0.00360` | `$3.60` |
| BRONZE | `$0.00350` | `$3.50` |
| SILVER | `$0.00340` | `$3.40` |
| GOLD | `$0.00330` | `$3.30` |

Prices may change; the Apify Console shows the effective tier and price before a run.

The aggregate describes the current for-sale or for-rent cohort at its recorded generation time. Rental price-per-square-foot uses monthly rent; for-sale values use asking prices. It is not a sold-transaction median. Cached results retain their original timestamp. Coverage and excluded rental-community counts must be considered before comparing ZIP codes. `daysOnZillow`, days on market, and days to pending are different metrics; this Actor does not substitute one for another. The public input has no `maxTotalChargeUsd` field; use the platform run spending limit.

### FAQ

#### Is this Zillow Research data or a housing price forecast?

This Actor calculates a current snapshot from collected Zillow map listings. It does not return the Zillow Home Value Index, the Zillow Observed Rent Index, historical index series, or housing price forecasts. Coverage and quality flags describe the sample used for the returned metrics.

#### Is rental price per sqft annualized?

No. For `for_rent`, `median_price_per_sqft` is advertised monthly rent divided by living area, and `price_basis` is `monthly_rent`.

#### Why are all metrics null?

No usable numeric observations were available, the initial search failed, or the metrics belong to the other listing type (sale versus rent). Low coverage alone does not null the metrics. Inspect `status`, `quality.completeness`, and `quality.reasons`; missing values are not zero.

#### Are rental communities expanded into individual properties?

No. Grouped cards are counted once for coverage and listed in `rental_community_cards_excluded`. Prices and areas come from individual map listings; the Actor makes no building-inventory or per-unit requests.

### Related Actors

Explore our other real-estate Actors for property discovery, enrichment, market analysis, and monitoring:

- [Zillow Search](https://apify.com/alol/zillow-search) — Collect listing cards by ZIP code, location, search URL, or map bounds.
- [Zillow Map Results](https://apify.com/alol/zillow-map-results) — Collect lightweight map cards with coordinates and Zillow property IDs.
- [Zillow Property Details](https://apify.com/alol/zillow-property-details) — Enrich Zillow property IDs or detail URLs with detailed property records.
- [Zillow Listing Monitor](https://apify.com/alol/zillow-listing-monitor) — Track new listings, price changes, status changes, and confirmed delistings across repeated scans.
- [Realtor.com Listings by ZIP](https://apify.com/alol/realtor-search) — Collect Realtor.com listing cards and separate market-statistics rows by ZIP code.
- [Realtor.com ZIP Market Stats](https://apify.com/alol/realtor-zip-statistics) — Get Realtor.com housing-market aggregates by ZIP code without collecting listing cards.
- [Realtor.com Property Details](https://apify.com/alol/realtor-property-details) — Enrich Realtor.com property IDs or detail URLs with detailed property records.

### Responsible use and data availability

Use the Actor only where collection and downstream processing comply with applicable law, contractual terms, privacy obligations, and platform rules. Zillow controls upstream availability and fields can be missing, delayed, or changed. This Actor is not affiliated with or endorsed by Zillow and does not grant rights to provider or MLS data.

# Actor input Schema

## `zipCode` (type: `string`):

Exactly one five-digit US ZIP code.

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

Calculate statistics for active for-sale or for-rent listings.

## Actor input object example

```json
{
  "zipCode": "94027",
  "listing_type": "for_sale"
}
```

# Actor output Schema

## `results` (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 = {
    "zipCode": "94027",
    "listing_type": "for_sale"
};

// Run the Actor and wait for it to finish
const run = await client.actor("alol/zillow-area-statistic").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 = {
    "zipCode": "94027",
    "listing_type": "for_sale",
}

# Run the Actor and wait for it to finish
run = client.actor("alol/zillow-area-statistic").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 '{
  "zipCode": "94027",
  "listing_type": "for_sale"
}' |
apify call alol/zillow-area-statistic --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,alol/zillow-area-statistic"
        }
    }
}
```

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/azj8nedvKr1OAYOXA/builds/ee4eayNKfWPKxaJDk/openapi.json
