# Zillow Zestimate & Value History — Home Value Tracker (`sian.agency/zillow-value-history-scraper`) Actor

Track a home's full value history — Zestimate history, rent Zestimate, listing price, % change, tax-assessment and tax-paid history — merged into one record per property. Look up by ZPID, address, or URL. Built for valuation, comps, and market-trend analysis.

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

## Pricing

from $3.00 / 1,000 value history 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 Zestimate & Value History Scraper — Home Value Tracker 🚀

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

#### 📈 Track any home's FULL value history — Zestimate, rent Zestimate, list price, % change, and property tax — merged into ONE clean record per property
##### Built for appraisers, PropTech teams, investors, and analysts who need a home's price trajectory, not just today's number

---

### 📋 Overview

**Stop stitching together six different lookups just to see how a home's value has moved.** This actor pulls a property's complete value history from Zillow and merges every series into a single tidy record — keyed by ZPID, address, or URL — so you get the whole story of a home in one row.

**Why thousands of professionals choose us:**
- ✅ **Six series, one record**: Zestimate history, rent Zestimate history, listing-price history, value percent-change, tax-assessment history (land + structure), and tax-paid history — all merged per property.
- ⚡ **Any identifier works**: paste a ZPID, a full street address, or a Zillow home-details URL — the actor auto-detects and resolves each one. No pre-lookups required.
- 🎯 **Computed KPIs out of the box**: every record ships with latest Zestimate, 1-year value change %, latest rent Zestimate, latest tax paid, and latest list price — no post-processing needed.
- 💰 **Pay once per property**: a single flat charge covers all requested series for a home — request one chart or all six, the price is the same.
- 💎 **Chronological or recent-first**: choose oldest-to-newest for time-series charts, or newest-first for a quick "where is it now?" read.
- ✨ **NEW**: land-vs-structure tax-assessment breakdown and full monthly Zestimate points going back years — ideal for appreciation and comp modelling.

---

### ✨ Features

- 📈 **Zestimate history**: full monthly home-value time series with dated points.
- 🏘 **Rent Zestimate history**: estimated monthly rent over time — perfect for yield and rent-vs-buy models.
- 💵 **Listing-price history**: how the home has been priced across listings.
- 📊 **Value percent-change**: Zillow's period-over-period value movement, ready to chart.
- 🧾 **Tax-assessment history**: assessed values split into Land and Structure series.
- 🏦 **Tax-paid history**: annual property-tax paid, dated.
- 🔎 **Auto-detect identifiers**: ZPID, street address, or property URL — mix and match in one run.
- 🧮 **Derived KPIs**: latest Zestimate, 1-year % change, latest rent Zestimate, latest tax paid, latest list price.
- 📄 **HTML run report**: cohort roll-up with median latest Zestimate and median 1-year change.
- 🗂 **One row per property**: clean, database-ready output — no fan-out, no duplicate rows.

---

### 🎬 Quick Start

Provide one or more property identifiers, pick your chart series (or take all six), and run. Each property comes back as a single record with every series merged in. Export to JSON, CSV, or Excel from the dataset.

