# Airbnb Market Intelligence Scraper (`teslagp/airbnb-market-intelligence-scraper`) Actor

Extract Airbnb listings with prices, ratings, reviews and coordinates. Built for real estate investors, property managers and funds doing short-term rental market research. Residential proxies included.

- **URL**: https://apify.com/teslagp/airbnb-market-intelligence-scraper.md
- **Developed by:** [Juan Galeano Patiño](https://apify.com/teslagp) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.50 / 1,000 listing extracteds

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

### What does Airbnb Market Intelligence Scraper do?

Airbnb Market Intelligence Scraper extracts **Airbnb market data** — listings with prices, ratings, reviews, coordinates, property type, Guest Favorite badge and more — straight from [airbnb.com](https://www.airbnb.com). It is built for **property investment research** and **pricing analysis**: investors, property managers and funds use it to compare short-term rental supply in any city or neighborhood and make data-driven buy, pricing and positioning decisions.

Running on the Apify platform you get **API access**, **scheduling**, **integrations**, automatic **proxy rotation** and run **monitoring** out of the box — no infrastructure to maintain.

### Why use Airbnb Market Intelligence Scraper?

📍 Identify the neighborhoods with the best per-night performance before you invest.

💰 Compare prices of similar listings in an area to set competitive nightly rates.

⭐ Analyze the competition before buying a property for short-term rental.

🏆 Detect properties with the "Guest Favorite" badge (top 10% by rating and reviews) to benchmark what guests reward.

### What data can Airbnb Market Intelligence Scraper extract?

Each row of the dataset is one Airbnb listing. These are the most useful fields:

| Field | Type | Description |
|-------|------|-------------|
| listingId | string | Numeric Airbnb listing ID |
| title | string/null | Listing title |
| url | string | Canonical listing URL |
| pricePerNight | number/null | Nightly price in USD |
| totalPrice | number/null | Total stay price |
| currency | string | Currency (forced to USD) |
| rating | number/null | Overall rating (0–5) |
| reviewCount | integer/null | Total number of reviews |
| superhost | boolean/null | Whether the host is a Superhost |
| guestFavorite | boolean/null | Whether the listing has the Guest Favorite badge |
| propertyType | string/null | Property type |
| bedrooms | integer/null | Number of bedrooms (null in Phase 1) |
| latitude | number/null | Latitude |
| longitude | number/null | Longitude |
| imageUrl | string/null | Primary image URL |

### How to use Airbnb Market Intelligence Scraper

1. Go to the Actor page in Apify Store.
2. In the "Input" tab, enter the location (e.g. "Lisbon, Portugal").
3. Optionally, set check-in and check-out dates to get exact prices for those dates.
4. Set the number of adult guests and children if needed.
5. Configure the residential proxy (mandatory: Airbnb blocks datacenter IPs).
6. Adjust the maximum number of results (default 50, maximum 200).
7. Click "Start" and wait for the run to finish.
8. Download the dataset in JSON, CSV, Excel or HTML.

### How it works

- Builds an Airbnb search URL from the location, dates, guests and filters you provide.
- Fetches the search page over HTTP through a residential proxy (datacenter IPs are blocked by Airbnb).
- Parses the embedded JSON payload (data-deferred-state-0) that Airbnb renders in the search page.
- Normalizes each listing to a consistent schema — prices in USD, coordinates, ratings and badges.
- Saves the results to the Apify dataset, ready to download or consume via API.

### How much does it cost?

The Actor uses pay-per-event pricing:

- 💰 **$1.50 per 1,000 listings extracted** ($0.0015 per listing saved to the dataset).
- The "Actor start" event costs $0.00005 per run — practically free.
- No extra platform charges: compute and residential proxies are included in the price.
- Concrete example: extracting 200 listings in Lisbon costs **$0.30**.
- Apify's free plan includes monthly credits, so you can test the Actor before spending anything.

### Tips for better results

- Always use residential proxies (RESIDENTIAL group). Airbnb blocks datacenter IPs.
- For exact prices, always set check-in and check-out dates. Without dates, Airbnb shows approximate prices.
- The nightly price is computed by dividing the total price by the number of nights. For the most accurate nightly rates, use a 3–7 night range.
- The fields bedrooms, beds, bathrooms and maxGuests are not available in the initial search payload. They will be resolved in a future version (Phase 2).

### FAQ and limitations

#### Is it legal to scrape Airbnb?

The Actor only collects publicly visible listing data and is intended for ethical market-research use. You are responsible for complying with applicable laws (including GDPR if you process personal data) and with Airbnb's terms of service.

#### Why is the title field empty?

Airbnb does not always expose the real listing title in search results payloads. This will be resolved in Phase 2 with per-listing detail fetches.

#### Why does the price change between runs?

Airbnb adjusts prices dynamically based on dates, demand and location. Always specify check-in and check-out dates for consistent, comparable results.

#### Can I use the dataset in a commercial product?

Yes — the dataset from your runs is yours. Check Apify's terms of use for the details.

#### Support

Report bugs and feature requests in the "Issues" tab of the Actor page in Apify Console.

### Known limitations

- bedrooms, beds, bathrooms, and maxGuests are null in this version. Airbnb does not expose them in the search payload; they will be resolved in Phase 2 with per-listing detail fetches.
- title is often null for the same reason: Airbnb does not always expose the listing title in search results.
- superhost is null because Airbnb has replaced the Superhost badge with the Guest Favorite badge. The guestFavorite field captures the new badge.

### Integrations and API

- Run the Actor programmatically via the Apify API (see the API tab on the Actor page).
- Connect it to your stack with Zapier, Make or GitHub integrations.
- Use scheduling for recurring extractions (e.g. weekly price tracking per neighborhood).

[![Airbnb Market Intelligence Scraper](https://apify.com/actor-badge?actor=teslagp/airbnb-market-intelligence-scraper)](https://apify.com/teslagp/airbnb-market-intelligence-scraper)

# Actor input Schema

## `location` (type: `string`):

Ciudad, región o dirección. Ej: 'Lisbon, Portugal', 'Bali, Indonesia'

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

Formato YYYY-MM-DD. IMPORTANTE: si omites las fechas, el precio devuelto será el total de la estancia (no por noche) y el campo 'nights' será null. Para precios por noche precisos, especifica checkIn y checkOut.

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

Formato YYYY-MM-DD. Debe ser posterior a checkIn. Si omites las fechas, el campo 'nights' será null y pricePerNight será igual a totalPrice.

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

Número de huéspedes adultos.

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

Número de niños.

## `priceMin` (type: `integer`):

Precio mínimo por noche en USD. Vacío = sin mínimo.

## `priceMax` (type: `integer`):

Precio máximo por noche en USD. Vacío = sin máximo.

## `propertyType` (type: `string`):

Filtra por tipo de propiedad. Vacío = todos los tipos.

## `maxResults` (type: `integer`):

Número máximo de listados a extraer (1-200).

## `proxyConfiguration` (type: `object`):

Obligatorio. Airbnb bloquea IPs de datacenter. Usa proxies residenciales (RESIDENTIAL) para garantizar la extracción.

## Actor input object example

```json
{
  "location": "Lisbon, Portugal",
  "adults": 2,
  "children": 0,
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

Listados de Airbnb extraídos (un item por listado).

# 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 = {
    "location": "Lisbon, Portugal"
};

// Run the Actor and wait for it to finish
const run = await client.actor("teslagp/airbnb-market-intelligence-scraper").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 = { "location": "Lisbon, Portugal" }

# Run the Actor and wait for it to finish
run = client.actor("teslagp/airbnb-market-intelligence-scraper").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 '{
  "location": "Lisbon, Portugal"
}' |
apify call teslagp/airbnb-market-intelligence-scraper --silent --output-dataset

```

## MCP server setup

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

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/MwfAPsYkcp4swfYiS/builds/gdlnNDy6dYKXJdtI8/openapi.json
