Zillow Home Value Index Scraper avatar

Zillow Home Value Index Scraper

Pricing

from $1.44 / 1,000 item extracteds

Go to Apify Store
Zillow Home Value Index Scraper

Zillow Home Value Index Scraper

Export official Zillow Home Value Index monthly observations for US metros and the country. Filter exact regions and dates with source provenance.

Pricing

from $1.44 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Automation Lab

Automation Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 days ago

Last modified

Categories

Share

Export the official Zillow home value index as monthly region/date/value observations for recurring housing-market benchmarking. Compare US metropolitan areas and the national series without extracting individual properties. The fixed dataset is middle-tier, all-home (single-family and condo), smoothed and seasonally adjusted ZHVI.

Who is it for?

Housing analysts, investment researchers and data teams can refresh dated regional series for dashboards, historical comparisons and residential-market research. This is an index export, not an individual home's Zestimate or an investment recommendation.

Why use this Actor?

Turn Zillow's wide CSV into tidy-long numeric rows. Exact region filters and inclusive dates select observations, while every row retains official source provenance and the newest source month. No account, browser, proxy or external paid data subscription is required.

Getting started

  1. Select region IDs or exact names; omit both for all available regions.
  2. Optionally restrict dates and region type.
  3. Set a global observation cap.
  4. Run and download the dataset as JSON, CSV or Excel using Apify's exports.
{"regionIds":[102001],"startDate":"2026-01-01","maxItems":25}

The national series uses RegionID 102001. Metros use names such as New York, NY. Names must match the entire source name; New York alone does not match that metro.

Zillow home value index coverage

Only the official Metro/country Metro_zhvi_uc_sfrcondo_tier_0.33_0.67_sm_sa_month.csv is supported. The source currently includes 895 regions and monthly history from 2000; individual region coverage can start later. Source availability and dates can change. No ZIP, city, county, state-level series, rent indices, mortgage rates or listings are included.

Inputs

FieldBehavior
regionIdsPositive integer IDs; ANY ID matches exactly.
regionNamesANY whole name matches, case-insensitive, trimmed. Mutually exclusive with regionIds.
regionTypeall (default), country, or msa (metro). Applies with either filter.
startDateInclusive YYYY-MM-DD lower bound. Omit for earliest history.
endDateInclusive YYYY-MM-DD upper bound. Omit for latest history.
maxItems1–10000 observations globally; default 1000. Zero/unlimited not supported.

Unknown input fields and malformed/conflicting filters fail. Results follow source region order and ascending dates within each region. The cap is applied after filtering and deduplication, not per region. A platform billing cap can stop earlier. For complete large histories, split runs by explicit regions and date ranges.

Output

One row represents one nonmissing monthly observation. Missing values are omitted, not converted to zero. Duplicate region/date pairs are removed.

FieldMeaning
regionId, regionName, regionTypeOfficial region identity and country/msa type.
stateNameSource state abbreviation; null for country or unavailable.
sizeRankZillow's region size rank, not a value ranking.
dateMonthly source observation date.
value, currencyNumeric ZHVI in USD.
metricExact fixed series identifier.
sourceUrlOfficial Zillow CSV.
sourceLatestDateNewest source date column; not the selected row date.
scrapedAtUTC fetch time, not a source publication time.

Example from the official national series:

{
"regionId": 102001,
"regionName": "United States",
"regionType": "country",
"stateName": null,
"sizeRank": 0,
"date": "2026-08-31",
"value": 368696.68474913173,
"currency": "USD",
"metric": "zhvi_uc_sfrcondo_tier_0.33_0.67_sm_sa",
"sourceUrl": "https://files.zillowstatic.com/research/public_csvs/zhvi/Metro_zhvi_uc_sfrcondo_tier_0.33_0.67_sm_sa_month.csv",
"sourceLatestDate": "2026-08-31",
"scrapedAt": "2026-10-12T14:00:00.000Z"
}

The fetch timestamp above is illustrative. Values and history can be revised by Zillow between runs.

How much does it cost to export Zillow home value index observations?

Pay-per-event billing includes one start fee of $0.0025 per run and one item event per saved observation. Rejected, missing and duplicate observations incur no item fee.

Spend tierPrice per observation
FREE$0.00276
BRONZE$0.0024
SILVER$0.001872
GOLD / PLATINUM / DIAMOND$0.00144

At BRONZE, 10 observations cost about $0.0265, 100 about $0.2425 and 1000 about $2.4025, including the start fee. These are estimates, not guaranteed invoices; refer to the pricing panel for your active tier. Spend tiers follow aggregate monthly Store spending, not a private per-Actor volume schedule.

Integrations

Schedule a recurring Apify run with explicit region IDs and recent dates, then send its dataset to a spreadsheet or warehouse. Join by regionId/date/metric, and upsert observations because historical values can change. Use sourceLatestDate to distinguish an unchanged source release from a new month. Scheduling and revision comparison happen in your downstream workflow; this Actor does not send alerts or maintain cross-run change state.

