# Airbnb Market Report: Prices, Ratings & Competition (`precious_bathmat/airbnb-market-report`) Actor

Airbnb market report for any city and dates: median nightly price and quartiles, prices by bedrooms and property type, ratings, Guest favourite share, discounts, demand from reviews and the best-value listings. Every listing included as JSON and CSV. No login, no proxy.

- **URL**: https://apify.com/precious\_bathmat/airbnb-market-report.md
- **Developed by:** [Mariam Ahmed](https://apify.com/precious_bathmat) (community)
- **Categories:** Travel, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.00 / 1,000 market reports

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

## Airbnb Market Report: Prices, Ratings & Competition

What a night on **Airbnb** really costs in any city, for your dates: the **median nightly price and its spread**, prices **by number of bedrooms**, property type and neighbourhood, how the competition is rated, how many are **Guest favourites**, how many are **discounting and by how much**, and which listings are the **best value**. Every listing behind the numbers comes with it as CSV and JSON.

Other Airbnb scrapers hand you hundreds of listing rows and leave the analysis to you. This Actor does the analysis: one row per market, ready to compare cities, dates or property sizes side by side.

### What does this do?

For each location you give, it searches Airbnb for your dates and guests, reads up to 270 bookable listings, and rolls them up:

```
Nashville, TN · 16-18 Oct 2026 · 2 guests · 77 listings

 median $311.50 / night      middle half $223.50 to $406.50
 average rating 4.86         Guest favourites 59.7%
 discounting 40.3%           median discount 15.7%
 new listings 7.8%           median reviews 128

 by size            listings   median / night
 studio                  8          $217
 1 bedroom              52          $341.50
 2 bedrooms              9          $336.50
 hotel room              5          $263.50
```

### Who is it for?

- **Airbnb hosts**: set your price from what comparable places charge on the same dates, not from a guess
- **Short-term rental investors**: compare nightly rates across cities before buying, without an AirDNA subscription
- **Property managers**: track your markets weekly, and spot when competitors start discounting
- **Travel businesses and researchers**: price levels and supply by city, on a schedule

### What data do you get?

**One market report per location:**

| Field | What it tells you |
|---|---|
| `medianNightly`, `p25Nightly`, `p75Nightly`, `meanNightly`, `minNightly`, `maxNightly` | The price level and its spread, per night |
| `byBedrooms` | Private room, studio, 1, 2, 3 and 4+ bedrooms, hotel rooms: count and median price each |
| `byPropertyType`, `byArea` | Apartments vs condos vs homes, and which neighbourhoods |
| `averageRating`, `ratedAbove48Percent` | How strong the competition is |
| `guestFavoritePercent`, `superhostBadgePercent`, `hotelPercent` | Badges and hotels in the mix |
| `discountedPercent`, `medianDiscountPercent` | How many are cutting prices, and by how much |
| `newListingsPercent`, `medianReviews`, `totalReviews` | New supply, and demand measured by reviews |
| `freeCancellationPercent` | Booking terms |
| `bestValue` | The cheapest listings rated 4.8+ with 10+ reviews |
| `mostReviewed` | The most-booked listings, by review count |

**Every listing** (JSON and CSV, linked from the run's output): name, link, property type, area, bedrooms, beds, baths, rating, reviews, Guest favourite and Superhost badges, free cancellation, stay total, **nightly price**, original price and **discount**, and coordinates.

### Example: four markets, one weekend

A live run on 24 September 2026 for the weekend of 16-18 October, 2 guests, prices in USD:

| Market | Listings | Median / night | Middle half | Guest favourites | Discounting |
|---|---|---|---|---|---|
| **Nashville, TN** | 77 | **$311.50** | $224 to $407 | 59.7% | 40.3% |
| **Barcelona, Spain** | 73 | **$304.50** | $251 to $361 | 15.1% | 21.9% |
| **Austin, TX** | 90 | **$221.25** | $178 to $281 | 63.3% | 48.9% |
| **Miami, FL** | 79 | **$191.50** | $158 to $251 | 44.3% | 65.8% |

Four markets, 319 listings, **67 seconds**. Two things the table shows at a glance: Miami is the most discounted market (two listings in three are cutting prices), and in Barcelona almost half of what Airbnb shows are **hotel rooms** (34 of 73), which is why its Guest favourite share is so low.

### How it works, and what it does not do

- **Prices are for your dates.** Airbnb prices change by date, so every report is tied to a check-in and number of nights, and the nightly figure is the stay total divided by the nights. Compare markets on the same dates.
- **It reads what Airbnb shows for that search**: bookable listings for your dates and guests, in Airbnb's own order, up to 270 per search (Airbnb's own limit). That is a large, real sample of what a traveller can book, **not a census of every listing** in the area and not an occupancy figure.
- **Guests change the mix.** With 2 guests Airbnb mostly shows studios and one-bedrooms. To analyse family-size homes, set 4 to 6 guests, or choose "Entire place only".
- **Superhost is undercounted by design of Airbnb's search page**: each listing shows one badge, and a Guest favourite badge takes the place of Superhost. The field is named `superhostBadgePercent` for that reason.
- **No personal data.** No host or guest names are collected.

### Pricing

**$0.03 per market report** and **$0.001 per listing** (only when listings are switched on).

The four-market example above costs **$0.44** with all 319 listings, or **$0.12** for the four reports alone.

### Input

| Field | Meaning |
|---|---|
| **Locations** | Cities or areas as you would type them into Airbnb, one report each |
| **Check-in date** | Empty means the first Friday at least three weeks away |
| **Nights** | Length of stay, 1 to 30 |
| **Guests** | Adults; more guests means larger places |
| **Type of place** | Any, entire place only, or private rooms only |
| **Currency** | 15 currencies, so markets in different countries compare directly |
| **Listings per location** | 18 to 270; more gives steadier numbers |
| **Also return every listing** | Adds the listings as JSON and CSV |

### Integrations

Reports export to JSON, CSV, Excel and Google Sheets, or feed a dashboard through the Apify API, webhooks, Make, Zapier and n8n. Schedule a weekly run to track how prices and discounting move in your markets.

# Actor input Schema

## `locations` (type: `array`):

Cities, neighbourhoods or regions, written as you would type them into Airbnb, e.g. "Austin, TX", "Lisbon, Portugal", "Gatlinburg, TN". One report per location.

## `checkIn` (type: `string`):

YYYY-MM-DD. Leave empty for the first Friday at least three weeks from today, when most calendars are open.

## `nights` (type: `integer`):

Length of stay. Prices are divided by this to give a nightly rate, so weekend and week-long stays can be compared.

## `adults` (type: `integer`):

Adults. More guests leaves out places too small for them.

## `roomType` (type: `string`):

Compare like with like: entire places only, private rooms only, or everything Airbnb shows.

## `currency` (type: `string`):

Prices are fetched in this currency, so markets in different countries can be compared directly.

## `maxListingsPerLocation` (type: `integer`):

How many listings each report is built from. Airbnb shows up to 270 for one search. More listings give steadier numbers and take longer.

## `includeListings` (type: `boolean`):

Saves each listing (price, bedrooms, rating, reviews, badges, coordinates, link) as JSON and CSV next to the reports. Charged per listing.

## Actor input object example

```json
{
  "locations": [
    "Austin, TX",
    "Nashville, TN"
  ],
  "nights": 2,
  "adults": 2,
  "roomType": "any",
  "currency": "USD",
  "maxListingsPerLocation": 90,
  "includeListings": true
}
```

# Actor output Schema

## `reports` (type: `string`):

One row per location: nightly price spread, prices by bedrooms and type, ratings, badges, discounts and demand.

## `listingsCsv` (type: `string`):

Every listing behind the reports, one per row, for a spreadsheet.

## `listingsJson` (type: `string`):

The same listings as JSON.

## `summary` (type: `string`):

Dates, counts, any location that returned nothing, and the limits of the data.

# 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 = {
    "locations": [
        "Austin, TX",
        "Nashville, TN"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("precious_bathmat/airbnb-market-report").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 = { "locations": [
        "Austin, TX",
        "Nashville, TN",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("precious_bathmat/airbnb-market-report").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 '{
  "locations": [
    "Austin, TX",
    "Nashville, TN"
  ]
}' |
apify call precious_bathmat/airbnb-market-report --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,precious_bathmat/airbnb-market-report"
        }
    }
}
```

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/GDp2T76M8hJVPWEs7/builds/4gUbxKSW8NPrRVvSo/openapi.json
