# Zillow Property Enrichment — Comps · Owner · Tax · Climate (`sian.agency/zillow-property-enrichment-scraper`) Actor

Enrich any US property by ZPID, URL, or address into one merged record: comparable homes, similar listings, owner/listing contact, full tax history, climate & flood risk, walk scores, images, and apartment details. Pick only the datasets you need. Built for underwriting, comps, and lead enrichment.

- **URL**: https://apify.com/sian.agency/zillow-property-enrichment-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, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 property enricheds

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 Property Enrichment Scraper — Comps, Owner, Tax & Climate Data 🏠

[![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) [![Realtor Agent Scraper](https://img.shields.io/badge/Store-Realtor%20Agent%20Scraper-D92228)](https://apify.com/sian.agency/realtor-agent-scraper?fpr=sian)

#### 🎉 One merged record per property — comps, owner, tax, climate risk, walk scores & apartment details in a single row
##### Built for appraisers, underwriters, insurers, and real-estate data teams who need everything about a property at once

---

### 📋 Overview

**Give it a ZPID, a listing URL, or a plain street address — get back one clean, fully enriched record per property.** This actor fans out across the enrichment datasets you select and merges them into a single row, so you never have to stitch together comps, tax history, and risk scores from separate runs.

**Why real-estate teams choose us:**
- ✅ **One row per property**: comparable homes, similar listings, owner/agent contact, tax history, climate risk, walk scores, images, and apartment details — merged, not scattered across rows.
- ⚡ **Pick only what you need**: choose from 8 datasets. Fewer datasets = faster, cheaper runs — and you pay one flat price per property no matter how many you merge.
- 🎯 **Any identifier works**: ZPID, listing URL, or full address — auto-detected. Mix them freely in one run.
- 💰 **Transparent pricing**: a single per-property charge regardless of how many datasets you merge. No surprise per-row billing.
- 💎 **Insurance-grade risk data**: flood, fire, heat, wind & air risk with FEMA zone and insurance criticality — perfect for underwriting.
- ✨ **Apartment building resolution**: enter a rental-community address and the actor resolves the building automatically for full apartment details.

---

### ✨ Features

- 🏘️ **Comparable Homes**: nearby comps with price, beds, baths, living area, status, and listing URLs.
- 🔁 **Similar Properties**: algorithmically similar homes for context and valuation.
- 👤 **Owner & Listing Contact**: owner/listed-by-agent contact details and rental listing contacts.
- 📜 **Tax History**: full property tax history — up to 24 years of tax paid, assessed value, and year-over-year change.
- 🌊 **Climate & Flood Risk**: flood, fire, heat, wind, and air risk scores + FEMA zone + insurance criticality.
- 🚶 **Walk / Transit / Bike Scores**: neighborhood walkability, transit, and bike scores with descriptions.
- 📷 **Property Images**: high-resolution photos and the hero image link.
- 🏢 **Apartment Building Details**: building name, amenities, contact, and photos for apartments and rental communities.
- 🧩 **Merged Output**: every selected dataset becomes a keyed sub-object in a single per-property record.
- 🛟 **Resilient**: a dataset that returns no data (e.g. owner contact on an off-market home) is left empty — the row still ships with everything that succeeded.

---

### 🎬 Quick Start

Paste one or more property identifiers, pick your datasets, and run. Results land in the dataset as one enriched record per property.

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~zillow-property-enrichment-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"properties": ["44471319", "1875 Avondale Circle, Jacksonville, FL 32205"], "datasets": ["comparable_homes", "taxinfo", "climate"]}'
````

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Add your properties

Paste ZPIDs, listing URLs, or full street addresses into the **Property Identifiers** list (one per line in bulk edit).

#### Step 2: Choose your datasets

Select which enrichments to merge — or leave it on the default set (comparable homes, owner, tax, climate).

#### Step 3: Run

Start the actor and download one enriched record per property.

**That's it! In seconds, you'll have:**

- A single merged record per property
- Only the datasets you selected
- A ready-to-use HTML report with cohort KPIs

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| properties | array | No | Property identifiers — ZPID, listing URL, or full street address (auto-detected). |
| datasets | array | No | Which enrichments to merge. Defaults to comparable\_homes, ownerinfo, taxinfo, climate. |

**Available datasets:** `comparable_homes`, `similar`, `ownerinfo`, `taxinfo`, `climate`, `walk_transit_bike`, `propimages`, `apartment_details`

**Example:**

```json
{
  "properties": ["44471319", "1875 Avondale Circle, Jacksonville, FL 32205"],
  "datasets": ["comparable_homes", "similar", "ownerinfo", "taxinfo", "climate", "walk_transit_bike", "propimages"]
}
```

**Apartment / rental community:**

```json
{
  "properties": ["Natiivo Austin, Austin, TX"],
  "datasets": ["apartment_details", "climate"]
}
```

***

### 📤 Output

Each row is one property with your selected datasets merged as keyed sub-objects.

| Field | Type | Description |
|-------|------|-------------|
| propertyIdentifier | string | The identifier you supplied. |
| identifierKind | string | How it was read: zpid, url, or address. |
| zpid | string | Resolved Zillow property ID, when available. |
| datasetsWithData | array | Datasets that returned data for this property. |
| datasetsEmpty | array | Datasets that returned no data or were skipped. |
| datasets | object | The merged enrichment payload (one sub-object per dataset). |
| scrapedAt | string | ISO timestamp of enrichment. |

**Example:**

```json
{
  "propertyIdentifier": "44471319",
  "identifierKind": "zpid",
  "zpid": "44471319",
  "datasetsWithData": ["comparable_homes", "taxinfo", "climate", "walk_transit_bike"],
  "datasetsEmpty": ["apartment_details"],
  "datasets": {
    "comparable_homes": { "_status": "ok", "count": 5, "homes": [ { "zpid": 44479239, "price": 520000, "bedrooms": 3, "bathrooms": 3, "livingArea": 1987, "city": "Jacksonville", "state": "FL" } ] },
    "taxinfo": { "_status": "ok", "count": 24, "history": [ { "year": 2024, "taxPaid": 5602.03, "assessedValue": 347848 } ] },
    "climate": { "_status": "ok", "flood": { "score": 1, "label": "MINIMAL" }, "wind": { "score": 9, "label": "EXTREME", "insuranceRequired": "CRITICAL" }, "femaZone": "X_UNSHADED" },
    "walk_transit_bike": { "_status": "ok", "walk": { "score": 84, "description": "Very Walkable" }, "transit": { "score": 38 }, "bike": { "score": 62 } }
  },
  "scrapedAt": "2026-07-02T06:00:00.000Z"
}
```

***

### 💼 Use Cases & Examples

#### 1. Comps & Underwriting

**Appraisers and lenders valuing a subject property.**

**Input:** A ZPID or address + `comparable_homes`, `similar`, `taxinfo`
**Output:** Comps, similar homes, and tax history in one row
**Use:** Back a valuation or BPO with pricing and tax context without three separate runs.

#### 2. Lead & CRM Enrichment

**Real-estate SaaS and agencies enriching a list of addresses.**

**Input:** A list of addresses + `ownerinfo`, `taxinfo`, `walk_transit_bike`
**Output:** Owner/listing contact, tax data, and neighborhood scores per address
**Use:** Append rich property intelligence to CRM records at scale.

#### 3. Climate & Insurance Risk Scoring

**Insurers and risk teams screening a portfolio.**

**Input:** ZPIDs or addresses + `climate`
**Output:** Flood, fire, heat, wind, and air risk + FEMA zone + insurance criticality
**Use:** Flag high-exposure properties before purchase or underwriting.

#### 4. Property Analytics

**Analysts building market datasets.**

**Input:** Bulk addresses + `comparable_homes`, `taxinfo`, `walk_transit_bike`
**Output:** Comps, tax trends, and walkability across a cohort
**Use:** Analyze neighborhoods and price movement with a single dataset.

#### 5. Apartment & Multifamily Research

**Multifamily investors researching buildings.**

**Input:** A rental-community address + `apartment_details`
**Output:** Building name, amenities, contact, and photos (resolved automatically)
**Use:** Pull building-level intelligence for apartments and communities.

#### 6. Portfolio Due Diligence

**Funds vetting a set of assets before acquisition.**

**Input:** A list of ZPIDs + all datasets
**Output:** A complete enriched dossier per property
**Use:** One-shot due diligence across an entire 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-property-enrichment-scraper').call({
  properties: ['44471319', '1875 Avondale Circle, Jacksonville, FL 32205'],
  datasets: ['comparable_homes', 'taxinfo', 'climate']
});

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-property-enrichment-scraper').call(
    run_input={
        'properties': ['44471319', '1875 Avondale Circle, Jacksonville, FL 32205'],
        'datasets': ['comparable_homes', 'taxinfo', 'climate']
    }
)

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-property-enrichment-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"properties": ["44471319"], "datasets": ["comparable_homes", "taxinfo", "climate"]}'
```

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

1. **Trigger**: Schedule or webhook (new address in your CRM)
2. **HTTP Request**: Call the actor API with the address
3. **Process**: Read the merged JSON record
4. **Action**: Save to database, notify, or score for risk

***

### 📈 Performance & Pricing

#### FREE Tier (Try It Now)

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

#### PAID Tier (Production Ready)

- **Unlimited** properties per run
- Faster processing, no delays
- One flat charge per enriched property — regardless of how many datasets you merge

💰 **Pay for outcomes, not rows** — a single per-property price keeps costs predictable even with all 8 datasets on.

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

***

### ❓ Frequently Asked Questions

**Q: What can I use as a property identifier?**
A: A ZPID (e.g. `44471319`), a listing URL, or a full street address. The actor auto-detects each one — mix them in a single run.

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

**Q: Do I pay more for pulling more datasets?**
A: No. You pay one flat price per enriched property, whether you merge one dataset or all eight.

**Q: What if a dataset has no data for a property?**
A: It's simply left empty (with a status flag). The row still ships with every dataset that succeeded — a sparse dataset is never a run failure.

**Q: How does apartment enrichment work?**
A: Enter a rental-community address; the actor resolves the building automatically and returns full apartment details. Single-family homes don't have building details, so that dataset is skipped for them.

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

***

### 🐛 Troubleshooting

**A dataset comes back empty**

- Some data (owner contact, apartment details) only exists for certain property types or listing states. This is expected — check `datasetsWithData` vs `datasetsEmpty` in the row.

**Address didn't resolve**

- Include the street, city, and state (and zip if known). Vague addresses may not match a property.

**No results at all**

- Verify the identifier is a real, publicly listed property and that at least one dataset is selected.

***

### ⚠️ Trademark Disclaimer

This is an independent tool and is **not affiliated with, endorsed by, or sponsored by Zillow Group, Inc.** "Zillow" is a registered trademark of Zillow, Inc. All product names, logos, and brands are property of their respective owners. This actor accesses only publicly available property information and is intended for legitimate research, analytics, and business use.

***

### ⚖️ 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/).

***

### 🤝 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

## `properties` (type: `array`):

🏠 **PROPERTIES TO ENRICH:** Provide one or more property identifiers. Each item is auto-detected as one of:

- 🔢 **ZPID** — a numeric Zillow property ID, e.g. `44471319`
- 🔗 **Property URL** — a full listing URL, e.g. `https://www.zillow.com/homedetails/2762-Downing-St-Jacksonville-FL-32205/44471319_zpid/` (apartment/building URLs with `/b/` or `/apartments/` are also supported)
- 📍 **Address** — a full street address, e.g. `1875 Avondale Circle, Jacksonville, FL 32205`

