# Airbnb Property Scraper 🏠 (`shahidirfan/airbnb-property-scraper`) Actor

Extract Airbnb listings at scale. Harvest property data including pricing, reviews, availability, and host profiles. Perfect for vacation rental market analysis, competitor intelligence, and price monitoring across any location worldwide.

- **URL**: https://apify.com/shahidirfan/airbnb-property-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Travel, Real estate, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.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

## Airbnb Listings Scraper

Extract Airbnb listings and property-level details at scale using search URLs. Build clean datasets with ranking, pricing, ratings, host details, and location metadata for analytics and market intelligence.

---

### Features

- **API-first extraction** — Collects Airbnb listing and property data from the listing API response.
- **Flexible inputs** — Run using a full Airbnb search URL.
- **Cursor pagination** — Automatically follows Airbnb pagination cursors to collect more listings.
- **Null-free dataset output** — Excludes empty fields to keep records clean and analysis-ready.
- **Auto-healing runtime context** — Refreshes API key and operation hash context when request shape changes.

---

### Use Cases

#### Short-Term Rental Market Research
Track active inventory, pricing, and listing quality in target cities or neighborhoods.

#### Competitive Benchmarking
Compare listing rankings, rating signals, and host characteristics across markets.

#### Dynamic Pricing Analysis
Monitor nightly and total displayed prices across different search filters and dates.

#### Data Pipeline Enrichment
Feed property datasets into BI tools, forecasting workflows, and automated reporting systems.

---

### Input Parameters

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `url` | String | No | London search prefill | Preferred input. Any Airbnb search URL from `/s/.../homes`. |
| `results_wanted` | Integer | No | `20` | Maximum number of listing records to save. |
| `max_pages` | Integer | No | `5` | Safety cap for pagination depth. |
| `proxyConfiguration` | Object | No | Residential Apify Proxy | Proxy settings for reliability and stability. |

---

### Output Data

Each dataset item contains available listing/property metadata without empty/null fields.

| Field | Type | Description |
|---|---|---|
| `listing_id` | String | Airbnb listing numeric identifier. |
| `listing_url` | String | Airbnb listing URL. |
| `title` | String | Listing title text. |
| `subtitle` | String | Listing subtitle text. |
| `name_localized` | String | Localized listing name. |
| `room_type` | String | Home or room type. |
| `city` | String | Localized city for the listing. |
| `category` | String | Airbnb room/property category label. |
| `person_capacity` | Number | Maximum supported guests. |
| `is_superhost` | Boolean | Host superhost status when available. |
| `host_name` | String | Host name when available. |
| `latitude` | Number | Listing latitude. |
| `longitude` | Number | Listing longitude. |
| `rating` | Number | Average rating value. |
| `reviews_count` | Number | Number of reviews parsed from rating text. |
| `nightly_price` | String | Primary displayed nightly price. |
| `total_price_line` | String | Secondary displayed total/summary line. |
| `badges` | Array | Listing badge labels. |
| `image_urls` | Array | Image URLs from contextual listing pictures. |
| `search_rank` | Number | Rank order in collected search results. |
| `search_context` | String | URL context used in the run. |
| `fetched_at` | String | Extraction timestamp. |

---

### Usage Examples

#### Search URL Input

