# Short-term Rental Analyzer: Airbnb vs Long-term Rent (`kodabloomllc/short-term-rental-analyzer`) Actor

Turns Airbnb scraper results into nightly-rate market reports and, for homes for sale, the occupancy needed for Airbnb to beat long-term rent. Pairs with Zillow, Realtor.com and Redfin scrapers.

- **URL**: https://apify.com/kodabloomllc/short-term-rental-analyzer.md
- **Developed by:** [KodaBloom LLC](https://apify.com/kodabloomllc) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 row analyzeds

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Short-term Rental Analyzer: Airbnb vs Long-term Rent

Should this house be an Airbnb or a regular rental? This actor reads Airbnb scraper results and answers it with numbers you can check:

- **Market report**: nightly rates by bedroom count (median, 25th and 75th percentile), the price premium of top-rated listings, superhost share, and how much of the market belongs to hosts with several listings.
- **Home-by-home comparison** (when you add homes for sale from a Zillow, Realtor.com or Redfin scraper): comparable Airbnb rates nearby, the **break-even occupancy** (how many nights a year it must be booked to beat long-term rent), and revenue at the occupancy you choose.

### Why break-even occupancy

Airbnb search data has prices but no booking calendar, so nobody can read real occupancy from it. Instead of guessing, this actor tells you what occupancy the home **needs**:

break-even nights = long-term rent per year / (conservative nightly rate x (1 - extra Airbnb costs))

- **Conservative nightly rate**: the 25th percentile of comparable Airbnb homes (same bedrooms, nearby, at least 3 reviews)
- **Extra Airbnb costs**: cleaning, supplies, platform fees and management, 35% of revenue by default (you can change it)
- **Long-term rent**: Zillow's rent estimate for the home

If the break-even is 20% (73 nights a year), Airbnb is an easy win. If it is 70%, a regular tenant is probably the safer bet.

### Example

Sacramento, 100 Airbnb listings (weekend in November) and 125 homes for sale from Zillow:

| Segment | Listings | Median nightly | 25th to 75th percentile |
|---|---|---|---|
| 1 bedroom entire home | 17 | $154 | $126 to $192 |
| 2 bedroom entire home | 9 | $205 | $200 to $551 |
| 3 bedroom entire home | 10 | $479 | $360 to $770 |
| 4 bedroom entire home | 31 | $875 | $564 to $1,215 |
| Private room | 15 | $73 | $68 to $96 |

For the homes for sale, the median break-even occupancy was 49%. The easiest was a 4-bedroom house listed at $389,000: comparable Airbnb homes start around $688 a night, Zillow's rent estimate is $29,592 a year, so it beats long-term rent at 66 booked nights a year (18% occupancy), after 35% extra costs.

A weekday sample of the same area came out only about 7% cheaper than the weekend one (median of 21 listings found in both).

### How to use it

1. Run **[Airbnb Scraper](https://apify.com/tri_angle/airbnb-scraper)** for your area **with check-in and check-out dates** (otherwise there are no prices). A weekday and a weekend run together give a fairer rate; listings found in both are counted once.
2. Optional: run a Zillow, Realtor.com or Redfin scraper for homes for sale in the same area (see the Real Estate Deal Finder for the supported scrapers).
3. Open this actor and pick those datasets.

### Good to know

- Comparables match on bedrooms and distance only, not condition, pool or view. Large Airbnb homes are often upscale, so compare the listing photos too.
- Multi-unit buildings, mobile homes and land are skipped in the home comparison (one rent estimate does not describe a whole building).
- Local short-term rental rules (permits, owner-occupancy, night caps) can decide the answer. Check them before buying.
- This is a first filter, not an underwriting or financial advice.

### Pricing

You pay per output row (one per home, or one per market segment). Run it with no input for a free demo on the Sacramento sample.

Made by KodaBloom LLC. Questions: info@kodabloom.com

# Actor input Schema

## `airbnbDatasetIds` (type: `array`):

Pick one or more datasets from Airbnb Scraper (tri_angle/airbnb-scraper) runs. Run it WITH check-in and check-out dates so prices come back; adding a weekday and a weekend run gives a fairer rate.

## `homeDatasetIds` (type: `array`):

Pick Zillow, Realtor.com or Redfin scraper results (same formats as the Real Estate Deal Finder). Then each home gets a break-even occupancy and an Airbnb vs long-term rent comparison. Leave empty for a market report only.

## `occupancyPct` (type: `integer`):

Used only for the revenue estimate. Occupancy is not measured from the data.

## `costSharePct` (type: `integer`):

Cleaning, supplies, platform fees and management that a long-term rental would not have.

## `radiusKm` (type: `integer`):

Search radius for comparable Airbnb homes. It doubles automatically when fewer than 5 are found.

## `airbnbListings` (type: `array`):

Airbnb Scraper items.

## `homes` (type: `array`):

Zillow, Realtor.com or Redfin scraper items.

## Actor input object example

```json
{
  "occupancyPct": 50,
  "costSharePct": 35,
  "radiusKm": 5,
  "airbnbListings": [],
  "homes": []
}
```

# Actor output Schema

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

Market segments, or one row per home for sale with break-even occupancy and Airbnb vs long-term rent.

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

// Run the Actor and wait for it to finish
const run = await client.actor("kodabloomllc/short-term-rental-analyzer").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 = {
    "airbnbListings": [],
    "homes": [],
}

# Run the Actor and wait for it to finish
run = client.actor("kodabloomllc/short-term-rental-analyzer").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 '{
  "airbnbListings": [],
  "homes": []
}' |
apify call kodabloomllc/short-term-rental-analyzer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kodabloomllc/short-term-rental-analyzer"
        }
    }
}
```

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/Ppx5vTh8yeY1zVEqx/builds/F2uZaeM1QIyIcXbYD/openapi.json