```bash
curl -X POST https://api.apify.com/v2/acts/sian.agency~zillow-value-history-scraper/runs?token=YOUR_TOKEN \
-H 'Content-Type: application/json' \
-d '{"propertyIdentifiers": ["19837623"]}'
````

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Add your properties

Paste any mix of ZPIDs (`19837623`), full addresses (`7192 McKean Ct, San Jose, CA 95120`), or Zillow URLs into **Property identifiers**.

#### Step 2: Choose your series

Leave **Value-history series** empty to pull all six, or pick just the ones you need (e.g. Zestimate history + tax paid).

#### Step 3: Run

Start the actor. Each property returns as one merged record with computed KPIs.

**That's it! In under a minute, you'll have:**

- A single, clean record per home covering its full value history
- Ready-to-chart dated points for every series
- Latest Zestimate + 1-year change already computed for you

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| propertyIdentifiers | array | Yes | ZPIDs, full street addresses, or Zillow home-details URLs — auto-detected per entry. FREE tier: max 5 per run. |
| charts | array | No | Which value-history series to pull. Empty = all six: `zestimate_history`, `rent_zestimate_history`, `listing_price`, `zestimate_percent_change`, `tax_assessment`, `tax_paid`. |
| recentFirst | boolean | No | `true` (default) returns each series newest-first; `false` returns oldest-first (chronological). |

**Example:**

```json
{
  "propertyIdentifiers": [
    "19837623",
    "7192 McKean Ct, San Jose, CA 95120",
    "https://www.zillow.com/homedetails/7192-McKean-Ct-San-Jose-CA-95120/19837623_zpid/"
  ],
  "charts": ["zestimate_history", "tax_paid"],
  "recentFirst": true
}
```

**Pull the full history for a batch of homes:**

```json
{
  "propertyIdentifiers": ["19837623", "20366634", "1600 Amphitheatre Pkwy, Mountain View, CA 94043"]
}
```

***

### 📤 Output

Results are saved to the Apify dataset as **one merged record per property** with the following fields:

| Field | Type | Description |
|-------|------|-------------|
| propertyIdentifier | string | The identifier you supplied (ZPID, address, or URL) |
| identifierType | string | How it was resolved: `zpid`, `address`, or `url` |
| zpid | string | The property's ZPID when available |
| location | object | Street address, city, state, zip, and full address |
| charts | object | Every requested series, keyed by name — each with dated points |
| chartsWithData | array | Which series actually returned data for this property |
| valueKpis | object | Computed: latest Zestimate, 1-year change %, latest rent Zestimate, latest tax paid, latest list price |
| recentFirst | boolean | The ordering applied to each series |
| scrapedAt | string | ISO timestamp of extraction |

**Example:**

```json
{
  "propertyIdentifier": "19837623",
  "identifierType": "zpid",
  "zpid": "19837623",
  "location": {
    "streetAddress": "7192 McKean Ct",
    "city": "San Jose",
    "state": "CA",
    "zipcode": "95120",
    "fullAddress": "7192 McKean Ct San Jose, CA 95120"
  },
  "chartsWithData": ["zestimate_history", "rent_zestimate_history", "zestimate_percent_change", "tax_assessment", "tax_paid"],
  "valueKpis": {
    "latestZestimate": 1743600,
    "latestZestimateDate": "2026-06-30",
    "zestimateOneYearChangePct": 2.6,
    "latestRentZestimate": 4826,
    "latestTaxPaid": 5546.58,
    "latestListingPrice": null
  },
  "charts": {
    "zestimate_history": {
      "series": [{ "name": null, "points": [{ "date": "2026-06-30", "timestamp": 1782802800000, "value": 1743600 }] }],
      "points": [{ "date": "2026-06-30", "timestamp": 1782802800000, "value": 1743600 }]
    },
    "tax_assessment": {
      "series": [
        { "name": "Land", "points": [{ "date": "2025-07-02", "timestamp": 1751436000119, "value": 151999 }] },
        { "name": "Structure", "points": [{ "date": "2016-07-02", "timestamp": 1467438713511, "value": 157549 }] }
      ]
    },
    "tax_paid": {
      "series": [{ "name": "This home", "points": [{ "date": "2025-07-02", "timestamp": 1751435514705, "value": 5546.58 }] }],
      "points": [{ "date": "2025-07-02", "timestamp": 1751435514705, "value": 5546.58 }]
    }
  },
  "scrapedAt": "2026-07-02T13:00:00.000Z"
}
```

Single-series charts (Zestimate, rent, list price, % change, tax paid) also expose a top-level `points` array for convenience; multi-series charts (tax assessment) preserve their named series (Land, Structure).

***

### 💼 Use Cases & Examples

#### 1. Automated Valuation & Comps

**Appraisers and AVM builders who need a home's price trajectory, not just a snapshot.**

**Input:** A batch of ZPIDs or addresses
**Output:** Full Zestimate + listing-price history per property, with latest value and 1-year change pre-computed
**Use:** Feed comparable-sales models and desktop appraisals with clean, dated value curves.

#### 2. Real-Estate Market-Trend Analysis

**Analysts tracking appreciation and corrections across a market.**

**Input:** All the homes in a watchlist
**Output:** Value percent-change series and Zestimate history for every property
**Use:** Chart neighbourhood momentum and flag properties that are heating up or cooling off.

#### 3. Rent-vs-Buy & Yield Modelling

**Investors sizing up cash flow and gross yield.**

**Input:** Candidate rental properties by address or ZPID
**Output:** Rent Zestimate history alongside sale Zestimate history
**Use:** Model gross yield trends and rent-vs-buy break-even per property.

#### 4. Property-Tax Intelligence

**Underwriters, tax-appeal consultants, and expense forecasters.**

**Input:** A portfolio of properties
**Output:** Tax-assessment history split into Land and Structure, plus tax-paid history
**Use:** Forecast tax expense, research assessment appeals, and stress-test underwriting.

#### 5. CRM & Data Enrichment

**PropTech and lead-gen teams enriching property records.**

**Input:** Your existing property list
**Output:** A merged value-history block — one row per property, keyed by ZPID or address
**Use:** Attach a rich home-value profile to every record in your database.

#### 6. Portfolio Monitoring

**Asset managers watching a book of homes.**

**Input:** Owned or managed properties
**Output:** Latest Zestimate + 1-year change per property, refreshed on schedule
**Use:** Run on a schedule to keep a live valuation dashboard for the whole portfolio.

***

### 🔗 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-value-history-scraper').call({
  propertyIdentifiers: ['19837623', '7192 McKean Ct, San Jose, CA 95120']
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].valueKpis);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/zillow-value-history-scraper').call(
    run_input={'propertyIdentifiers': ['19837623', '7192 McKean Ct, San Jose, CA 95120']}
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['propertyIdentifier'], item['valueKpis'])
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~zillow-value-history-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"propertyIdentifiers": ["19837623"]}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: Schedule or webhook
2. **HTTP Request**: Call actor API with your property list
3. **Process**: Handle the merged JSON records
4. **Action**: Save to your database, update a dashboard, or notify

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **Up to 5 properties** per run — full feature access, every series, same quality
- No credit card required
- Perfect for testing and small watchlists

#### PAID Tier (Production Ready)

- **Unlimited** properties per run
- Faster processing, no delays
- One flat charge per property — request one series or all six, the price is the same

💰 **Simple, honest pricing** — you pay once per home for its complete value history, never per series.

🔗 [View current pricing](https://apify.com/sian.agency/zillow-value-history-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: How many properties can I process?**
A: FREE tier: 5 per run. PAID tier: unlimited.

**Q: What can I use as an identifier?**
A: A ZPID (e.g. `19837623`), a full street address (street + city + state), or a Zillow home-details URL. The actor auto-detects each entry.

**Q: Am I charged per chart series?**
A: No. You're charged once per property, regardless of how many of the six series you request.

**Q: What if a series has no data for a home?**
A: The record still returns with that series present but empty (`series: []`) — you're never blocked by a missing chart, and other series still come through.

**Q: What output formats are available?**
A: JSON, CSV, Excel — export directly from the Apify dataset.

**Q: Is this legal?**
A: Yes — we only extract publicly available property data. See our [legal section](#is-it-legal-to-scrape-data).

**Q: How current is the data?**
A: Each series reflects the latest publicly available value history at run time, with dated points so you always know the recency.

***

### 🐛 Troubleshooting

**A property returned no data**

- Confirm the ZPID, address, or URL points to a real, publicly listed home.
- For addresses, include street + city + state (e.g. `7192 McKean Ct, San Jose, CA 95120`) for the most reliable match.

**A specific series is empty**

- Not every home has every series (e.g. a home never listed may have no listing-price history). Other series still return normally.

**Only 5 properties processed**

- FREE tier is capped at 5 properties per run. Upgrade to a paid Apify plan for unlimited properties.

***

### ⚖️ 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 has been chosen to be shared 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 and is **not** affiliated with, endorsed by, or sponsored by Zillow Group, Inc. "Zillow" and "Zestimate" are registered trademarks of Zillow, Inc. This actor accesses publicly available property records and is intended for lawful data-analysis purposes only.

### 🤝 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 Issues tab
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <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

## `propertyIdentifiers` (type: `array`):

One or more properties to track. Each entry is auto-detected as a **ZPID** (e.g. "19837623"), a **full street address** (e.g. "7192 McKean Ct, San Jose, CA 95120"), or a **Zillow home-details URL**. FREE tier: max 5 per run.

## `charts` (type: `array`):

Which value-history series to pull per property. Leave empty to fetch all six. Each selected series is merged into the single output record for that property.

## `recentFirst` (type: `boolean`):

Order each series with the newest data point first. Turn off to return oldest-first (chronological).

## Actor input object example

```json
{
  "propertyIdentifiers": [
    "19837623",
    "https://www.zillow.com/homedetails/7192-McKean-Ct-San-Jose-CA-95120/19837623_zpid/"
  ],
  "charts": [
    "zestimate_history",
    "rent_zestimate_history",
    "listing_price",
    "zestimate_percent_change",
    "tax_assessment",
    "tax_paid"
  ],
  "recentFirst": true
}
```

# Actor output Schema

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

One record per property with every requested value-history series merged into a single `charts` object, plus derived KPIs (latest Zestimate, 1-year change, latest rent Zestimate, latest tax paid).

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

HTML summary with run stats, per-property series coverage, and cohort KPIs (median latest Zestimate, median 1-year change).

# 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 = {
    "propertyIdentifiers": [
        "19837623",
        "7192 McKean Ct, San Jose, CA 95120"
    ],
    "charts": [
        "zestimate_history",
        "rent_zestimate_history",
        "listing_price",
        "zestimate_percent_change",
        "tax_assessment",
        "tax_paid"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/zillow-value-history-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 = {
    "propertyIdentifiers": [
        "19837623",
        "7192 McKean Ct, San Jose, CA 95120",
    ],
    "charts": [
        "zestimate_history",
        "rent_zestimate_history",
        "listing_price",
        "zestimate_percent_change",
        "tax_assessment",
        "tax_paid",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/zillow-value-history-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 '{
  "propertyIdentifiers": [
    "19837623",
    "7192 McKean Ct, San Jose, CA 95120"
  ],
  "charts": [
    "zestimate_history",
    "rent_zestimate_history",
    "listing_price",
    "zestimate_percent_change",
    "tax_assessment",
    "tax_paid"
  ]
}' |
apify call sian.agency/zillow-value-history-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Zillow Zestimate & Value History — Home Value Tracker",
        "description": "Track a home's full value history — Zestimate history, rent Zestimate, listing price, % change, tax-assessment and tax-paid history — merged into one record per property. Look up by ZPID, address, or URL. Built for valuation, comps, and market-trend analysis.",
        "version": "1.0",
        "x-build-id": "JhJtCYBvQvwwTdgkT"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sian.agency~zillow-value-history-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sian.agency-zillow-value-history-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-value-history-scraper/runs": {
            "post": {
                "operationId": "runs-sync-sian.agency-zillow-value-history-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-value-history-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-sian.agency-zillow-value-history-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": [
                    "propertyIdentifiers"
                ],
                "properties": {
                    "propertyIdentifiers": {
                        "title": "🏠 Property identifiers",
                        "type": "array",
                        "description": "One or more properties to track. Each entry is auto-detected as a **ZPID** (e.g. \"19837623\"), a **full street address** (e.g. \"7192 McKean Ct, San Jose, CA 95120\"), or a **Zillow home-details URL**. FREE tier: max 5 per run.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "19837623"
                        ]
                    },
                    "charts": {
                        "title": "📈 Value-history series",
                        "type": "array",
                        "description": "Which value-history series to pull per property. Leave empty to fetch all six. Each selected series is merged into the single output record for that property.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "zestimate_history",
                                "rent_zestimate_history",
                                "listing_price",
                                "zestimate_percent_change",
                                "tax_assessment",
                                "tax_paid"
                            ]
                        },
                        "default": [
                            "zestimate_history",
                            "rent_zestimate_history",
                            "listing_price",
                            "zestimate_percent_change",
                            "tax_assessment",
                            "tax_paid"
                        ]
                    },
                    "recentFirst": {
                        "title": "🕒 Most recent first",
                        "type": "boolean",
                        "description": "Order each series with the newest data point first. Turn off to return oldest-first (chronological).",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
