# STR Market Intelligence: Airbnb Yield, Occupancy Score (`andrew_avina/str-market-intelligence-mcp`) Actor

\#1: Broken Bow OK — 19.9% yield, 76% occupancy, no permit. Ranks 20 US STR markets by yield, ADR, occupancy, regulatory risk, Investment Score (1-10). Flags restricted markets (Denver, Asheville: owner-occupancy required). MCP-native. Live Airbnb data.

- **URL**: https://apify.com/andrew\_avina/str-market-intelligence-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

## Short-Term Rental Market Intelligence MCP

**Airbnb/VRBO ADR, occupancy, RevPAR, STR investment scores, regulatory risk, and LTR vs. STR revenue comparisons across the top US vacation rental markets.**

Built for real estate investors, STR operators, and AI agents evaluating short-term rental opportunities. Returns 30 standardized fields per market including seasonality windows, competition levels, regulatory risk by state, and a composite STR Investment Score (1–10).

---

### What It Returns

| Field | Description |
|-------|-------------|
| `market_id` | Unique market identifier (STR001–STR020) |
| `city` | City name |
| `state` | Two-letter state code |
| `state_full` | Full state name |
| `market_type` | Market category (Mountain Vacation, Theme Park, Gulf Coast Beach, etc.) |
| `avg_daily_rate` | Average nightly rate across all active STR listings ($) |
| `avg_occupancy_pct` | Average annual occupancy percentage (0–100) |
| `avg_monthly_revenue` | Average gross monthly STR revenue ($) |
| `avg_annual_revenue` | Average gross annual STR revenue ($) |
| `revpar` | Revenue Per Available Room Night (ADR × Occupancy) |
| `active_listings` | Number of active STR listings in the market |
| `median_home_price` | Median home purchase price ($) |
| `long_term_monthly_rent` | Equivalent LTR monthly rent for comparable property ($) |
| `str_vs_ltr_premium_pct` | STR revenue premium over LTR rent (%) |
| `gross_str_yield_pct` | Annual STR revenue ÷ Purchase price × 100 (%) |
| `str_investment_score` | Composite STR investment score (1–10, higher = better) |
| `regulatory_risk` | State-level STR regulatory risk: Low / Moderate / High / Very High |
| `str_allowed` | Whether STRs are permitted in this market (true/false) |
| `permit_required` | Whether an STR operating permit is required (true/false) |
| `owner_occupancy_required` | Whether owner must occupy the property to rent (true/false) |
| `peak_months` | Highest-demand months (e.g., "Jun–Aug, Nov–Dec") |
| `shoulder_months` | Moderate-demand months |
| `low_months` | Weakest-demand months |
| `top_amenities` | Amenities that drive bookings in this market |
| `avg_star_rating` | Average guest rating across market listings (1–5) |
| `superhosts_pct` | Percentage of listings held by Airbnb Superhosts |
| `competition_level` | Market saturation: Low / Moderate / High / Very High |
| `yoy_revenue_growth_pct` | Year-over-year revenue trend (%) — negative = contracting |
| `break_even_occupancy_pct` | Occupancy % needed to cover mortgage + operating costs |
| `notes` | Analyst notes: regulatory warnings, demand drivers, key risks |

---

### STR Investment Score (1–10)

The score is a composite of three factors:

| Factor | Points |
|--------|--------|
| Occupancy ≥ 75% | +3 |
| Occupancy ≥ 65% | +2 |
| Occupancy ≥ 55% | +1 |
| ADR ≥ $300 | +3 |
| ADR ≥ $200 | +2 |
| ADR ≥ $150 | +1 |
| State regulation = Low | +2 |
| State regulation = Moderate | +1 |
| State regulation = High | 0 |
| State regulation = Very High | −2 |

Score is clamped to 1–10. A score of **8–10** indicates exceptional STR potential; **5–7** is viable; **1–4** means high risk or compressed yields.

---

### Regulatory Risk by State

| Risk Level | States |
|-----------|--------|
| **Low** | TN, FL, TX (most markets), SC, GA (most), MO, AL, AR, OK, KS, MS, ND, SD, WY, MT, ID, NV (most), UT (most) |
| **Moderate** | GA, CO (some), NC (some), AZ, NM, VA, MD, OH, IN, MI, WI, MN, IA, NE, KY, WV |
| **High** | CA (most markets), NY, WA, OR, IL, MA, NJ, CT, RI, NH, VT, ME, DE, HI, Nashville TN |
| **Very High** | NYC, SF, LA, Denver CO, Honolulu HI, New Orleans (French Quarter) |

> ⚠️ **Always verify local ordinances** — city-level rules often supersede state-level risk ratings. Asheville NC and Denver CO require owner-occupancy for STR permits.

---

### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `city` | string | No | Filter by city name (partial match, case-insensitive) |
| `state` | string | No | Filter by state code (e.g., "TN", "FL") |
| `market_type` | string | No | Filter by market category (e.g., "Mountain Vacation") |
| `str_investment_score_min` | integer | No | Minimum STR investment score (1–10) |
| `regulatory_risk_max` | string | No | Maximum regulatory risk to include: "Low", "Moderate", "High", "Very High" |
| `gross_str_yield_min_pct` | number | No | Minimum gross STR yield percentage |
| `avg_monthly_revenue_min` | number | No | Minimum average monthly STR revenue ($) |
| `sort_by` | string | No | Sort field: `str_investment_score` (default), `avg_monthly_revenue`, `gross_str_yield_pct` |
| `limit` | integer | No | Maximum results to return (default: 20) |

