Zillow Market Data Scraper — ZHVI · Rent · Mortgage Rates
Pricing
from $3.75 / 1,000 market metric extracteds
Zillow Market Data Scraper — ZHVI · Rent · Mortgage Rates
Pull Zillow's ZHVI home value index, rent appreciation history, and current mortgage rates for any US metro or zipcode. Tidy-long output — one row per metric × period — drops cleanly into BigQuery, Snowflake, or pandas. Built for REITs, funds, and PropTech analytics teams.
Pricing
from $3.75 / 1,000 market metric extracteds
Rating
0.0
(0)
Developer
SIÁN OÜ
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
Zillow Market Data Scraper — ZHVI · Rent · Mortgage Rates 🚀
🎉 NEW: 200 rows per query — ZHVI + rent + mortgage in one tidy-long feed
Built for REIT analysts, PropTech engineers, and real-estate fund ETL teams who need normalized housing-market data without ATTOM-tier minimums.
📋 Overview
The macro-data feed real-estate engineers actually want — pull Zillow's ZHVI home value index, rent appreciation history, and current mortgage rates for any US metro, city, or zipcode in one normalized stream.
Why thousands of data teams choose us:
- ✅ 3 endpoints in one feed: ZHVI history + rent appreciation + mortgage rates — no juggling three actors
- ⚡ ~200 rows per area query: 106 housing + 85 rental + 16 mortgage rows, one call
- 🎯 Tidy-long output: one row per
(source × metric × period × location)— drops straight into BigQuery, Snowflake, pandas - 💰 ~$1.00 per metro query at BRONZE: order of magnitude below ATTOM, HouseCanary, Black Knight, CoreLogic monthly minimums
- 💎 100 monthly ZHVI data points per metro (~8 years of history) + 47-bucket rent histogram + 16 daily mortgage products
- ✨ NEW: Full FREE-tier sample — no row truncation, evaluate the complete time-series before you scale
✨ Features
- 🏠 ZHVI Time-Series: 100 monthly Zillow Home Value Index points per metro for performance attribution and trend analysis
- 🏘️ Rent Appreciation Feed: 12-month median rent history + 47-bucket rent price histogram + 6 nearby-area comps + 10 zipcode trends
- 💰 16 Mortgage Products: 30yr fixed, 15yr fixed, 20yr, 10yr, FHA, VA, ARM, Jumbo — refreshed with daily rate + APR + points
- 📊 Tidy-Long Output: Primary-key-ready
(source_type, location_id, metric_name, period_start)— no nested-blob parsing - 🗺️ Any US Location: Metro names (
Austin, TX), city + state, or 5-digit zipcodes (90210,10001) — all supported - ⚙️ Per-Source Toggles: Switch off endpoints you don't need to control row counts and spend
- 📥 Batch Mode: Process dozens of metros in a single run — perfect for portfolio-wide market refreshes
- 📈 HTML Run Report: Per-location and per-metric row-count summary saved to key-value store
- 🔁 Stable IDs:
locationIdis stable across runs — re-join over time without fuzzy matching - 🌎 US-Wide Coverage: National mortgage rates + every metro, city, and zipcode in Zillow's research footprint
🎬 Quick Start
Pick one or more US metros, cities, or zipcodes. Run. Get ~200 normalized rows per query — ready to load into your warehouse.
curl -X POST https://api.apify.com/v2/acts/sian.agency~zillow-market-analytics-scraper/runs?token=YOUR_TOKEN \-d '{"searchQueries": ["Austin, TX"]}'
🚀 Getting Started (3 Simple Steps)
Step 1: Pick your areas
Add one or more US metros, cities, or zipcodes to searchQueries. Examples: Austin, TX · Brooklyn, NY · 90210 · San Francisco, CA.
Step 2: Choose your endpoints
Toggle includeHousingMarket, includeRentalMarket, and includeMortgageRates based on which feed you need. All three default to true.
Step 3: Run the actor
Hit Run on Apify Store, or call the API. Results land in the default dataset as tidy-long rows — ready for SQL, pandas, or your BI tool.
That's it! In under 60 seconds, you'll have:
- ~106 housing-market rows per metro (ZHVI history + sale-side dynamics)
- ~85 rental-market rows per metro (rent histogram + comps + trends)
- 16 national mortgage-rate rows (one per loan product)
📥 Input Configuration
| Field | Type | Required | Description |
|---|---|---|---|
searchQueries | array | Yes | US metros, cities, or zipcodes to pull market data for |
includeHousingMarket | bool | No | Toggle ZHVI history + sale-side dynamics (default true) |
includeRentalMarket | bool | No | Toggle rent histogram + appreciation + comps (default true) |
includeMortgageRates | bool | No | Toggle daily national mortgage rate snapshot (default true) |
Example:
{"searchQueries": ["Austin, TX"]}
Batch Processing:
{"searchQueries": ["Austin, TX", "Brooklyn, NY", "90210", "San Francisco, CA"],"includeHousingMarket": true,"includeRentalMarket": true,"includeMortgageRates": true}
📤 Output
Results are saved to the Apify dataset with 14+ fields per row in tidy-long shape:
| Field | Type | Description |
|---|---|---|
sourceType | string | Which endpoint produced this row — housing_market, rental_market, or current_mortgage_rates |
metricName | string | Canonical metric identifier — zhvi, medianRent, mortgageRate30YrFixed, medianDaysToPending, etc. |
metricValue | number | Numeric value (price, rate, count, percent) |
unit | string | Display unit — usd, percent, count, days, usd_per_month |
currency | string | ISO 4217 currency code (USD in v1.0) |
periodStart | string | ISO-8601 period start date |
periodEnd | string | ISO-8601 period end date |
locationId | string | Stable Zillow / realtyAPI area identifier — safe primary key |
locationLabel | string | Human-readable location (Austin, TX, 10001, Brooklyn, NY) |
locationType | string | city, zipcode, metro, state, or national |
bucketLabel | string | Histogram bucket label for rent-price distribution rows |
queryInput | string | Verbatim user input that generated this row |
fetchedAt | string | ISO-8601 timestamp when upstream returned the row |
extra | object | Original blob fragment kept for full traceability |
Example row (ZHVI history point):
{"sourceType": "housing_market","metricName": "zhvi","metricValue": 511263.62,"unit": "usd","currency": "USD","periodStart": "2026-04-01","periodEnd": "2026-04-30","locationId": "10221","locationLabel": "Austin, TX","locationType": "city","queryInput": "Austin, TX","fetchedAt": "2026-05-21T08:42:33.182Z"}
Export to JSON, CSV, Excel, or XML directly from the Apify dataset — or stream via the Apify API into your warehouse of choice.
💼 Use Cases & Examples
1. ZHVI Time-Series Feed for REIT Analytics
REIT analysts loading 100 monthly ZHVI data points per metro into BigQuery for portfolio performance attribution.
Input: List of metros where the trust holds properties.
Output: Tidy-long ZHVI history + sale dynamics per metro, ready for SQL JOIN against portfolio holdings.
Use: Quarterly performance attribution decks, NAV calculations, geographic risk dashboards.
2. Rent Appreciation Tracking for PropTech
Build-to-rent investment platforms tracking 12-month median rent + 47-bucket rent histogram per zipcode for underwriting models.
Input: Target acquisition zipcodes. Output: Rent appreciation curves + price distributions + nearby comps. Use: Auto-refresh PropTech dashboards that show rent trajectory and competitive density.
3. Mortgage Rate Snapshots for Affordability Calculators
Fintech and brokerage teams refreshing 16 loan products daily (30yr fixed, 15yr fixed, FHA, VA, ARM, Jumbo) for customer-facing affordability widgets.
Input: Toggle includeMortgageRates: true.
Output: 16 national rate rows per run — rate + APR + points + loan type.
Use: Mortgage calculators, pre-qual tools, customer-facing rate tickers.
4. Market Comp Analysis for Real Estate Funds
Acquisition teams at private real-estate funds pulling nearby-area rent comps and zipcode trends for diligence on new markets.
Input: Target metros under evaluation. Output: 6 nearby-area comps + 10 zipcode trends per query. Use: Acquisition memos, market-entry diligence, comp pricing.
5. Macro Real-Estate Dashboards for MLS Resellers
MLS data resellers and market-intelligence vendors building dashboards on Zillow's research footprint — without ATTOM-tier monthly minimums.
Input: Bulk list of metros the dashboard covers. Output: Normalized ZHVI + rent + mortgage feeds at ~$1 per metro query. Use: Replace $500–$5000/mo ATTOM, HouseCanary, Black Knight, CoreLogic contracts with on-demand calls.
6. Affordability Index Research
Housing-policy researchers and economists combining ZHVI, median rent, and 30yr-fixed rates to compute metro-level affordability indexes over time.
Input: Set of metros being studied.
Output: Aligned home-value + rent + mortgage rows on a single periodStart axis.
Use: Academic papers, policy briefs, public-facing housing indexes.
7. Geographic Cohort Analysis for Portfolio Risk
Real estate hedge funds stress-testing geographic concentration via ZHVI cohort trends and rent appreciation deltas.
Input: Top-25 metros by exposure. Output: Tidy-long history per metro, ready for cohort joins. Use: Risk committee reports, hedging strategy, allocation rebalancing.
🔗 Integration Examples
JavaScript/Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('sian.agency/zillow-market-analytics-scraper').call({searchQueries: ['Austin, TX', 'Brooklyn, NY'],includeHousingMarket: true,includeRentalMarket: true,includeMortgageRates: true});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('sian.agency/zillow-market-analytics-scraper').call(run_input={'searchQueries': ['Austin, TX', 'Brooklyn, NY'],'includeHousingMarket': True,'includeRentalMarket': True,'includeMortgageRates': True})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item)
cURL
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~zillow-market-analytics-scraper/runs?token=YOUR_TOKEN' \-H 'Content-Type: application/json' \-d '{"searchQueries": ["Austin, TX", "Brooklyn, NY"]}'
Automation Workflows (n8n / Zapier / Make)
- Trigger: Schedule (e.g. monthly on ZHVI release day) or webhook
- HTTP Request: Call the Apify Actor API with your metro list
- Process: Parse the tidy-long JSON rows
- Action: Stream into BigQuery / Snowflake / Postgres, push KPIs to Slack, or refresh a Looker / Metabase dashboard
📊 Performance & Pricing
FREE Tier (Try It Now)
- 1 area query per run — full ~200 rows, no truncation
- Complete time-series sample (all 100 ZHVI points, full rent histogram, all 16 mortgage products)
- No credit card required
- Perfect for evaluating data quality before scaling
PAID Tiers (Production Ready)
- Unlimited area queries per run
- 6-tier volume ladder — bigger refreshes get cheaper per row
- Pay-per-event: charged per metric row delivered, not per failed call
| Tier | Per Row (market-metric-extracted) | Per Run (apify-actor-start) |
|---|---|---|
| FREE | $0.015 | $0.050 |
| BRONZE | $0.005 | $0.005 |
| SILVER | $0.00438 | $0.005 |
| GOLD | $0.00375 | $0.005 |
| PLATINUM | $0.0025 | $0.005 |
| DIAMOND | $0.0015 | $0.005 |
💰 Headline math: ~200 rows per metro × $0.005 BRONZE = ~$1.00 per metro query — an order of magnitude below the $500–$5000/mo minimums charged by ATTOM, HouseCanary, Black Knight, and CoreLogic for equivalent normalized feeds.
❓ Frequently Asked Questions
Q: What's "tidy-long" and why does it matter?
A: One row per (source × metric × period × location). It's the shape data engineers, BI tools, and SQL warehouses expect. You can GROUP BY metricName or JOIN on locationId directly — no nested-blob parsing, no preprocessing step.
Q: How fresh is the data? A: ZHVI is published monthly by Zillow Research — we surface their latest release. Rent statistics refresh monthly. Mortgage rates are snapshot daily (priced to the previous business day).
Q: How many areas can I process per run? A: FREE tier: 1 area query (~200 complete rows). PAID tiers: unlimited — batch dozens of metros in one call.
Q: Can I query specific zipcodes?
A: Yes — pass any valid US 5-digit zipcode in searchQueries (e.g. ["10001", "90210"]). City queries (Austin, TX) also return ten constituent zipcodes via the rental endpoint.
Q: What output formats are available? A: JSON, CSV, Excel (XLSX), and XML — export directly from the Apify dataset, or stream rows via the Apify API.
Q: How is this different from per-property scrapers? A: This actor delivers area-level macro data (metro / city / zipcode aggregates). For per-property data (Zestimate history, tax history, listing details), use Zillow Property Scraper — different row shape entirely.
Q: Is this legal? A: Yes — we extract only publicly available Zillow research data. See the Legal section below.
Q: How long does processing take? A: Typically 10–30 seconds per area query. Mortgage rates run once per execution regardless of query count.
🐛 Troubleshooting
No rows returned for a city query
- Verify the city + state format:
Austin, TX(city name, comma, two-letter state).Austin Texaswill not resolve. - Try a zipcode instead: small towns may not be covered by Zillow research; the nearest zipcode usually is.
Mortgage row count looks low
current_mortgage_ratesruns once per execution regardless of how many areas you query — that produces 16 national rows, not 16 per area. Toggle offincludeMortgageRatesif you only need housing + rental data.
Some rows have null in metricValue
- Expected for inventory rows that carry only metadata (e.g.
nearbyArealookups). FiltermetricValue IS NOT NULLin your warehouse if you only want numeric metrics.
Run finished but row count is lower than expected
- Toggle settings: each
include*flag drops the row count by ~85–106 rows per area. Re-enable to get the full ~200-row sample.
FREE-tier run capped at one area
- That's by design — FREE shows a complete sample (all rows for one area, no truncation). Upgrade to BRONZE for unlimited batch queries.
⚖️ Is it legal to scrape data?
Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.
However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
You can also read Apify's blog post on the legality of web scraping.
⚠️ Trademark Disclaimer
This is an independent tool created by SIÁN Agency. We are not affiliated with, endorsed by, or sponsored by Zillow Group, Inc. "Zillow", "ZHVI" (Zillow Home Value Index), and related marks are trademarks of Zillow Group, Inc. used here under nominative fair use for descriptive purposes only. This actor pulls publicly available Zillow research data and reformats it into a normalized row stream — it does not replicate, mirror, or republish Zillow's proprietary applications.
🤝 Support
Join our active support community
- For issues or questions, open an issue in the actor's repository on Apify Console
- Check SIÁN Agency Store for more real-estate and data-feed actors
- 📧 apify@sian-agency.online
Built by SIÁN Agency | More Tools
