# Airbnb Market Intelligence - Listings, Prices & Reports (`webdata_labs/airbnb-market-intelligence`) Actor

\[💵 $2.00 / 1K] Scrape Airbnb listings at scale with normalized prices, ratings, host facts, amenities, and market reports. Search or full-detail mode, no start fee.

- **URL**: https://apify.com/webdata\_labs/airbnb-market-intelligence.md
- **Developed by:** [WebData Labs](https://apify.com/webdata_labs) (community)
- **Categories:** Real estate, Travel, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 airbnb search listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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

## Airbnb Market Intelligence - Listings, Prices & Reports

**Get analysis-ready Airbnb market data, not a pile of localized price strings that still needs spreadsheet cleanup.** Airbnb Market Intelligence searches destinations or direct listing URLs, normalizes prices and property facts, and creates a ready-to-use market summary. Run it from Apify Console, the API, schedules, webhooks, or your preferred integration.

### ✅ What you get / ❌ What this isn't

✅ One deduplicated row per Airbnb listing\
✅ Numeric nightly and total prices with the original source label preserved\
✅ Search-only market scans or full listing enrichment\
✅ A typed dataset with Market scan, Listing details, and Source & QA views\
✅ `MARKET_SUMMARY` JSON plus a browser-ready HTML report

❌ It does not scrape private or login-gated data\
❌ It does not label blocked calendar dates as confirmed bookings\
❌ It does not invent occupancy, ADR, RevPAR, or revenue estimates

### 🔎 Why use this Airbnb scraper

- **Skip manual cleanup:** prices are returned as numbers, with currency, dates, nights, and source context.
- **Replace the first pivot table:** the report calculates median, mean, minimum, and maximum nightly price plus room-type, rating, Guest Favorite, and Superhost summaries.
- **Choose the right depth:** use fast search mode for price maps and market sizing, or full mode for amenities, hosts, rules, photos, and rating breakdowns.
- **Go beyond the pagination ceiling:** automatic price-range splitting opens saturated result sets and deduplicates the combined listings.
- **Keep provenance:** every row includes the source query, exact source URL, collection time, extraction mode, and parser warnings.
- **Control spend:** choose how many listings you need; the Actor optimizes pagination, speed, and retries automatically.

### 📊 What data you get

| Group | Main fields | Why it matters |
|---|---|---|
| Identity | `listingId`, `url`, `title` | Join and deduplicate repeated scans |
| Pricing | `nightlyPrice`, `totalPrice`, `currency`, `nights` | Compare like-for-like numeric prices |
| Property | `roomType`, `propertyType`, guests, beds, baths | Segment comparable supply |
| Quality | rating, reviews, category ratings, Guest Favorite | Benchmark listing quality |
| Host | name, Superhost, host rating, years hosting | Understand professional-host signals |
| Detail | description, amenities, rules, safety, images | Audit competitor positioning and product gaps |
| Provenance | source query/URL, mode, timestamp, warnings | Reproduce and quality-check the dataset |

### 👥 Who it's for

- Property managers benchmarking a portfolio against local competitors
- Short-term-rental analysts building destination and neighborhood datasets
- Hosts comparing price, amenity, and quality signals
- Real-estate investors screening short-term-rental markets
- Travel-data teams feeding dashboards, warehouses, or AI workflows

### ⚙️ How to analyze an Airbnb market

1. Enter one city or neighborhood in **Locations**.
2. Choose **Fast market scan** and start with 20 to 100 listings.
3. Add check-in and check-out dates when you need a comparable stay quote.
4. Run the Actor and inspect the **Market scan** dataset view.
5. Open `MARKET_SUMMARY.html` for immediate price and supply statistics.
6. Switch to **Full listing details** only when you need amenities, host facts, rules, and descriptions.
7. Schedule the same input weekly to build your own time series.

### 📥 Input

```json
{
  "locationQueries": ["Bristol, UK"],
  "mode": "search",
  "checkIn": "2026-09-18",
  "checkOut": "2026-09-23",
  "adults": 2,
  "currency": "GBP",
  "maxListings": 100,
  "includeMarketSummary": true
}
```

You can also supply pre-filtered Airbnb search URLs through `startUrls` or direct room URLs through `listingUrls`. Direct listing URLs are enriched even when the global mode is set to search.

Set `maxListings` to `0` for an uncapped market scan. Large runs automatically adapt pagination, request speed, and saturated price ranges. Keep the default `100` for a cost-safe first run.

### 📤 Output

```json
{
  "listingId": "123456789012345678",
  "url": "https://www.airbnb.com/rooms/123456789012345678",
  "title": "Sunny apartment near the old town",
  "nightlyPrice": 90,
  "totalPrice": 450,
  "currency": "GBP",
  "nights": 5,
  "rating": 4.92,
  "reviewsCount": 128,
  "roomType": "ENTIRE_HOME",
  "isGuestFavorite": true,
  "scrapeMode": "full",
  "scrapedAt": "2026-08-09T12:00:00Z"
}
```

Download the dataset as JSON, CSV, Excel, XML, or HTML, or retrieve it through the Apify API.

### Ready-made examples

- [Airbnb City Market Scan](https://apify.com/webdata_labs/airbnb-market-intelligence/examples/airbnb-city-market-scan) for city and neighborhood pricing datasets
- [Airbnb Competitor Benchmark](https://apify.com/webdata_labs/airbnb-market-intelligence/examples/airbnb-competitor-benchmark) for listings, hosts, amenities, ratings, photos, and rules
- [Airbnb Listing Details API](https://apify.com/webdata_labs/airbnb-market-intelligence/examples/airbnb-listing-details-api) for full-detail extraction from Airbnb room URLs

### 🔌 Use it as an API

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('webdata_labs/airbnb-market-intelligence').call({
  locationQueries: ['London, UK'],
  mode: 'search',
  currency: 'GBP',
  maxListings: 1000,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

#### Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('webdata_labs/airbnb-market-intelligence').call(run_input={
    'locationQueries': ['London, UK'],
    'mode': 'full',
    'maxListings': 100,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
```

#### REST

```bash
curl -X POST "https://api.apify.com/v2/acts/webdata_labs~airbnb-market-intelligence/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"locationQueries":["London, UK"],"mode":"search","maxListings":1000}'
```

### 💵 How much does it cost?

Pricing is **$2.00 per 1,000 search rows** and **$5.00 per 1,000 full-detail rows** at the base tier, with no run-start fee and platform usage included. A 100-listing market scan costs about $0.20 at the base search rate. Higher Apify plans receive volume discounts shown in the live pricing panel.

### 🔁 Run it on the Apify platform

Use schedules for recurring market scans, webhooks for completion alerts, and integrations for Google Sheets, Make, Zapier, Slack, warehouses, or your own API pipeline.

### ⚠️ Limits and caveats

- Airbnb can change page structure, visible supply, search boundaries, and experiments without notice.
- Prices depend on dates, guests, currency, fees, and availability. Use identical inputs for comparisons.
- Approximate public coordinates are suitable for market mapping, not property-level address identification.
- A successful run must still be checked for row count and field coverage before production use.
- Use the data lawfully and follow Airbnb's terms and applicable privacy rules.

### 🧩 Related Actors

- [Airbnb Reviews Scraper](https://apify.com/automation-lab/airbnb-reviews) for guest text, topics, host replies, and sentiment
- [Booking.com Scraper](https://apify.com/automation-lab/booking-scraper) for hotel and vacation-rental price comparisons
- [Google Hotels Search Scraper](https://apify.com/automation-lab/google-hotels-search-scraper) for broader accommodation-market coverage

### ❓ FAQ

#### Can I scrape several cities in one run?

Yes. Add multiple values to `locationQueries`. The Actor deduplicates listing IDs across all inputs.

#### Does this estimate Airbnb occupancy?

No. An unavailable date can be booked, blocked by the host, or unavailable for another reason. The Actor does not turn that ambiguous signal into a false occupancy claim.

#### Why is a price missing?

Airbnb may omit a quote when no dates are supplied or a listing is unavailable for the requested stay. The original label and source context are retained when available.

#### Is this an Airbnb API?

It is an Apify Actor that returns structured data through Apify's REST API, client libraries, MCP integration, schedules, and webhooks.

### 🛠️ Support

When reporting an issue, include the run URL, sanitized input, expected result, and one affected listing or search URL. Never include API tokens or private data.

# Actor input Schema

## `locationQueries` (type: `array`):

Enter one or more destinations, such as Bristol, UK or Miami Beach, FL.

## `startUrls` (type: `array`):

Optional Airbnb search URLs when you already configured filters on Airbnb.

## `listingUrls` (type: `array`):

Optional Airbnb room URLs when you need information about specific listings.

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

Choose a fast market overview or complete listing information including amenities, host facts, rules, and detailed ratings.

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

Optional check-in date in YYYY-MM-DD format. Add both dates for stay-specific prices.

## `checkOut` (type: `string`):

Optional check-out date in YYYY-MM-DD format. It must be after check-in.

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

Number of adult guests.

## `children` (type: `integer`):

Number of children.

## `infants` (type: `integer`):

Number of infants.

## `pets` (type: `integer`):

Number of pets.

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

Choose the currency for listing prices.

## `maxListings` (type: `integer`):

Maximum number of unique Airbnb listings to return. Use 0 only when you want every available result.

## `includeMarketSummary` (type: `boolean`):

Create ready-to-use price, rating, property-type, and host summaries.

## Actor input object example

```json
{
  "locationQueries": [
    "Bristol, UK"
  ],
  "mode": "search",
  "adults": 1,
  "children": 0,
  "infants": 0,
  "pets": 0,
  "currency": "USD",
  "maxListings": 5,
  "includeMarketSummary": true
}
```

# Actor output Schema

## `marketScan` (type: `string`):

The most useful price, quality, property, and location fields.

## `listingDetails` (type: `string`):

Property, host, amenity, rule, and rating detail.

## `allRows` (type: `string`):

Complete canonical listing records.

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

JSON and HTML market-summary files.

# 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 = {
    "locationQueries": [
        "Bristol, UK"
    ],
    "maxListings": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("webdata_labs/airbnb-market-intelligence").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 = {
    "locationQueries": ["Bristol, UK"],
    "maxListings": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("webdata_labs/airbnb-market-intelligence").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 '{
  "locationQueries": [
    "Bristol, UK"
  ],
  "maxListings": 5
}' |
apify call webdata_labs/airbnb-market-intelligence --silent --output-dataset

```

## MCP server setup

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

```

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/Q1WHNlm2S8A3bsxfN/builds/eBAzpZwzaKVwiqwiH/openapi.json