💡 **TIP:** Click "Bulk edit" to paste many identifiers (one per line). Addresses should include street, city, and state.

📊 **TIER-BASED LIMITS:**

- **FREE users:** Up to 5 properties per run
- **PAID users:** Unlimited properties

## `datasets` (type: `array`):

🧩 **DATASETS TO PULL:** Select which enrichments to merge into each property record. Each selected dataset becomes a keyed sub-object in the output row.

- **comparable\_homes** — nearby comparable sales/listings
- **similar** — algorithmically similar properties
- **ownerinfo** — owner / listing agent contact
- **taxinfo** — full property tax history
- **climate** — flood, fire, heat, wind & air risk + FEMA zone
- **walk\_transit\_bike** — Walk, Transit & Bike scores
- **propimages** — high-resolution property photos
- **apartment\_details** — building details for apartments/rental communities (resolved via LotID)

💡 **TIP:** Leaving this empty pulls the default set: comparable\_homes, ownerinfo, taxinfo, climate. Fewer datasets = faster, cheaper runs.

ℹ️ A dataset that returns no data (e.g. owner contact for an off-market home, or apartment details for a single-family house) is simply left empty — the property row still ships with the datasets that succeeded.

## Actor input object example

```json
{
  "properties": [
    "44471319",
    "1875 Avondale Circle, Jacksonville, FL 32205"
  ],
  "datasets": [
    "comparable_homes",
    "ownerinfo",
    "taxinfo",
    "climate"
  ]
}
```

