# Airbnb Listings & Prices Scraper (`zinin/airbnb-listings-prices-scraper`) Actor

Get public Airbnb listings and displayed stay totals for your destination, dates, and guests. First-page results with source links.

- **URL**: https://apify.com/zinin/airbnb-listings-prices-scraper.md
- **Developed by:** [Tim Zinin](https://apify.com/zinin) (community)
- **Categories:** Travel, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.80 / 1,000 dated listing delivereds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 & Prices Scraper

Use this actor when you need a current, date-specific view of public Airbnb search results for a destination. Give it a location, check-in and check-out dates, party size, currency, and a result cap. It reads the public Airbnb search response and returns useful listing cards with the exact price text that Airbnb presents for that selected stay. This is useful for a travel analyst comparing a defined trip, a concierge building a shortlist, or a market researcher taking repeat price snapshots.

The smallest useful input is:

```json
{"location":"Tbilisi, Georgia","checkIn":"2026-10-15","checkOut":"2026-10-17","adults":2,"currency":"USD","maxItems":20}
```

The pay-per-result price is **$0.004** per delivered listing, with **$0.0036 / $0.0032 / $0.0028** tier prices for Bronze, Silver, and Gold/Platinum/Diamond plans; there is no start fee and no diagnostic charge. A 20-listing comparison at the base price would cost up to **$0.08**. Set Apify’s Max total charge to cap delivery before the source is requested. If dates are omitted, the actor selects a rolling two-night stay beginning 14 days after the run date.

```json
{"listingId":"40176393","listingURL":"https://www.airbnb.com/rooms/40176393","listingType":"Condo in Tbilisi","price":"$181","priceLabel":"$181 for 2 nights","priceBasis":"dated_stay_total","checkIn":"2026-10-15","checkOut":"2026-10-17","requestedCurrency":"USD","sourceCurrency":null}
```

`price` is deliberately the response’s `primaryLine.price` display for the selected dates. `requestedCurrency` records the requested search setting; `sourceCurrency` remains null unless the source explicitly confirms it. The actor does not derive a nightly price, taxes, cleaning fees, availability, or a booking guarantee. Some cards omit coordinates, photos, ratings, names, or this primary display-price field; nullable fields remain `null`, and rows without a source-labelled primary stay total are excluded. Results cover the first public search response only; pagination cursors are reported in `OUTPUT` but are not fetched.

![Airbnb dated stay totals](https://api.apify.com/v2/key-value-stores/IwI7VoxszQjT6v69X/records/airbnb-listings-prices-scraper-f49177ff01990115-readme-hero.webp?signature=MMEYqpjG2CcEd0vlEnuf)

![Workflow from selected location and dates to listing totals](https://api.apify.com/v2/key-value-stores/IwI7VoxszQjT6v69X/records/airbnb-listings-prices-scraper-295fa61aa9478819-readme-workflow.webp?signature=Ovj6WiibENkIIjkRKq38)

### Fields

Dataset rows include listing ID, listing type and name, rating text, displayed total and source price label, selected dates, adults, currency, optional coordinates, up to five public image URLs, source URL, and observation timestamp. `OUTPUT` records the input scope, source card count, page coverage, and a bounded snapshot.

### Errors and repeat use

The actor rejects non-HTTPS and redirected sources, unexpected response structures, invalid dates, unsupported currency, and a charge cap that cannot fund a result. Repeat with the same dates to observe a new public snapshot, or change dates and guests to compare stay totals. Airbnb can change public response structure or restrict a location, in which case the run records a bounded source error instead of fabricating output.

# Actor input Schema

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

Destination text passed to Airbnb public search.

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

YYYY-MM-DD; defaults to 14 days from run date.

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

YYYY-MM-DD; defaults to two nights after check-in.

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

Number of adult guests sent to the search.

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

Requested Airbnb search currency; not asserted as source-confirmed row currency.

## `maxItems` (type: `integer`):

Maximum dated listing rows; set Max total charge to cap spend.

## Actor input object example

```json
{
  "location": "Tbilisi, Georgia",
  "adults": 2,
  "currency": "USD",
  "maxItems": 20
}
```

# Actor output Schema

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

One billable public Airbnb listing with a source-labelled selected-stay total.

## `summary` (type: `string`):

Input scope, first-page coverage, delivery state, and a bounded row snapshot.

# 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": "Tbilisi, Georgia",
    "adults": 2,
    "currency": "USD",
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("zinin/airbnb-listings-prices-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": "Tbilisi, Georgia",
    "adults": 2,
    "currency": "USD",
    "maxItems": 20,
}

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

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

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

```

## CLI example

```bash
echo '{
  "location": "Tbilisi, Georgia",
  "adults": 2,
  "currency": "USD",
  "maxItems": 20
}' |
apify call zinin/airbnb-listings-prices-scraper --silent --output-dataset

```

## MCP server setup

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

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

## OpenAPI specification

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