# US Rent and Home Price Index by Metro, City and Zip (`scrapemint/us-rent-home-price-index`) Actor

Typical home value and typical rent for any US state, metro, city or zip from Zillow's published research indexes, with monthly and yearly change and gross rental yield. Monthly history back to 2000. Keyless, no browser and no proxy.

- **URL**: https://apify.com/scrapemint/us-rent-home-price-index.md
- **Developed by:** [Ken M](https://apify.com/scrapemint) (community)
- **Categories:** Real estate, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.00 / 1,000 region rows

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## US Rent and Home Price Index

What a typical home is worth and what typical rent costs, for any US metro, county, city or zip code. Built on Zillow's published research indexes, so it measures the whole market rather than whatever happens to be listed today.

Every region comes back with its current level, how it moved over the past month and year, and the gross rental yield where both figures exist.

No login, no API key, no proxy.

### What you get

One row per region in `latest` mode:

```json
{
  "regionName": "Austin, TX",
  "regionType": "metro",
  "state": "TX",
  "sizeRank": 29,
  "rentIndex": 1648.78,
  "rentAsOf": "2026-06-30",
  "rentChangeMonthPct": 0.42,
  "rentChangeYearPct": -1.83,
  "homeValue": 476400.03,
  "homeValueAsOf": "2026-06-30",
  "homeChangeMonthPct": -0.61,
  "homeChangeYearPct": -3.42,
  "rentToPriceYieldPct": 4.15,
  "rentUnit": "US dollars per month",
  "homeValueUnit": "US dollars"
}
```

In `history` mode you get one row per region per month instead. Home values go back to 2000, rent to 2015.

### Input

| Field | Description |
| --- | --- |
| `mode` | `latest` (default) or `history` |
| `geography` | `metro` (default), `state`, `county`, `city` or `zip` |
| `regions` | Filter by name, e.g. `["Austin","Denver"]`. A state code such as `"TX"` returns everything in that state |
| `metrics` | `rent`, `homeValue` or both. Asking for one skips downloading the other file |
| `historyFrom` / `historyTo` | History mode date range, `YYYY-MM-DD` |
| `maxRows` | Total rows returned (default 200) |

### Examples

Every metro, largest first:

```json
{ "mode": "latest", "geography": "metro" }
```

Everything in Texas with rental yield:

```json
{ "mode": "latest", "geography": "metro", "regions": ["TX"] }
```

Three years of monthly history for one metro:

```json
{ "mode": "history", "regions": ["Austin, TX"], "historyFrom": "2023-01-31" }
```

### Things worth knowing

Zillow does not publish the rent index at state level, so states return home values with the rent fields set to `null`. Use metro, county, city or zip if you need rent.

A change is only reported when the earlier month exists for that same index. Because rent history starts in 2015 and home values in 2000, a region can have a home value change and no rent change, and that comes back as `null` rather than as a zero.

Gross yield is annual rent divided by home value, and it is only filled in when both indexes cover the region. It is a market level ratio, not a projection for any individual property.

The city and zip home value files are large, about 93MB and 60MB, so those levels take noticeably longer than metro or state.

Values are smoothed, seasonally adjusted indexes of typical value in the middle third of the market. They describe a market, not a specific address.

### Who it's for

Property investors comparing yields across markets, real estate sites and newsletters showing local trends, relocation and cost of living tools, and analysts tracking housing affordability. Pairs with **US Loan and Mortgage Rates** for the borrowing side of the same question.

### Pricing

Pay per region row. The first 2 rows of every run are free so you can validate the output before you pay.

# Actor input Schema

## `mode` (type: `string`):

latest = one row per region with current values and change. history = one row per region per month.

## `geography` (type: `string`):

Which level to return. Metro is the default and covers about 900 areas. Zillow does not publish the rent index at state level, so states return home values only. The city and zip home value files are very large and take much longer to download.

## `regions` (type: `array`):

Filter by name, e.g. \["Austin","TX"]. Matches on region name and state, so a state code returns everything in that state. Leave empty for all.

## `metrics` (type: `array`):

Which indexes to load: rent, homeValue, or both. Loading only one skips downloading the other file.

## `historyFrom` (type: `string`):

History mode only. Earliest month, YYYY-MM-DD. Home values start 2000-01, rent starts 2015-01.

## `historyTo` (type: `string`):

History mode only. Latest month, YYYY-MM-DD.

## `maxRows` (type: `integer`):

Total rows to return.

## Actor input object example

```json
{
  "mode": "latest",
  "geography": "metro",
  "regions": [
    "Austin",
    "Denver"
  ],
  "metrics": [
    "homeValue"
  ],
  "historyFrom": "2024-01-31",
  "historyTo": "2026-06-30",
  "maxRows": 200
}
```

# 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 = {
    "regions": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapemint/us-rent-home-price-index").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 = { "regions": [] }

# Run the Actor and wait for it to finish
run = client.actor("scrapemint/us-rent-home-price-index").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "regions": []
}' |
apify call scrapemint/us-rent-home-price-index --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapemint/us-rent-home-price-index"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/uzXhVwaKOaK4fhA0f/builds/KlEYs0d9my7aqcfF3/openapi.json
