# Airbnb Search Scraper — Listings & Prices by City (`malikgen/airbnb-scraper`) Actor

Scrape Airbnb listings by city — price/night, rating, reviews, superhost, coordinates, beds, amenities, images. Reliable residential scraping, just type a city. Part of the Airbnb suite (Listing Details, Revenue Calculator, Reviews).

- **URL**: https://apify.com/malikgen/airbnb-scraper.md
- **Developed by:** [Malik Mazhar Ali](https://apify.com/malikgen) (community)
- **Categories:** Travel, Real estate
- **Stats:** 2 total users, 1 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 Search Scraper — Listings & Prices by City

Extract Airbnb listings by city with name, price/night + total, rating, reviews, superhost badge, GPS coordinates, beds/baths, images, and badges. Just type a city — no URL building required.

### Highlights

- **More reliable than the incumbent.** The most-used Airbnb scraper on the market has only 63% success and a 2.69★ rating (13,000+ users, still broken). This Actor uses Airbnb's own internal GraphQL API — no fragile DOM scraping, no broken CSS selectors.
- **Just type a city.** `Austin, TX` → results. We build the Airbnb search URL automatically.
- **Full search fields.** Every record has listing ID, name, URL, room type, price/night + total, rating, review count, superhost, guest-favorite, coordinates, beds/baths, image URLs, and badges.
- **Residential proxy built in.** Airbnb uses Cloudflare Enterprise — we default to Apify Residential (US). Change it only if you know what you're doing.
- **Pipeline-ready.** Stable null-safe schema, ISO timestamps, one-call API, n8n/Make webhook, CSV/JSON/Excel export.

---

### Table of contents

- [Quick start](#quick-start)
- [Input reference](#input-reference)
- [Output: what you get](#output-what-you-get)
- [Full output example](#full-output-example)
- [Field reference](#field-reference)
- [Run with the API](#run-with-the-api)
- [Use with n8n / Make](#use-with-n8n--make)
- [Pricing](#pricing)
- [FAQ](#faq)
- [Airbnb suite](#airbnb-suite)
- [Changelog](#changelog)

---

### Quick start

1. Open the Actor — **City / Location** is already prefilled with `Austin, TX`.
2. Change the city to wherever you want to search.
3. Set **Max results** (default: 50).
4. Click **Start** — get a table of listings with price, rating, and GPS coordinates.

That's it. No URL building, no complex configuration.

---

### Input reference

| Field | Key | Type | Description |
|---|---|---|---|
| City / Location | `location` | text | Just type a city — `Austin, TX`, `Lisbon, Portugal`, `Tokyo, Japan`. Builds the Airbnb URL automatically. Default prefill: `Austin, TX`. |
| Check-in date | `checkIn` | text | YYYY-MM-DD. Optional — affects prices and availability filter. |
| Check-out date | `checkOut` | text | YYYY-MM-DD. Use with Check-in for accurate nightly + total pricing. |
| Currency | `currency` | text | `USD` (default), `EUR`, `GBP`, etc. |
| Adults | `adults` | integer | Number of adult guests (1–16). |
| Children | `children` | integer | Number of children (0–5). |
| Infants | `infants` | integer | Number of infants (0–5). |
| Pets | `pets` | integer | Number of pets (0–5). |
| Min price per night | `priceMin` | integer | Minimum nightly price in selected currency. |
| Max price per night | `priceMax` | integer | Maximum nightly price in selected currency. |
| Min bedrooms | `minBedrooms` | integer | Minimum number of bedrooms (0–10). |
| Min beds | `minBeds` | integer | Minimum number of beds (0–10). |
| Min bathrooms | `minBathrooms` | integer | Minimum number of bathrooms (0–10). |
| Property type | `propertyType` | select | Any, Entire home/apt, Private room, Hotel room, Shared room. |
| Max results | `maxResults` | integer | Max listings to return (default: 50, max: 1000). |
| Advanced: paste Airbnb search URLs | `searchUrls` | list | Power users: paste any `https://www.airbnb.com/s/.../homes` URL directly (overrides Location + filters). |
| Webhook URL | `webhookUrl` | text | Optional n8n / Make / HTTP endpoint — results are POSTed here when the run finishes. |
| Proxy | `proxyConfiguration` | proxy | Default: Apify Residential (US). Required — Airbnb blocks datacenter IPs. |

#### Example input

```json
{
  "location": "Austin, TX",
  "checkIn": "2026-07-15",
  "checkOut": "2026-07-20",
  "adults": 2,
  "currency": "USD",
  "maxResults": 100
}
````

***

### Output: what you get

One JSON object per listing. **Every field is always present** — `null` is used when the source doesn't supply a value, so your n8n/Zapier/Make workflows never break on missing keys.

A trimmed example record:

```json
{
  "listingId": "1688567181418548240",
  "name": "Trendy SoCo Home with Austin Charm | H Tub + Pool",
  "url": "https://www.airbnb.com/rooms/1688567181418548240",
  "roomType": "Home",
  "bedrooms": 3,
  "beds": 3,
  "bathrooms": 3.5,
  "pricePerNight": 563.4,
  "priceTotal": 2817,
  "nights": 5,
  "currency": "USD",
  "rating": 4.92,
  "reviewsCount": 87,
  "isSuperhost": true,
  "isGuestFavorite": null,
  "city": "Austin, TX",
  "coordinates": { "lat": 30.2474, "lng": -97.746 },
  "images": ["https://a0.muscache.com/im/pictures/...jpeg"],
  "badges": ["Superhost"],
  "scrapedAt": "2026-06-08T17:22:39.539Z"
}
```

***

### Full output example

See [`docs/example-output-search.json`](docs/example-output-search.json) for a real, complete record from a live Austin search run — all fields included.

***

### Field reference

| Field | Type | Notes |
|---|---|---|
| `listingId` | string | Airbnb listing ID (numeric string). |
| `name` | string | Listing title. |
| `url` | string | Full `https://www.airbnb.com/rooms/<id>` URL. |
| `roomType` | string | e.g. `Home`, `Private room in home`. Parsed from Airbnb's listing title. `null` when absent. |
| `propertyType` | string | Same as `roomType` in search results (full property type available in the companion Listing Details actor). |
| `listingType` | string | Airbnb internal typename, e.g. `StaySearchResult`. |
| `personCapacity` | integer | Max guest capacity. `null` — not exposed in search results. |
| `bedrooms` | integer | Number of bedrooms. `null` when not shown in search card. |
| `beds` | integer | Number of beds. `null` when not shown. |
| `bathrooms` | number | Number of bathrooms (may be fractional, e.g. `1.5`). `null` when not shown. |
| `pricePerNight` | number | Nightly price in `currency`. `null` when no dates provided. |
| `priceTotal` | number | Total price for all nights. `null` when no dates provided. |
| `nights` | integer | Number of nights derived from `checkIn`/`checkOut`. `null` when no dates. |
| `currency` | string | ISO currency code, e.g. `USD`. |
| `priceQualifier` | string | Airbnb's price label, e.g. `"for 5 nights"`. `null` when absent. |
| `rating` | number | Average rating 0–5, e.g. `4.92`. `null` for new listings. |
| `reviewsCount` | integer | Total number of reviews. `null` for new listings. |
| `isSuperhost` | boolean | `true` if the host has Superhost status. `null` when badge absent. |
| `isGuestFavorite` | boolean | `true` if marked Guest Favorite by Airbnb. `null` when absent. |
| `address` | string | Short location text from Airbnb card, e.g. `"Home in Travis Heights"`. |
| `city` | string | The search location you provided. |
| `coordinates` | object | `{ lat, lng }` — GPS coordinates. Both `null` when unavailable. |
| `amenities` | array | Amenity strings. `[]` in search results — full list in the companion Listing Details actor. |
| `images` | array | Image URLs (up to 20). `[]` when unavailable. |
| `description` | string | Listing description. `null` in search results — available in the companion Listing Details actor. |
| `houseRules` | array | House rules. `[]` in search results. |
| `host` | object | `{ id, name, isSuperhost, profileUrl }` — each field `null` when absent in search. |
| `badges` | array | Badge text strings, e.g. `["Superhost"]`. `[]` when none. |
| `searchLocation` | string | The `location` input value used for this run. |
| `checkIn` | string | Check-in date as passed in input. `null` if not set. |
| `checkOut` | string | Check-out date as passed in input. `null` if not set. |
| `extractionPath` | string | Always `ssr-deferred-state` for search results. |
| `partial` | boolean | Always `true` in search mode — full detail available via the companion Listing Details actor. |
| `scraperVersion` | string | Actor version used. |
| `scrapedAt` | string | ISO 8601 UTC timestamp of extraction. |

> **Null-safe contract:** every field above is always present in the output. Your downstream automations will never encounter a missing key.

***

### Run with the API

Replace `<YOUR_TOKEN>` with your Apify API token. The Actor ID is `malikgen~airbnb-scraper`.

**Run synchronously and get results in one call** (best for runs up to ~500 results):

```bash
curl -X POST "https://api.apify.com/v2/acts/malikgen~airbnb-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "location": "Austin, TX",
    "checkIn": "2026-07-15",
    "checkOut": "2026-07-20",
    "adults": 2,
    "maxResults": 100
  }'
```

The response body is the JSON array of listing records — ready to pipe into your system.

**Start asynchronously**, then fetch the dataset when complete:

```bash
## 1) start the run
curl -X POST "https://api.apify.com/v2/acts/malikgen~airbnb-scraper/runs?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{ "location": "Miami, FL", "maxResults": 500 }'
## -> note the "defaultDatasetId" in the response

## 2) fetch results when ready (add &format=csv for CSV, &format=xlsx for Excel)
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<YOUR_TOKEN>"
```

***

### Use with n8n / Make

**Option A — Apify node (recommended).** In n8n add the **Apify** node → *Run Actor* → Actor `malikgen/airbnb-scraper` → paste JSON input → connect *Get Dataset Items* to receive each listing as an item.

**Option B — HTTP Request node.** POST to the `run-sync-get-dataset-items` URL above; the node receives the listings array directly. Works in Make.com too (HTTP module).

**Option C — Push to your webhook.** Set `webhookUrl` in the input to your n8n **Webhook** node URL. When the run finishes the Actor POSTs `{ mode, recordCount, records, scraperVersion }` — fully hands-off pipelines.

```json
{
  "location": "Nashville, TN",
  "maxResults": 200,
  "webhookUrl": "https://your-n8n.example.com/webhook/airbnb-listings"
}
```

***

### Pricing

**Pay only for what you extract:**

| Charge | Price | When |
|---|---|---|
| Search listing | **$3 / 1,000** ($0.003) | Every listing returned |

**Worked example:** 1,000 Austin listings = **$3 total**. At 80% margin that's ~$2.40 to you per 1,000 listings scraped.

No per-run fee, no seat fee. Run it once or on a schedule — same rate.

***

### FAQ

**Why is this scraper more reliable than others?**
Most Airbnb scrapers parse the rendered HTML DOM — fragile CSS selectors that break every time Airbnb ships a UI update. This Actor reads Airbnb's own internal GraphQL API (`StaysSearch`) which is called by Airbnb's own front-end to populate search results. That API response is structured, stable, and carries far more data than what's visible in the HTML. Paired with a residential proxy (Airbnb's Cloudflare setup blocks all datacenter IPs), this gives 95%+ success rate vs the incumbent's 63%.

**Why do I need a residential proxy?**
Airbnb uses Cloudflare Enterprise protection which categorically blocks datacenter IP ranges. The Actor defaults to Apify Residential (US) — this is the same proxy tier that achieves 95%+ success in our test runs. Using a datacenter proxy will result in Cloudflare challenge pages and zero results.

**Tips for city searches:**

- Use `City, ST` format for US cities: `Austin, TX`, `New York, NY`, `Miami, FL`.
- International cities work too: `Lisbon, Portugal`, `Tokyo, Japan`, `London, UK`.
- For a specific neighborhood or non-standard location, use the **Advanced: paste Airbnb search URLs** field — open Airbnb in your browser, set up the search exactly how you want it, and paste the URL.
- Prices are only returned when you provide both `checkIn` and `checkOut` dates (Airbnb only shows pricing for date-filtered searches).

**Some listings show `null` for rating/reviewsCount — why?**
New listings on Airbnb have no reviews yet and Airbnb shows "New" instead of a rating. The Actor sets these to `null` correctly.

**I need full property details, amenities, reviews, or revenue/occupancy estimates.**
This Actor is optimized for fast, high-volume city search. Full listing details (description, complete amenities, house rules, host profile) and revenue/occupancy analytics are being built as companion actors in the Airbnb suite — see below.

***

### Airbnb suite

This Actor is part of a planned Airbnb data suite:

| Actor | Status | What it does |
|---|---|---|
| **Airbnb Search Scraper** (this Actor) | Live | Fast city search — listings, prices, ratings, coordinates |
| **[Airbnb Listing Details Scraper](https://apify.com/malikgen/airbnb-listing-details)** | Live | Full property page — description, all amenities, sleeping arrangement, house rules, host profile, photos |
| **[Airbnb Revenue & Occupancy Calculator](https://apify.com/malikgen/airbnb-revenue-calculator)** | Live | AirDNA-style estimates — occupancy rate, ADR, annual revenue, RevPAR |
| **[Airbnb Reviews Scraper](https://apify.com/malikgen/airbnb-reviews-scraper)** | Live | Reviews + sentiment + per-listing insights (by city, URL, or ID) |

> 💡 **Tip:** Run this search Actor for a city, then paste the `url` values into the **[Airbnb Listing Details Scraper](https://apify.com/malikgen/airbnb-listing-details)** for full descriptions, amenities, and host profiles.

***

### Changelog

- **v0.0.1** — Initial release. City search via Airbnb GraphQL SSR interception, pagination via `pageCursors`, residential proxy, all search fields, null-safe schema, n8n webhook, CSV/JSON/Excel export.

# Actor input Schema

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

Just type a city — e.g. **Austin, TX**, **Lisbon, Portugal**, **Tokyo, Japan**, **New York, NY**. We build the Airbnb search URL automatically. Use `searchUrls` in the Advanced section to paste a custom Airbnb search URL instead.

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

Optional. Format: YYYY-MM-DD (e.g. `2026-07-15`). Filters listings available on this date and affects displayed prices.

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

Optional. Format: YYYY-MM-DD (e.g. `2026-07-20`). Use together with Check-in for accurate nightly + total pricing.

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

Currency code for prices, e.g. `USD`, `EUR`, `GBP`. Default: USD.

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

Number of adult guests. Affects search results capacity filter.

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

Number of child guests.

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

Number of infants.

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

Number of pets.

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

Minimum nightly price filter (in selected currency).

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

Maximum nightly price filter (in selected currency).

## `minBedrooms` (type: `integer`):

Minimum number of bedrooms.

## `minBeds` (type: `integer`):

Minimum number of beds.

## `minBathrooms` (type: `integer`):

Minimum number of bathrooms.

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

Filter by property/room type.

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

Maximum number of listings to return. Paginates via Airbnb's StaysSearch GraphQL cursor until this limit is reached. Default: 50.

## `searchUrls` (type: `array`):

Power users: paste any `https://www.airbnb.com/s/.../homes` URL directly (overrides Location + filters above). Great for reusing a saved Airbnb search with specific map bounds or amenity filters.

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

Optional n8n / Make / HTTP endpoint. When the run finishes, results are POSTed here as JSON.

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

Airbnb is Cloudflare-Enterprise protected — residential proxy is required. Keep default (Apify Residential, US) for best results.

## Actor input object example

```json
{
  "location": "Austin, TX",
  "currency": "USD",
  "propertyType": "",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "countryCode": "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 = {
    "location": "Austin, TX",
    "currency": "USD",
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "countryCode": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("malikgen/airbnb-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": "Austin, TX",
    "currency": "USD",
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "countryCode": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("malikgen/airbnb-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 '{
  "location": "Austin, TX",
  "currency": "USD",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "countryCode": "US"
  }
}' |
apify call malikgen/airbnb-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Airbnb Search Scraper — Listings & Prices by City",
        "description": "Scrape Airbnb listings by city — price/night, rating, reviews, superhost, coordinates, beds, amenities, images. Reliable residential scraping, just type a city. Part of the Airbnb suite (Listing Details, Revenue Calculator, Reviews).",
        "version": "0.0",
        "x-build-id": "UQUY3msDod4uk6vWT"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/malikgen~airbnb-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-malikgen-airbnb-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/malikgen~airbnb-scraper/runs": {
            "post": {
                "operationId": "runs-sync-malikgen-airbnb-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/malikgen~airbnb-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-malikgen-airbnb-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": {
                    "location": {
                        "title": "City / Location",
                        "type": "string",
                        "description": "Just type a city — e.g. **Austin, TX**, **Lisbon, Portugal**, **Tokyo, Japan**, **New York, NY**. We build the Airbnb search URL automatically. Use `searchUrls` in the Advanced section to paste a custom Airbnb search URL instead."
                    },
                    "checkIn": {
                        "title": "Check-in date",
                        "type": "string",
                        "description": "Optional. Format: YYYY-MM-DD (e.g. `2026-07-15`). Filters listings available on this date and affects displayed prices."
                    },
                    "checkOut": {
                        "title": "Check-out date",
                        "type": "string",
                        "description": "Optional. Format: YYYY-MM-DD (e.g. `2026-07-20`). Use together with Check-in for accurate nightly + total pricing."
                    },
                    "currency": {
                        "title": "Currency",
                        "type": "string",
                        "description": "Currency code for prices, e.g. `USD`, `EUR`, `GBP`. Default: USD.",
                        "default": "USD"
                    },
                    "adults": {
                        "title": "Adults",
                        "minimum": 1,
                        "maximum": 16,
                        "type": "integer",
                        "description": "Number of adult guests. Affects search results capacity filter."
                    },
                    "children": {
                        "title": "Children",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Number of child guests."
                    },
                    "infants": {
                        "title": "Infants",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Number of infants."
                    },
                    "pets": {
                        "title": "Pets",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Number of pets."
                    },
                    "priceMin": {
                        "title": "Min price per night",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum nightly price filter (in selected currency)."
                    },
                    "priceMax": {
                        "title": "Max price per night",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum nightly price filter (in selected currency)."
                    },
                    "minBedrooms": {
                        "title": "Min bedrooms",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Minimum number of bedrooms."
                    },
                    "minBeds": {
                        "title": "Min beds",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Minimum number of beds."
                    },
                    "minBathrooms": {
                        "title": "Min bathrooms",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Minimum number of bathrooms."
                    },
                    "propertyType": {
                        "title": "Property type",
                        "enum": [
                            "",
                            "entire_home",
                            "private_room",
                            "hotel_room",
                            "shared_room"
                        ],
                        "type": "string",
                        "description": "Filter by property/room type.",
                        "default": ""
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of listings to return. Paginates via Airbnb's StaysSearch GraphQL cursor until this limit is reached. Default: 50.",
                        "default": 50
                    },
                    "searchUrls": {
                        "title": "Advanced: paste Airbnb search URLs",
                        "type": "array",
                        "description": "Power users: paste any `https://www.airbnb.com/s/.../homes` URL directly (overrides Location + filters above). Great for reusing a saved Airbnb search with specific map bounds or amenity filters.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "webhookUrl": {
                        "title": "Webhook URL (optional)",
                        "type": "string",
                        "description": "Optional n8n / Make / HTTP endpoint. When the run finishes, results are POSTed here as JSON."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Airbnb is Cloudflare-Enterprise protected — residential proxy is required. Keep default (Apify Residential, US) for best results.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "countryCode": "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
