# Airbnb Listings Search Scraper (`captainhandsome/airbnb-listings-search`) Actor

Extract public Airbnb listing cards by destination with URLs, descriptions and displayed prices.

- **URL**: https://apify.com/captainhandsome/airbnb-listings-search.md
- **Developed by:** [Joseph McRell](https://apify.com/captainhandsome) (community)
- **Categories:** Travel, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Airbnb Listings Search Scraper - Prices & URLs

Search public Airbnb listing cards by destination and export structured listing titles, room URLs, card descriptions, and displayed price text. Set hard page and result limits to keep a human or AI-agent call predictable.

### What data can I extract?

- Public listing-card title
- Canonical Airbnb room URL
- Displayed room/date context or card description
- Displayed nightly and/or total price text

### Input example

```json
{
  "location": "Austin, Texas",
  "max_items": 20,
  "max_pages": 1
}
```

### Output example

```json
{
  "title": "Apartment in Austin",
  "url": "https://www.airbnb.com/rooms/123456",
  "description": "1 bed - Guest favorite",
  "price": "$142 night - $426 total"
}
```

Output can be downloaded from the default Apify dataset in JSON, CSV, Excel, XML, or RSS format.

### Common use cases

- Discover public listing URLs by destination
- Compare displayed prices for a defined search context
- Build bounded seed datasets for travel-market research
- Supply current public listing-card context to AI agents

### Use with AI agents and MCP

Example agent intent:

> Find up to 50 public Airbnb listing cards in Nashville and return each title, listing URL, description, and displayed price.

```json
{
  "location": "Nashville, Tennessee",
  "max_items": 50,
  "max_pages": 3
}
```

### Pricing and cost control

The suggested launch price is **$0.006 per result**. Output charges are approximately $0.60 for 100 listings or $6.00 for 1,000, plus any platform charges shown by Apify. The live Store pricing is authoritative. `max_items` and `max_pages` bound each run.

### Reliability

The Actor renders public Airbnb search pages, continues across bounded result pages, deduplicates canonical listing URLs, validates required fields, and is covered by fresh-context canaries from Apify infrastructure.

### Limitations and responsible use

- Extracts public search-card data only; it does not log in or bypass access controls.
- Price text depends on the source's selected dates, guest context, fees, locale, and experiments.
- This version does not promise full property-detail, host, availability-calendar, or normalized fee fields.
- Results can vary by location and upstream personalization.
- Use the data in accordance with applicable law and platform terms.

### FAQ

#### Can I export Airbnb listings to CSV?

Yes. Run the Actor and export its default dataset as CSV or Excel.

#### Does the Actor return normalized nightly and total prices?

Not yet. It returns source display text in `price`; consumers should not assume one currency or fee model.

#### Can I scrape several destinations in one call?

This version accepts one destination per run. Create separate Actor tasks for predictable per-market runs.

See [CHANGELOG.md](CHANGELOG.md) for maintained schema changes.

# Actor input Schema

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

City, region, or country to search on Airbnb.

## `max_items` (type: `integer`):

Hard maximum number of unique listing records returned and billed.

## `max_pages` (type: `integer`):

Maximum number of Airbnb search-result pages to visit.

## Actor input object example

```json
{
  "location": "Austin, Texas",
  "max_items": 20,
  "max_pages": 1
}
```

# Actor output Schema

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

Extracted records, one object per row on the source page.

# 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, Texas"
};

// Run the Actor and wait for it to finish
const run = await client.actor("captainhandsome/airbnb-listings-search").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, Texas" }

# Run the Actor and wait for it to finish
run = client.actor("captainhandsome/airbnb-listings-search").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "location": "Austin, Texas"
}' |
apify call captainhandsome/airbnb-listings-search --silent --output-dataset

```

## MCP server setup

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

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Orq0qDWptSkxhQHBh/builds/POyOETP3yPjRRhg7Z/openapi.json
