# Airbnb Listing Details Scraper — Full Property Data by URL (`malikgen/airbnb-listing-details`) Actor

Get full Airbnb listing detail from room URLs — description, all amenities (35–70), beds/baths/capacity, GPS, up to 50 photos, ratings and a rich host profile. Part of the Airbnb suite (Search, Revenue Calculator, Reviews).

- **URL**: https://apify.com/malikgen/airbnb-listing-details.md
- **Developed by:** [Malik Mazhar Ali](https://apify.com/malikgen) (community)
- **Categories:** Travel, Real estate
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.80 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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 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 Listing Details Scraper — Full Property Data by URL

Turn any Airbnb room URL into a complete, structured property record: **title, property type, full description, all amenities, sleeping arrangement, house rules, safety items, exact GPS coordinates, every photo, ratings, and a rich host profile** — clean JSON, ready for spreadsheets, databases, or AI pipelines.

> 🏠 **Part of the Airbnb suite** — pair it with the **[Airbnb Search Scraper](https://apify.com/malikgen/airbnb-scraper)** to discover listings by city, then feed those URLs here for the full detail. (See also the **[Revenue & Occupancy Calculator](https://apify.com/malikgen/airbnb-revenue-calculator)**.)

---

### Why this scraper

- ✅ **Complete detail, not a summary** — description (full text), **all amenities** (typically 35–70 per listing), sleeping arrangement per room, house rules, safety & property, cancellation policy.
- ✅ **Rich host profile** — name, Superhost & verified status, host rating + review count, years hosting, bio, and highlights.
- ✅ **Exact coordinates** — real latitude/longitude for mapping and analysis.
- ✅ **Every photo** — up to 50 high-resolution image URLs per listing.
- ✅ **Reliable by design** — reads Airbnb's own server-rendered data with a warmed residential session. No fragile CSS scraping that breaks weekly.
- ✅ **Stable schema** — every field is always present (`null` when a listing doesn't supply it). Your n8n / Make / Zapier flows never break on a missing key.

---

### Quick start

1. Paste one or more Airbnb room URLs into **Airbnb room URLs**, e.g. `https://www.airbnb.com/rooms/1234567890`.
2. Leave the proxy on the default (**Apify Residential, US**) — Airbnb requires it.
3. Click **Start**. Each listing becomes one structured record in the dataset.

**Don't have URLs yet?** Run the **[Airbnb Search Scraper](https://apify.com/malikgen/airbnb-scraper)** for a city, then copy its `url` values straight into this actor.

---

### Input

| Field | Type | Description |
|---|---|---|
| `listingUrls` | array (required) | Airbnb room URLs (`https://www.airbnb.com/rooms/<id>`). |
| `currency` | string | Currency for price fields (default `USD`). |
| `checkIn` / `checkOut` | string | Optional `YYYY-MM-DD` dates — set both for exact dated pricing. |
| `webhookUrl` | string | Optional. The actor POSTs the full result set here when the run finishes. |
| `proxyConfiguration` | object | Defaults to Apify Residential (US). Recommended to leave as-is. |

```json
{
  "listingUrls": [
    "https://www.airbnb.com/rooms/1322483482633897943",
    "https://www.airbnb.com/rooms/8926402"
  ],
  "currency": "USD",
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}
````

***

### Output

Every record contains (all keys always present, `null` when unavailable):

| Field | Type | Description |
|---|---|---|
| `listingId` | string | Airbnb listing ID. |
| `url` | string | Canonical room URL. |
| `name` | string | Listing title (e.g. `Home in Austin · ★4.95 · 3 bedrooms · 7 beds · 3.5 baths`). |
| `propertyType` | string | e.g. `Entire home`, `Private room`. |
| `locationName` | string | City / area shown on the listing. |
| `personCapacity` | integer | Max guests. |
| `bedrooms` / `beds` / `bathrooms` | number | Capacity breakdown. |
| `rating` | number | Overall star rating (`null` for new listings). |
| `reviewsCount` | integer | Number of reviews. |
| `isSuperhost` | boolean | Superhost flag. |
| `coordinates` | object | `{ lat, lng }` — exact GPS. |
| `description` | string | Full listing description (plain text). |
| `amenities` | string\[] | All amenities (e.g. Wifi, Pool, Kitchen, AC…). |
| `sleepingArrangements` | object\[] | Per-room beds, e.g. `{ "title": "Bedroom 1", "beds": "1 king bed" }`. |
| `houseRules` | string\[] | Check-in/out, guest max, etc. |
| `safetyAndProperty` | string\[] | Safety items (smoke alarm, etc.). |
| `cancellationPolicy` | string | Cancellation policy text when shown. |
| `images` | string\[] | Up to 50 photo URLs. |
| `thumbnail` | string | Primary image. |
| `host` | object | `{ id, name, isSuperhost, isVerified, profilePictureUrl, profileUrl, ratingAverage, ratingCount, yearsHosting, about, highlights[] }`. |
| `checkIn` / `checkOut` / `currency` | — | Echoed from input. |
| `scrapedAt` | string | ISO 8601 timestamp. |

A complete sample record is in [`docs/example-output-listing.json`](docs/example-output-listing.json).

***

### Run via API

```bash
## Synchronous — get items directly
curl -X POST "https://api.apify.com/v2/acts/malikgen~airbnb-listing-details/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"listingUrls":["https://www.airbnb.com/rooms/8926402"]}'
```

Works with the Apify JS/Python clients, n8n (**Apify** node), Make, and Zapier. Set `webhookUrl` to push results into your workflow automatically.

***

### Pricing

Pay-per-result (set in the Console). Headline guidance: **≈ $3.50 / 1,000 listings**.

> **Worked example:** 1,000 listing detail records ≈ **$3.50** + Apify platform usage (residential proxy + browser). Cheaper than dedicated detail scrapers while returning more fields (full amenities + complete host profile).

***

### FAQ

**Where do I get room URLs?** From the **[Airbnb Search Scraper](https://apify.com/malikgen/airbnb-scraper)** (search any city → use the `url` field), or paste your own.

**Why residential proxy?** Airbnb is Cloudflare-protected; a direct/datacenter hit to a room page returns an error page. The actor warms a residential session so the full page renders. Leave the default proxy on.

**Do I get the full amenities list or just a preview?** The full set — typically 35–70 amenities per listing.

**Are prices included?** Listing pages show exact prices only for specific dates. Set `checkIn`/`checkOut` for dated pricing; for nightly prices across many listings, use the **Airbnb Search Scraper**.

**Is the schema stable?** Yes — every field is always present (`null` if missing), so automations don't break.

***

### 🏠 The Airbnb suite

| Actor | Use it for |
|---|---|
| **[Airbnb Search Scraper](https://apify.com/malikgen/airbnb-scraper)** | Discover listings by city — price/night, rating, coordinates, superhost. |
| **Airbnb Listing Details Scraper** *(this actor)* | Full property detail from room URLs — description, amenities, host, photos. |
| **[Airbnb Revenue & Occupancy Calculator](https://apify.com/malikgen/airbnb-revenue-calculator)** | Occupancy %, ADR, estimated revenue — the AirDNA alternative. |
| **[Airbnb Reviews Scraper](https://apify.com/malikgen/airbnb-reviews-scraper)** | Reviews + sentiment + per-listing insights, by city / URL / ID. |

***

### Changelog

- **0.1** — Initial release. Full PDP extraction via server-rendered data + warmed residential session: description, amenities, sleeping arrangement, house rules, safety, coordinates, photos, ratings, full host profile.

***

*Not affiliated with, endorsed by, or sponsored by Airbnb. Scrapes publicly available listing data for legitimate research, market analysis, and business use. Respect Airbnb's Terms of Service and applicable laws.*

# Actor input Schema

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

One or more Airbnb listing URLs (https://www.airbnb.com/rooms/<id>). Tip: get these in bulk from the companion 'Airbnb Search Scraper' actor — paste its `url` field values here.

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

Currency code for any price fields (ISO 4217).

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

Optional check-in date (YYYY-MM-DD) — set both check-in and check-out to retrieve exact, dated pricing for the stay.

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

Optional check-out date (YYYY-MM-DD).

## `webhookUrl` (type: `string`):

If set, the actor POSTs the full result set to this URL when the run finishes (great for n8n / Make / Zapier).

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

Airbnb requires residential proxies. Leave the default (Apify Residential, US) for best reliability.

## Actor input object example

```json
{
  "listingUrls": [
    "https://www.airbnb.com/rooms/1688567181418548240"
  ],
  "currency": "USD",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

Key identity, price, rating, and location per listing

## `full` (type: `string`):

All fields including amenities, images, host info, and price breakdown

# 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 = {
    "listingUrls": [
        "https://www.airbnb.com/rooms/1688567181418548240"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("malikgen/airbnb-listing-details").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 = {
    "listingUrls": ["https://www.airbnb.com/rooms/1688567181418548240"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("malikgen/airbnb-listing-details").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 '{
  "listingUrls": [
    "https://www.airbnb.com/rooms/1688567181418548240"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call malikgen/airbnb-listing-details --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Airbnb Listing Details Scraper — Full Property Data by URL",
        "description": "Get full Airbnb listing detail from room URLs — description, all amenities (35–70), beds/baths/capacity, GPS, up to 50 photos, ratings and a rich host profile. Part of the Airbnb suite (Search, Revenue Calculator, Reviews).",
        "version": "0.0",
        "x-build-id": "Hv0xjMujQrxOcqQhx"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/malikgen~airbnb-listing-details/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-malikgen-airbnb-listing-details",
                "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/malikgen~airbnb-listing-details/runs": {
            "post": {
                "operationId": "runs-sync-malikgen-airbnb-listing-details",
                "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/malikgen~airbnb-listing-details/run-sync": {
            "post": {
                "operationId": "run-sync-malikgen-airbnb-listing-details",
                "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",
                "required": [
                    "listingUrls"
                ],
                "properties": {
                    "listingUrls": {
                        "title": "Airbnb room URLs",
                        "type": "array",
                        "description": "One or more Airbnb listing URLs (https://www.airbnb.com/rooms/<id>). Tip: get these in bulk from the companion 'Airbnb Search Scraper' actor — paste its `url` field values here.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "currency": {
                        "title": "Currency",
                        "enum": [
                            "USD",
                            "EUR",
                            "GBP",
                            "AUD",
                            "CAD",
                            "AED",
                            "INR",
                            "SGD",
                            "BRL",
                            "MXN",
                            "JPY"
                        ],
                        "type": "string",
                        "description": "Currency code for any price fields (ISO 4217).",
                        "default": "USD"
                    },
                    "checkIn": {
                        "title": "Check-in date (optional)",
                        "type": "string",
                        "description": "Optional check-in date (YYYY-MM-DD) — set both check-in and check-out to retrieve exact, dated pricing for the stay."
                    },
                    "checkOut": {
                        "title": "Check-out date (optional)",
                        "type": "string",
                        "description": "Optional check-out date (YYYY-MM-DD)."
                    },
                    "webhookUrl": {
                        "title": "Webhook URL (optional)",
                        "type": "string",
                        "description": "If set, the actor POSTs the full result set to this URL when the run finishes (great for n8n / Make / Zapier)."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Airbnb requires residential proxies. Leave the default (Apify Residential, US) for best reliability.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
