# Rental Market Intelligence: LTR Rents, Vacancy by ZIP (`andrew_avina/rentcast-market-mcp`) Actor

Long-term rental market data by ZIP — median rent by bedroom, vacancy rate, market grade (A+ to C-), comparable rentals, rent growth trend. Validates rent inputs before cap rate calc. MCP-native: 'Market rent for a 3BR in ZIP 44105?' Source: Rentcast.

- **URL**: https://apify.com/andrew\_avina/rentcast-market-mcp.md
- **Developed by:** [Andrew Avina](https://apify.com/andrew_avina) (community)
- **Categories:** MCP servers, Business
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

## Rentcast Rental Market Intelligence MCP

Rental market statistics, rent estimates, active listing comparables, and investor demand scores for any US ZIP code or city — powered by the **Rentcast API**.

Built for landlords, property managers, rental investors, and PropTech platforms that need real-time rental pricing intelligence without building their own data pipeline.

### What it does

Pulls three data streams from Rentcast and synthesizes them into a single market intelligence record per query:
1. **Market aggregate stats** — median rent, vacancy rate, rent growth YoY, listing count
2. **AVM rent estimate** — AI-powered rent estimate for the specific property type and bedroom count
3. **Active rental comparables** — individual listings with price, beds, sqft, DOM

Plus calculates **Market Grade (A+ to C-)** and **Investor Demand (Very High → Low)** from the underlying metrics.

### Inputs

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `api_key` | string | — | Rentcast API key ([free at rentcast.io](https://app.rentcast.io/app/api-key)) |
| `zip_code` | string | — | ZIP code to analyze (e.g. `44103`) |
| `city` | string | — | City name (use with `state` if no ZIP) |
| `state` | string | — | State abbreviation |
| `property_type` | string | `"Single Family"` | `Single Family` / `Condo` / `Townhouse` / `Multi Family` |
| `bedrooms` | integer | — | Bedroom count filter |
| `bathrooms` | number | — | Bathroom count filter |
| `include_comparables` | boolean | `true` | Include individual listing records in output |
| `limit` | integer | `20` | Max total records |

### Outputs

| Field | Type | Description |
|-------|------|-------------|
| `zip_code` | string | ZIP code |
| `city` | string | City |
| `state` | string | State abbreviation |
| `property_type` | string | Property type analyzed |
| `bedrooms` | integer | Bedroom count |
| `rent_estimate` | integer | AVM rent estimate (USD/month) |
| `rent_range_low` | integer | 25th percentile rent |
| `rent_range_high` | integer | 75th percentile rent |
| `median_market_rent` | integer | Market median rent |
| `rent_growth_yoy_pct` | float | Year-over-year rent growth % |
| `vacancy_rate_pct` | float | Current vacancy rate % |
| `avg_days_on_market` | float | Average rental listing DOM |
| `listing_count` | integer | Active listings in market |
| `rent_per_sqft` | float | Estimated rent per sqft |
| `price_to_rent_ratio` | float | Annual purchase price ÷ annual rent |
| `gross_yield_pct` | float | Annual gross rent yield % |
| `cap_rate_estimate_pct` | float | Estimated cap rate % |
| `population` | integer | Market population |
| `median_household_income` | integer | Median household income |
| `renter_occupied_pct` | float | % renter-occupied housing units |
| `hud_fmr_2br` | integer | HUD 2024 Fair Market Rent (2BR) |
| `market_grade` | string | A+ to C- composite grade |
| `investor_demand` | string | `Very High` / `High` / `Moderate` / `Low` |
| `comparable_count` | integer | Number of active comps found |
| `comparables_summary` | string | Human-readable comp summary |
| `data_freshness` | string | `live` or `2026-Q1` (fallback) |

### Market Grade Algorithm

| Metric | Points |
|--------|--------|
| Vacancy ≤4% | +3 |
| Vacancy 4-6% | +2 |
| Vacancy 6-8% | +1 |
| Rent growth ≥6% YoY | +3 |
| Rent growth 4-6% | +2 |
| Rent growth 2-4% | +1 |
| Rent growth negative | -2 |
| DOM ≤15 days | +2 |
| DOM 15-25 days | +1 |
| DOM ≥45 days | -1 |

Score maps to: A+ (9) → A (8) → A- (7) → B+ (6) → B (5) → B- (4) → C+ (3) → C (2) → C- (1)

### Example Use Cases

- **Landlord pricing**: Benchmark your rental unit vs. market to set competitive rent
- **Investor market selection**: Screen 20 cities to find the highest-yield markets in 2 API calls
- **PropTech integration**: Feed rental intelligence into CRM or underwriting platform via MCP
- **Property management**: Track market movement to time rent increases for renewals
- **Acquisition underwriting**: Validate rental income assumptions before closing

### Example Inputs

#### Identify best cash-flow markets
```json
[
  {"zip_code": "44103", "property_type": "Single Family", "bedrooms": 3},
  {"zip_code": "64127", "property_type": "Multi Family",  "bedrooms": 2},
  {"zip_code": "48205", "property_type": "Single Family", "bedrooms": 3}
]
````

#### Full market scan for a city

```json
{
  "city": "Memphis",
  "state": "TN",
  "property_type": "Single Family",
  "bedrooms": 3,
  "include_comparables": true,
  "limit": 50
}
```

### API Key

Get a **free Rentcast API key** at [rentcast.io](https://app.rentcast.io/app/api-key). Free tier: 50 requests/month. Paid plans start at ~$29/month for 1,000+ requests.

Without an API key, the actor returns curated market data for 15 major US rental markets.

### Fallback Data

15 curated rental market records covering: Cleveland OH, Indianapolis IN, Memphis TN, Kansas City MO, Charlotte NC, Austin TX, Scottsdale AZ, Cape Coral FL, Columbus OH, Greensboro NC, Sacramento CA, Atlanta GA, Nashville TN, Denver CO, Detroit MI.

## Actor input object example

```json
{}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("andrew_avina/rentcast-market-mcp").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("andrew_avina/rentcast-market-mcp").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 '{}' |
apify call andrew_avina/rentcast-market-mcp --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Rental Market Intelligence: LTR Rents, Vacancy by ZIP",
        "description": "Long-term rental market data by ZIP — median rent by bedroom, vacancy rate, market grade (A+ to C-), comparable rentals, rent growth trend. Validates rent inputs before cap rate calc. MCP-native: 'Market rent for a 3BR in ZIP 44105?' Source: Rentcast.",
        "version": "0.0",
        "x-build-id": "WdLujkffsSYq5DkGl"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/andrew_avina~rentcast-market-mcp/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-andrew_avina-rentcast-market-mcp",
                "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/andrew_avina~rentcast-market-mcp/runs": {
            "post": {
                "operationId": "runs-sync-andrew_avina-rentcast-market-mcp",
                "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/andrew_avina~rentcast-market-mcp/run-sync": {
            "post": {
                "operationId": "run-sync-andrew_avina-rentcast-market-mcp",
                "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": {}
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