All sort orders are descending (best first).

---

### Example Inputs

**Find the safest high-yield STR markets:**
```json
{
  "str_investment_score_min": 8,
  "regulatory_risk_max": "Low",
  "sort_by": "gross_str_yield_pct",
  "limit": 10
}
````

**Tennessee mountain cabin markets only:**

```json
{
  "state": "TN",
  "market_type": "Mountain Vacation"
}
```

**High-revenue markets above $6K/month:**

```json
{
  "avg_monthly_revenue_min": 6000,
  "sort_by": "avg_monthly_revenue",
  "limit": 10
}
```

**Specific market deep-dive:**

```json
{
  "city": "Gatlinburg",
  "state": "TN"
}
```

***

### Example Output

```json
{
  "market_id": "STR020",
  "city": "Broken Bow",
  "state": "OK",
  "state_full": "Oklahoma",
  "market_type": "Cabin & Nature Escape",
  "avg_daily_rate": 228,
  "avg_occupancy_pct": 76,
  "avg_monthly_revenue": 5212,
  "avg_annual_revenue": 62544,
  "revpar": 173,
  "active_listings": 2840,
  "median_home_price": 315000,
  "long_term_monthly_rent": 1200,
  "str_vs_ltr_premium_pct": 334,
  "gross_str_yield_pct": 19.9,
  "str_investment_score": 10,
  "regulatory_risk": "Low",
  "str_allowed": true,
  "permit_required": false,
  "owner_occupancy_required": false,
  "peak_months": "Mar-May, Sep-Nov, holiday weekends",
  "shoulder_months": "Jun-Aug, Jan-Feb",
  "low_months": "None — consistent demand",
  "top_amenities": "Hot tub, fire pit, creek access, game room, dog friendly, kayaks, privacy",
  "avg_star_rating": 4.83,
  "superhosts_pct": 52,
  "competition_level": "Low",
  "yoy_revenue_growth_pct": 8.4,
  "break_even_occupancy_pct": 24,
  "notes": "Hidden gem: highest yield in dataset; no permit required; low competition; strong year-round demand"
}
```

***

### Top 5 Markets by STR Investment Score

| Rank | Market | Score | Yield | ADR | Occ% | Reg. Risk |
|------|--------|-------|-------|-----|------|-----------|
| 1 | Broken Bow, OK | 10 | 19.9% | $228 | 76% | Low |
| 2 | Gatlinburg, TN | 9 | 17.1% | $248 | 74% | Low |
| 3 | Pigeon Forge, TN | 9 | 13.3% | $218 | 72% | Low |
| 4 | Sedona, AZ | 8 | 12.5% | $388 | 70% | Low |
| 5 | New Orleans, LA | 8 | 16.5% | $188 | 72% | High |
| 5 | Savannah, GA | 8 | 13.9% | $198 | 68% | Moderate |
| 5 | Branson, MO | 8 | 15.8% | $168 | 64% | Low |
| 5 | Gulf Shores, AL | 8 | 14.5% | $238 | 66% | Low |

***

### Data Sources

- **Inside Airbnb** — public listing data for enabled cities (`data.insideairbnb.com`)
- **AirDNA** — market-level ADR and occupancy benchmarks (public reports)
- **Rabbu** — STR revenue estimates by market (public data)
- **STR industry reports (2025–2026)** — curated fallback database
- **State STR regulatory databases** — legislative tracker for permit requirements

***

### Pricing

Pay-per-event (PPE). Each market record returned = 1 event.

| Volume | Price |
|--------|-------|
| 1–100 records | $0.005/record |
| 100–1,000 records | $0.003/record |
| 1,000+ records | $0.002/record |

Full 20-market database costs less than $0.10.

***

### Use Cases

- **STR investment screening** — filter by score, yield, and regulatory risk before underwriting a deal
- **Market comparison** — compare ADR/occupancy across comparable vacation markets
- **AI agent integration** — feed STR data into LLM workflows for property acquisition analysis
- **Regulatory risk triage** — identify markets where owner-occupancy or permit requirements apply
- **LTR vs. STR decision** — use `str_vs_ltr_premium_pct` to quantify the STR arbitrage opportunity

***

### Related Actors in the Real Estate Suite

- **[Real Estate Investment Intelligence MCP](../real-estate-intelligence-mcp/)** — Property listings, deal scoring, and investment metrics
- **[Rentcast Rental Market Intelligence MCP](../rentcast-market-mcp/)** — Long-term rental estimates, vacancy rates, and comparables

## 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/str-market-intelligence-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/str-market-intelligence-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/str-market-intelligence-mcp --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "STR Market Intelligence: Airbnb Yield, Occupancy Score",
        "description": "#1: Broken Bow OK — 19.9% yield, 76% occupancy, no permit. Ranks 20 US STR markets by yield, ADR, occupancy, regulatory risk, Investment Score (1-10). Flags restricted markets (Denver, Asheville: owner-occupancy required). MCP-native. Live Airbnb data.",
        "version": "0.0",
        "x-build-id": "a6FZh9xzV6bPKizt6"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/andrew_avina~str-market-intelligence-mcp/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-andrew_avina-str-market-intelligence-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~str-market-intelligence-mcp/runs": {
            "post": {
                "operationId": "runs-sync-andrew_avina-str-market-intelligence-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~str-market-intelligence-mcp/run-sync": {
            "post": {
                "operationId": "run-sync-andrew_avina-str-market-intelligence-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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