# Actor output Schema

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

One merged record per property — comparable homes, similar listings, owner/tax data, climate risk, walk scores, images, and apartment details as keyed sub-objects.

## `scrapingSummary` (type: `string`):

HTML summary showing per-dataset coverage and cohort KPIs.

## `enrichmentKpis` (type: `string`):

Computed cohort KPIs: comp price medians, tax trends, climate-risk distribution, walkability averages.

# 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 = {
    "properties": [
        "44471319",
        "1875 Avondale Circle, Jacksonville, FL 32205"
    ],
    "datasets": [
        "comparable_homes",
        "ownerinfo",
        "taxinfo",
        "climate"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/zillow-property-enrichment-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 = {
    "properties": [
        "44471319",
        "1875 Avondale Circle, Jacksonville, FL 32205",
    ],
    "datasets": [
        "comparable_homes",
        "ownerinfo",
        "taxinfo",
        "climate",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/zillow-property-enrichment-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 '{
  "properties": [
    "44471319",
    "1875 Avondale Circle, Jacksonville, FL 32205"
  ],
  "datasets": [
    "comparable_homes",
    "ownerinfo",
    "taxinfo",
    "climate"
  ]
}' |
apify call sian.agency/zillow-property-enrichment-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Zillow Property Enrichment — Comps · Owner · Tax · Climate",
        "description": "Enrich any US property by ZPID, URL, or address into one merged record: comparable homes, similar listings, owner/listing contact, full tax history, climate & flood risk, walk scores, images, and apartment details. Pick only the datasets you need. Built for underwriting, comps, and lead enrichment.",
        "version": "1.0",
        "x-build-id": "ttXpvVkJXARdS4lG3"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sian.agency~zillow-property-enrichment-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sian.agency-zillow-property-enrichment-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-property-enrichment-scraper/runs": {
            "post": {
                "operationId": "runs-sync-sian.agency-zillow-property-enrichment-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-property-enrichment-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-sian.agency-zillow-property-enrichment-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",
                "properties": {
                    "properties": {
                        "title": "🏠 Property Identifiers",
                        "type": "array",
                        "description": "🏠 **PROPERTIES TO ENRICH:** Provide one or more property identifiers. Each item is auto-detected as one of:\n\n- 🔢 **ZPID** — a numeric Zillow property ID, e.g. `44471319`\n- 🔗 **Property URL** — a full listing URL, e.g. `https://www.zillow.com/homedetails/2762-Downing-St-Jacksonville-FL-32205/44471319_zpid/` (apartment/building URLs with `/b/` or `/apartments/` are also supported)\n- 📍 **Address** — a full street address, e.g. `1875 Avondale Circle, Jacksonville, FL 32205`\n\n💡 **TIP:** Click \"Bulk edit\" to paste many identifiers (one per line). Addresses should include street, city, and state.\n\n📊 **TIER-BASED LIMITS:**\n- **FREE users:** Up to 5 properties per run\n- **PAID users:** Unlimited properties",
                        "default": [
                            "44471319"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "datasets": {
                        "title": "🧩 Enrichment Datasets",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "🧩 **DATASETS TO PULL:** Select which enrichments to merge into each property record. Each selected dataset becomes a keyed sub-object in the output row.\n\n- **comparable_homes** — nearby comparable sales/listings\n- **similar** — algorithmically similar properties\n- **ownerinfo** — owner / listing agent contact\n- **taxinfo** — full property tax history\n- **climate** — flood, fire, heat, wind & air risk + FEMA zone\n- **walk_transit_bike** — Walk, Transit & Bike scores\n- **propimages** — high-resolution property photos\n- **apartment_details** — building details for apartments/rental communities (resolved via LotID)\n\n💡 **TIP:** Leaving this empty pulls the default set: comparable_homes, ownerinfo, taxinfo, climate. Fewer datasets = faster, cheaper runs.\n\nℹ️ A dataset that returns no data (e.g. owner contact for an off-market home, or apartment details for a single-family house) is simply left empty — the property row still ships with the datasets that succeeded.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "comparable_homes",
                                "similar",
                                "ownerinfo",
                                "taxinfo",
                                "climate",
                                "walk_transit_bike",
                                "propimages",
                                "apartment_details"
                            ],
                            "enumTitles": [
                                "🏘️ Comparable homes",
                                "🔁 Similar properties",
                                "👤 Owner / listing contact",
                                "📜 Tax history",
                                "🌊 Climate & flood risk",
                                "🚶 Walk / Transit / Bike scores",
                                "📷 Property images",
                                "🏢 Apartment building details"
                            ]
                        },
                        "default": [
                            "comparable_homes",
                            "ownerinfo",
                            "taxinfo",
                            "climate"
                        ]
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