API usage

Start asynchronously, retain the returned run ID, follow that same run until terminal, and read its default dataset after success.

curl -X POST "https://api.apify.com/v2/acts/automation-lab~zillow-zhvi-regional-time-series/runs" \
-H "Authorization: Bearer $APIFY_TOKEN" -H 'Content-Type: application/json' \
-d '{"regionIds":[102001],"startDate":"2026-01-01","maxItems":25}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/zillow-zhvi-regional-time-series')
.call({ regionIds: [102001], startDate: '2026-01-01', maxItems: 25 });
console.log((await client.dataset(run.defaultDatasetId).listItems({ limit: 25 })).items);
from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/zillow-zhvi-regional-time-series').call(
run_input={'regionIds': [102001], 'startDate': '2026-01-01', 'maxItems': 25})
print(client.dataset(run['defaultDatasetId']).list_items(limit=25).items)

MCP

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/zillow-zhvi-regional-time-series"

Claude Desktop, Cursor and VS Code: use the equivalent HTTP-client configuration (client transport support may vary):

{"mcpServers":{"apify":{"url":"https://mcp.apify.com?tools=automation-lab/zillow-zhvi-regional-time-series"}}}

Configure Apify authentication according to your client. Discover actual names and schemas with tools/list; the selected Actor also adds run and storage helpers. Discovery does not authorize execution.

Example prompts: “Export US national ZHVI since January 2026, at most 25 observations.” Or “Extract the New York, NY monthly index for 2025, limited to 12 rows.” Start once with call-actor using a selected waitSecs of 30 (allowed 0–45 seconds; default 30). Configure the client's request timeout to 45 seconds, above that server wait plus transport margin, within a total 120-second deadline. Retain the returned run ID, status and storage IDs; these are metadata, not observations. If nonterminal, use get-actor-run for that same run with bounded backoff (2, 4, 8 seconds, capped at 10), stopping at the total deadline. At deadline report pending and its run ID, not a fabricated result. Recover known runs after transport timeouts rather than starting again; if the run ID is unknown, report uncertainty instead of blindly rerunning.

After success, use get-dataset-items with the returned defaultDatasetId and explicit limit: 20, offset: 0, and needed fields (for example regionId,regionName,date,value,currency,metric,sourceUrl,sourceLatestDate), in the argument format discovered by tools/list. Read untransformed JSON pages, advancing the source offset according to pagination metadata, not transformed row counts. Stop at source exhaustion or a total consumer budget of 100 source rows and 64 KiB serialized UTF-8 result content admitted to model context, whichever comes first. Process pages and enforce bytes host-side before model injection; omit or summarize oversized rows/pages with disclosure. If the client cannot intercept responses, do not claim a hard byte guarantee. Report returned rows, the continuation offset and partial/truncated status when incomplete; full exports remain in storage or downstream processing outside model context. Failed runs may have partial data, not a successful complete result. These consumer context limits do not reduce Actor collection scope or output fields.

Reliability and limitations

The fixed public CSV is fetched once per run, with at most three attempts for network timeouts, HTTP 429 or temporary server errors. Deterministic failures and malformed source data fail visibly. No proxy fallback is enabled. An unmatched region or date range returns an empty successful dataset; inspect your exact filter and available source dates. Data is monthly and revised, not real-time.

Data handling, AI and responsible use

No AI is used in runtime extraction or output. Data consists of public regional housing statistics, not personal property records. Filters and summary are stored in the run's input/KV store; results and logs use your Apify storage retention settings. The Actor does not maintain global caches or sessions. Delete run storage through Apify when no longer needed.

Failed operations send sanitized diagnostic input, exceptions and Actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL queries are removed; reports are retained for 30 days. No diagnostic credentials are public inputs. Apify hosts runtime and storage; Zillow provides the public export.

Legality and attribution

Use Zillow Research attribution and review source terms and methodology for your intended redistribution/use. This independent tool is not affiliated with or endorsed by Zillow. It uses Apify's standard user terms and does not grant additional rights to source data.

FAQ and troubleshooting

Is this a home's Zestimate? No: it is a regional index series, not a property estimate.

Why are some months absent? Blank source cells are omitted; coverage varies by region. No interpolation is performed.

Why did my recent dates return nothing? The current export may end before your date range. Check sourceLatestDate from an unfiltered date control.

How do I get complete history for all regions? Partition by region/date; each run caps accepted observations globally at 10000. A run at the cap is not evidence of source exhaustion.

Where can I report a problem? Open an Apify Store issue with your input and run link; never include credentials.

For individual property/listing data rather than regional indices, see Zillow Scraper. This Actor remains a separate official monthly-series workflow.