```json
{
  "url": "https://www.airbnb.com/s/London--United-Kingdom/homes?checkin=2026-05-13&checkout=2026-05-14&adults=1",
  "results_wanted": 20,
  "max_pages": 5
}
````

#### Proxy Configuration

```json
{
  "url": "https://www.airbnb.com/s/London--United-Kingdom/homes",
  "results_wanted": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

***

### Sample Output

```json
{
  "listing_id": "1390856626261696498",
  "listing_url": "https://www.airbnb.com/rooms/1390856626261696498",
  "title": "Flat in Greater London",
  "subtitle": "2 beds",
  "name_localized": "Amazing location by tube",
  "room_type": "Entire rental unit",
  "city": "London",
  "person_capacity": 4,
  "rating": 4.93,
  "reviews_count": 165,
  "nightly_price": "$61",
  "nightly_price_qualifier": "for 1 night",
  "search_rank": 1,
  "search_context": "https://www.airbnb.com/s/London--United-Kingdom/homes?checkin=2026-05-13&checkout=2026-05-14&adults=1",
  "fetched_at": "2026-04-22T12:30:00.000Z"
}
```

***

### Tips For Best Results

#### Prefer Direct Search URLs

Use full Airbnb search URLs for the most deterministic filter and location behavior.

#### Start With QA-Sized Runs

Run with `results_wanted: 20` and low `max_pages` first, then increase for production jobs.

#### Enable Residential Proxy

For best reliability across larger paginated runs, keep residential proxy enabled.

#### Use Real Date Context

When analyzing pricing and availability snapshots, use Airbnb search URLs that already include realistic dates.

***

### Integrations

- **Google Sheets** — Build listing and pricing trackers.
- **Airtable** — Create searchable property intelligence databases.
- **Looker Studio / BI tools** — Visualize ranking, rating, and pricing trends.
- **Make / Zapier** — Trigger automated workflows from fresh listing datasets.
- **Webhooks** — Send output to internal APIs and downstream services.

#### Export Formats

- **JSON** — For APIs and programmatic workflows.
- **CSV** — For spreadsheet analysis.
- **Excel** — For business reporting.
- **XML** — For compatible legacy systems.

***

### Frequently Asked Questions

#### What happens if I do not provide a URL?

The actor uses `INPUT.json` as a local fallback. On Apify production runs, pass a real Airbnb search URL for deterministic behavior.

#### Does the actor support pagination?

Yes. It follows Airbnb cursor-based pagination until `results_wanted` or `max_pages` is reached.

#### What happens if the API key or operation hash changes?

The actor refreshes runtime API context automatically and retries the request.

#### Are null fields included in output?

No. Empty and null values are removed before records are saved.

#### Can I use long URLs with many query parameters?

Yes. The actor accepts full Airbnb search URLs with query parameters and uses them as search context.

***

### Support

For issues, enhancements, or feature requests, open a ticket via Apify Console.

#### Resources

- [Apify Documentation](https://docs.apify.com/)
- [Apify API Reference](https://docs.apify.com/api/v2)
- [Apify Schedules](https://docs.apify.com/platform/schedules)

***

### Legal Notice

This actor is intended for legitimate data collection and analysis workflows. Users are responsible for complying with applicable laws, platform terms, and usage limits.

# Actor input Schema

## `urls` (type: `array`):

One or more Airbnb /s/.../homes URLs. The actor will iterate all URLs until results\_wanted is reached or sources are exhausted.

## `results_wanted` (type: `integer`):

Maximum number of listings to save.

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

Use Apify Proxy for reliable access.

## Actor input object example

```json
{
  "urls": [
    "https://www.airbnb.com/s/London--United-Kingdom/homes?checkin=2026-05-13&checkout=2026-05-14&adults=1"
  ],
  "results_wanted": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "urls": [
        "https://www.airbnb.com/s/London--United-Kingdom/homes?checkin=2026-05-13&checkout=2026-05-14&adults=1"
    ],
    "results_wanted": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/airbnb-property-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 = {
    "urls": ["https://www.airbnb.com/s/London--United-Kingdom/homes?checkin=2026-05-13&checkout=2026-05-14&adults=1"],
    "results_wanted": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/airbnb-property-scraper").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 '{
  "urls": [
    "https://www.airbnb.com/s/London--United-Kingdom/homes?checkin=2026-05-13&checkout=2026-05-14&adults=1"
  ],
  "results_wanted": 20
}' |
apify call shahidirfan/airbnb-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=shahidirfan/airbnb-property-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Airbnb Property Scraper 🏠",
        "description": "Extract Airbnb listings at scale. Harvest property data including pricing, reviews, availability, and host profiles. Perfect for vacation rental market analysis, competitor intelligence, and price monitoring across any location worldwide.",
        "version": "0.0",
        "x-build-id": "fp5WjImEaeVsOnW0R"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/shahidirfan~airbnb-property-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-shahidirfan-airbnb-property-scraper",
                "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/shahidirfan~airbnb-property-scraper/runs": {
            "post": {
                "operationId": "runs-sync-shahidirfan-airbnb-property-scraper",
                "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/shahidirfan~airbnb-property-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-shahidirfan-airbnb-property-scraper",
                "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": {
                    "urls": {
                        "title": "Airbnb Search URLs",
                        "type": "array",
                        "description": "One or more Airbnb /s/.../homes URLs. The actor will iterate all URLs until results_wanted is reached or sources are exhausted.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "results_wanted": {
                        "title": "Results wanted",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of listings to save.",
                        "default": 20
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Use Apify Proxy for reliable access.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
