# Zillow Market Data Scraper — ZHVI · Rent · Mortgage Rates (`sian.agency/zillow-market-analytics-scraper`) Actor

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.

- **URL**: https://apify.com/sian.agency/zillow-market-analytics-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Real estate, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.75 / 1,000 market metric extracteds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Data Scraper — ZHVI · Rent · Mortgage Rates 🚀

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![SIÁN Zillow Property Scraper](https://img.shields.io/badge/SI%C3%81N-Zillow%20Property%20Scraper-1F4E79)](https://apify.com/sian.agency/zillow-property-scraper?fpr=sian) [![SIÁN Realtor.com Scraper](https://img.shields.io/badge/SI%C3%81N-Realtor.com%20Scraper-D92228)](https://apify.com/sian.agency/realtor-property-scraper?fpr=sian) [![SIÁN Redfin Scraper](https://img.shields.io/badge/SI%C3%81N-Redfin%20Scraper-A02021)](https://apify.com/sian.agency/redfin-property-scraper?fpr=sian)

#### 🎉 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**: `locationId` is 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.

```bash
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:**

```json
{
  "searchQueries": ["Austin, TX"]
}
```

**Batch Processing:**

```json
{
  "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):**

```json
{
  "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

```javascript
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

```python
from apify_client import ApifyClient
client = 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

```bash
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)

1. **Trigger**: Schedule (e.g. monthly on ZHVI release day) or webhook
2. **HTTP Request**: Call the Apify Actor API with your metro list
3. **Process**: Parse the tidy-long JSON rows
4. **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.

🔗 [View live pricing](https://apify.com/sian.agency/zillow-market-analytics-scraper?fpr=sian)

***

### ❓ 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](https://apify.com/sian.agency/zillow-property-scraper?fpr=sian) — different row shape entirely.

**Q: Is this legal?**
A: Yes — we extract only publicly available Zillow research data. See the [Legal](#-is-it-legal-to-scrape-data) 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 Texas` will 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_rates` runs **once per execution** regardless of how many areas you query — that produces 16 national rows, not 16 per area. Toggle off `includeMortgageRates` if you only need housing + rental data.

**Some rows have `null` in `metricValue`**

- Expected for inventory rows that carry only metadata (e.g. `nearbyArea` lookups). Filter `metricValue IS NOT NULL` in 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](https://blog.apify.com/is-web-scraping-legal/).

***

### ⚠️ 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

[![Telegram Support](https://img.shields.io/badge/Telegram-Support%20Group-0088cc?logo=telegram)](https://t.me/+vyh1sRE08sAxMGRi)

**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](https://apify.com/sian.agency?fpr=sian) for more real-estate and data-feed actors
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Actor input Schema

## `searchQueries` (type: `array`):

List of US metros, cities, or zipcodes to pull market data for. Each item runs against the housing-market and rental-market endpoints. Examples: `Austin, TX`, `Brooklyn, NY`, `90210`, `San Francisco, CA`. **FREE tier:** 1 query, all rows from that 1 query (~200 rows of complete time-series — no row truncation).

## `includeHousingMarket` (type: `boolean`):

Fetches ~100 monthly ZHVI data points + sale-side market metrics (medianSaleToList, pctSoldAboveList, days to pending) for each area query. ~106 rows per query.

## `includeRentalMarket` (type: `boolean`):

Fetches 47-bucket rent histogram, 12-month median rent history, 6 nearby-area comps, and 10 zipcode trends per area query. ~85 rows per query.

## `includeMortgageRates` (type: `boolean`):

Fetches today's mortgage rates for 16 loan products (30yr fixed, 15yr fixed, FHA, VA, ARM, Jumbo, etc.). Called once per run regardless of area query count — adds 16 rows total.

## Actor input object example

```json
{
  "searchQueries": [
    "Austin, TX",
    "Brooklyn, NY",
    "90210"
  ],
  "includeHousingMarket": true,
  "includeRentalMarket": true,
  "includeMortgageRates": true
}
```

# Actor output Schema

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

Tidy-long market metric rows — one per metric × period × location.

## `htmlReport` (type: `string`):

HTML dashboard summarizing per-location and per-metric row counts.

# 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 = {
    "searchQueries": [
        "Austin, TX"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/zillow-market-analytics-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 = { "searchQueries": ["Austin, TX"] }

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/zillow-market-analytics-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "Austin, TX"
  ]
}' |
apify call sian.agency/zillow-market-analytics-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=sian.agency/zillow-market-analytics-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Zillow Market Data Scraper — ZHVI · Rent · Mortgage Rates",
        "description": "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.",
        "version": "1.0",
        "x-build-id": "W5uqKd8Y2v3aVR9jY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sian.agency~zillow-market-analytics-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sian.agency-zillow-market-analytics-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/sian.agency~zillow-market-analytics-scraper/runs": {
            "post": {
                "operationId": "runs-sync-sian.agency-zillow-market-analytics-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/sian.agency~zillow-market-analytics-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-sian.agency-zillow-market-analytics-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "searchQueries"
                ],
                "properties": {
                    "searchQueries": {
                        "title": "🏙️ Area Queries",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "List of US metros, cities, or zipcodes to pull market data for. Each item runs against the housing-market and rental-market endpoints. Examples: `Austin, TX`, `Brooklyn, NY`, `90210`, `San Francisco, CA`. **FREE tier:** 1 query, all rows from that 1 query (~200 rows of complete time-series — no row truncation).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeHousingMarket": {
                        "title": "🏠 Include housing market (ZHVI history + sale dynamics)",
                        "type": "boolean",
                        "description": "Fetches ~100 monthly ZHVI data points + sale-side market metrics (medianSaleToList, pctSoldAboveList, days to pending) for each area query. ~106 rows per query.",
                        "default": true
                    },
                    "includeRentalMarket": {
                        "title": "🏘️ Include rental market (rent appreciation + comps)",
                        "type": "boolean",
                        "description": "Fetches 47-bucket rent histogram, 12-month median rent history, 6 nearby-area comps, and 10 zipcode trends per area query. ~85 rows per query.",
                        "default": true
                    },
                    "includeMortgageRates": {
                        "title": "💰 Include current mortgage rates",
                        "type": "boolean",
                        "description": "Fetches today's mortgage rates for 16 loan products (30yr fixed, 15yr fixed, FHA, VA, ARM, Jumbo, etc.). Called once per run regardless of area query count — adds 16 rows total.",
                        "default": true
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
