# Airbnb Experiences Scraper — Tours, Hosts & Availability (`sian.agency/airbnb-experiences-scraper`) Actor

Airbnb Experiences scraper and API. Search tours and activities by destination with prices, ratings and themes; extract experience details, per-date availability, group caps and full host profiles (Superhost, tenure, ratings). Structured JSON for travel market intel and host lead-gen.

- **URL**: https://apify.com/sian.agency/airbnb-experiences-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Travel, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 experience extracteds

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/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 Experiences Scraper — Tours, Hosts & Availability 🚀

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Airbnb Scraper + STR KPIs](https://img.shields.io/badge/Store-Airbnb%20Scraper%20%2B%20STR%20KPIs-FF5A5F)](https://apify.com/sian.agency/airbnb-property-scraper?fpr=sian) [![Booking.com Scraper](https://img.shields.io/badge/Store-Booking.com%20Scraper-003580)](https://apify.com/sian.agency/booking-com-scraper?fpr=sian) [![Tripadvisor Hotel Scraper](https://img.shields.io/badge/Store-Tripadvisor%20Hotel%20Scraper-34E0A1)](https://apify.com/sian.agency/tripadvisor-hotel-scraper?fpr=sian)

#### 🎉 The only Airbnb Experiences scraper with per-date availability calendars AND structured host dossiers
##### Built for tour operators, travel researchers, and host lead-gen teams

---

### 📋 Overview

**Turn any destination into a complete tours-and-activities dataset** — this actor scrapes Airbnb Experiences search (40 rich rows per page with per-guest prices and tax breakdown), full experience detail dossiers, per-date availability windows, and structured host profiles.

**Why professionals choose us:**
- ✅ **3 modes in one actor**: destination search, experience details, host profiles — one clean dataset per run
- 📅 **Availability intelligence no one else has**: per-date slots, spots remaining, group-size caps, guest age rules
- 🧑‍💼 **Structured host dossiers**: Superhost status, hosting tenure, host rating stats, past trips, verification badge, listing portfolios
- 💰 **Transparent per-result pricing**: pay only for rows delivered — search rows from fractions of a cent
- 🧾 **Tax-transparent pricing data**: per-guest base price AND taxes split out on every search row
- ✨ **NEW**: preview reviews embedded in every detail dossier — reviewer names, ratings, and comments

---

### ✨ Features

- 🔍 **Destination search**: free-text destinations ("Austin, TX", "Lisbon, Portugal"), auto-paginated 40 rows/page
- 🎨 **8 search filters**: experience themes (19 categories), traveler type, price range, duration, time of day, host languages, accessibility
- 🎟️ **Detail dossiers**: host bio, host highlight, meeting point, coordinates, rating stats, duration, preview reviews
- 📅 **Availability add-on**: per-date offering slots with spots remaining, group caps, guest age requirements, market timezone
- 🧑‍💼 **Host profiles**: works for ANY Airbnb host — Superhost flag, tenure, ratings, interests, recognitions, portfolio counts
- 🔗 **Flexible inputs**: paste experience URLs, numeric IDs, or IDs harvested from a previous run — the actor normalizes them all
- 📊 **Market KPI report**: price/rating/duration distributions and theme mix in a beautiful HTML summary
- 🔁 **Automatic deduplication**: unique experiences and hosts only, across pages and inputs
- 📤 **Export anywhere**: JSON, CSV, Excel via the Apify dataset

---

### 🎬 Quick Start

Pick a mode, provide a destination (or IDs), and press Start. Results land in the dataset within seconds.

```bash
curl -X POST https://api.apify.com/v2/acts/sian.agency~airbnb-experiences-scraper/runs?token=YOUR_TOKEN \
-d '{"mode": "search", "destination": "Austin, TX"}'
````

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose a mode

`search` for destination scans, `details` for full dossiers per experience, `host` for host profiles.

#### Step 2: Provide your input

A destination string, experience IDs/URLs, or host IDs/profile URLs.

#### Step 3: Run and export

Press Start, watch rows stream in, export as JSON/CSV/Excel.

**That's it! In under a minute, you'll have:**

- Priced, rated, deduplicated experience rows
- Optional per-date availability calendars
- Structured host dossiers ready for your CRM

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| mode | string | No | `search` (default), `details`, or `host` |
| destination | string | No | Destination for search mode (e.g. "Austin, TX") |
| destinations | array | No | Bulk destinations (PAID) |
| checkIn / checkOut | string | No | ISO dates to activate date filtering |
| experienceType | string | No | Comma-separated themes (`food,tasting,outdoor`, 19 values) |
| travelerType | string | No | `Kids, Big Groups, Solo Travellers, Date Night` |
| pricePerGuestMin / pricePerGuestMax | integer | No | Per-guest price band |
| minDuration / maxDuration | integer | No | Duration band in minutes (30–180) |
| timeOfDay | string | No | `morning`, `afternoon`, `evening` |
| hostLanguages | string | No | Comma-separated languages (`english,spanish`) |
| accessibilityFeatures | string | No | e.g. `Step-free access` |
| maxResultsPerQuery | integer | No | Cap per destination (default 40) |
| experienceIds | array | No | Details mode: IDs or URLs |
| includeAvailability | boolean | No | Details mode add-on (PAID) |
| availabilityStartDate / availabilityEndDate | string | No | Availability window (default: next 30 days, max 90) |
| hostIds | array | No | Host mode: user IDs or profile URLs |

**Search example:**

```json
{
  "mode": "search",
  "destination": "Austin, TX",
  "checkIn": "2026-08-01",
  "checkOut": "2026-08-05",
  "experienceType": "food,tasting"
}
```

**Details with availability:**

```json
{
  "mode": "details",
  "experienceIds": ["https://www.airbnb.com/experiences/175656"],
  "includeAvailability": true
}
```

**Host profiles:**

```json
{
  "mode": "host",
  "hostIds": ["https://www.airbnb.com/users/show/1462708607514564035"]
}
```

***

### 📤 Output

Results are saved to the Apify dataset with **50+ fields** including:

| Field | Type | Description |
|-------|------|-------------|
| experienceName | string | Experience display name |
| pricePerGuest | number | Headline "from" price per guest |
| basePricePerGuest / taxesPerGuest | number | Tax-transparent price breakdown |
| rating / reviewCount | number | Rating stats |
| durationMinutes | number | Published duration |
| badges | array | Search badges (e.g. Popular) |
| experienceUrl | string | Direct Airbnb Experience link |
| availability | object | Per-date slots, group caps, guest rules (add-on) |
| hostName / isSuperhost | string / boolean | Host identity and Superhost status |
| timeAsHostYears / hostRatingAverage | number | Host tenure and rating |
| stayListingsCount / experienceListingsCount | number | Host portfolio counts |

**Search row example:**

```json
{
  "rowType": "experience",
  "experienceId": "175656",
  "experienceName": "Epic Downtown Sunset Kayak w 1 Million Bats",
  "pricePerGuest": 60,
  "basePricePerGuest": 55,
  "taxesPerGuest": 4.54,
  "rating": 4.93,
  "reviewCount": 2977,
  "durationMinutes": 135,
  "badges": ["Popular"],
  "experienceUrl": "https://www.airbnb.com/experiences/175656",
  "searchDestination": "Austin, TX"
}
```

***

### 💼 Use Cases & Examples

#### 1. Tour Operator Competitive Intelligence

**Tour operators benchmark every competing experience in their city.**

**Input:** Your destination + theme filters
**Output:** Prices with tax breakdown, ratings, durations, badges for the whole market
**Use:** Price your tours against the live market, spot under-served themes

#### 2. Capacity & Sell-Out Tracking

**Revenue managers monitor availability for high-demand experiences.**

**Input:** Experience IDs + `includeAvailability: true`
**Output:** Per-date slots with spots remaining and group caps
**Use:** Detect sell-outs, track booking velocity, time your promotions

#### 3. Host Lead Generation

**B2B teams build lists of experience and stay hosts.**

**Input:** Host IDs or profile URLs
**Output:** Superhost status, tenure, ratings, portfolio counts, verification
**Use:** Qualify hosts for partnerships, tools, or rival-platform recruiting

#### 4. Travel Market Research

**Analysts quantify the experiences economy by destination.**

**Input:** A list of destinations (PAID bulk mode)
**Output:** Full supply snapshot + HTML KPI report (price/rating/duration distributions)
**Use:** Market sizing, destination comparisons, investor decks

#### 5. Itinerary & Trip-Planning Apps

**Product teams feed live experience data into travel apps.**

**Input:** Destination searches on a schedule
**Output:** Names, bylines, photos, prices, booking dates as clean JSON
**Use:** Power "things to do" features without building scrapers

#### 6. Academic & Gig-Economy Research

**Researchers study pricing and reputation in peer-to-peer tourism.**

**Input:** Destinations + detail dossiers
**Output:** Ratings, review samples, host tenure at scale
**Use:** Publishable datasets on the experiences marketplace

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/airbnb-experiences-scraper').call({
  mode: 'search',
  destination: 'Austin, TX'
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/airbnb-experiences-scraper').call(
    run_input={'mode': 'search', 'destination': 'Austin, TX'}
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item)
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~airbnb-experiences-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"mode": "search", "destination": "Austin, TX"}'
```

#### Automation Workflows (Zapier / Make / n8n)

1. **Trigger**: Schedule (e.g. daily availability check)
2. **HTTP Request**: Call the actor API
3. **Process**: Handle JSON results
4. **Action**: Save to sheets, alert on sell-outs, sync to CRM

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **1 destination (25 experiences)** or **5 IDs** per run — full data quality
- No credit card required
- Perfect for testing and small projects

#### PAID Tier (Production Ready)

- **Unlimited** destinations, experiences and hosts per run
- Bulk destination scans + availability add-on unlocked
- Pay-per-result: only charged for rows actually delivered

💰 **Priced below the category median per search row** — with two data surfaces (availability calendars, host dossiers) no other actor offers at any price.

🔗 [View current pricing](https://apify.com/sian.agency/airbnb-experiences-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: How many experiences can I scrape?**
A: FREE tier: 1 destination with up to 25 experiences (or 5 IDs). PAID tier: unlimited, auto-paginated.

**Q: Which ID formats does details mode accept?**
A: Numeric IDs (`175656`), full URLs (`https://www.airbnb.com/experiences/175656`), or the `activityListingId` field from a previous search run.

**Q: Can I get host contact details?**
A: The actor returns everything the host shares publicly — name, location, bio, ratings, portfolios, verification. It never extracts private emails or phone numbers.

**Q: What does the availability add-on include?**
A: Per-date offering slots with spots remaining, public/private group-size caps, guest age requirements, and the market timezone — for any window up to 90 days.

**Q: What output formats are available?**
A: JSON, CSV, Excel — export directly from the Apify dataset.

**Q: Is this legal?**
A: Yes — we only extract publicly available data. See the [legal section](#%EF%B8%8F-is-it-legal-to-scrape-data) below.

**Q: How long does a run take?**
A: Search pages return in seconds; a 40-experience destination scan typically completes in under a minute.

***

### 🐛 Troubleshooting

**Details mode returns "Experience not found"**

- Verify the numeric ID exists — open `https://www.airbnb.com/experiences/<id>` in a browser
- IDs harvested from search runs (the `activityListingId` field) always work
- You are never charged for not-found IDs

**Host mode returns mostly empty fields with `isPrivateProfile: true`**

- That user has a private profile — the platform withholds most fields; this is expected
- Host-context profiles (people who actively host) return the full dossier

**Search returns experiences from a nearby area**

- Destinations are resolved server-side; use more specific strings ("Austin, TX" instead of "Austin")

**Availability comes back empty for a valid experience**

- Some experiences pause bookings; try a wider window (up to 90 days) — no availability charge applies when empty

***

### ⚠️ Trademark Disclaimer

Airbnb® is a registered trademark of Airbnb, Inc. This actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by Airbnb, Inc.** in any way. All product names, logos, and brands are property of their respective owners and are used for identification purposes only.

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

***

### 🤝 Support

[![Telegram Support](https://img.shields.io/badge/Telegram-Support%20Group-0088cc?logo=telegram)](https://t.me/+vyh1sRE08sAxMGRi)

**Join our active support community**

- For issues or questions, open an issue in the actor's repository
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Actor input Schema

## `mode` (type: `string`):

🧭 **PICK ONE MODE PER RUN:**

- 🔍 **search** — find experiences by destination (40 per page, auto-paginated)
- 🎟️ **details** — full dossier per experience ID/URL (host bio, meeting point, preview reviews; optional availability calendar)
- 🧑‍💼 **host** — structured host profile per host ID/URL (Superhost, tenure, ratings, portfolios)

## `destination` (type: `string`):

📍 **DESTINATION SEARCH:** City, region or free-text destination — exactly what you would type into the Airbnb search box.

💡 **Examples:** `Austin, TX` · `Lisbon, Portugal` · `Tokyo`

🚀 **TIP:** Paid plans can pass multiple destinations via the *Bulk destinations* field below.

## `destinations` (type: `array`):

🚀 **BULK SEARCH:** Scan several destinations in one run.

💎 **TIER LIMITS:**

- **FREE users:** 1 destination per run (25 experiences max)
- **PAID users:** unlimited destinations

📝 Use *Bulk edit* to paste one destination per line.

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

📅 Filter experiences bookable from this date (ISO `YYYY-MM-DD`). Provide together with check-out to activate date filtering and per-date pricing.

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

📅 Filter experiences bookable until this date (ISO `YYYY-MM-DD`). Must be after check-in.

## `experienceType` (type: `string`):

🎨 Comma-separated experience themes.

✅ **Valid values:** `architecture, art, beauty, cooking, cultural, dining, flying, food, galleries, landmarks, museum, outdoor, performance, shopping, tasting, water, wellness, wildlife, workout`

💡 **Example:** `food,tasting,dining`

## `travelerType` (type: `string`):

🧳 Comma-separated audience filter.

✅ **Valid values:** `Kids, Big Groups, Solo Travellers, Date Night`

## `pricePerGuestMin` (type: `integer`):

💰 Only return experiences priced at or above this per-guest amount.

## `pricePerGuestMax` (type: `integer`):

💰 Only return experiences priced at or below this per-guest amount.

## `minDuration` (type: `integer`):

⏱ Only return experiences lasting at least this many minutes.

✅ **Valid values:** `30, 45, 60, 90, 120, 180`

## `maxDuration` (type: `integer`):

⏱ Only return experiences lasting at most this many minutes.

✅ **Valid values:** `45, 60, 90, 120, 180`

## `timeOfDay` (type: `string`):

🌅 Restrict to experiences starting in the morning (before 12 PM), afternoon (after 12 PM) or evening (after 5 PM).

## `hostLanguages` (type: `string`):

🗣 Comma-separated host language filter (lowercase).

✅ **Valid values include:** `english, french, german, italian, japanese, russian, spanish, arabic, chinese, hindi, portuguese, turkish, indonesian, dutch, korean, bengali, thai, punjabi, greek, sign, hebrew, polish, swedish, norwegian, finnish, czech, hungarian, ukrainian`

## `accessibilityFeatures` (type: `string`):

♿ Comma-separated accessibility filter.

✅ **Valid values:** `Step-free access, Sign language options, Designated sighted guide, No extreme sensory stimuli`

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

🧑 Number of adult guests used for pricing context.

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

🧒 Number of child guests used for pricing context.

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

👶 Number of infant guests used for pricing context.

## `maxResultsPerQuery` (type: `integer`):

🔢 Cap on rows returned per destination in search mode.

💎 **TIER LIMITS:**

- **FREE users:** 25 experiences per run
- **PAID users:** unlimited (auto-paginated, 40 per page)

## `experienceIds` (type: `array`):

🎟️ **DETAILS MODE INPUT:** Airbnb Experience IDs or URLs — one dossier row per entry.

✅ **Accepted forms:**

- Numeric ID: `175656`
- Full URL: `https://www.airbnb.com/experiences/175656`
- Listing ID from a previous search run (`activityListingId` field)

💎 **TIER LIMITS:** FREE 5 IDs · PAID unlimited.

## `includeAvailability` (type: `boolean`):

📅 **AVAILABILITY ADD-ON (details mode):** Adds one extra lookup per experience — per-date slots with spots remaining, group-size caps, guest age requirements and market timezone.

💎 PAID plans only.

## `availabilityStartDate` (type: `string`):

📅 ISO `YYYY-MM-DD` start of the availability window. Defaults to today.

## `availabilityEndDate` (type: `string`):

📅 ISO `YYYY-MM-DD` end of the availability window. Defaults to 30 days from today (max window 90 days).

## `hostIds` (type: `array`):

🧑‍💼 **HOST MODE INPUT:** Airbnb host user IDs or profile URLs — one structured host dossier per entry.

✅ **Accepted forms:**

- Numeric user ID: `1462708607514564035`
- Profile URL: `https://www.airbnb.com/users/show/1462708607514564035`
- Profile ID from a previous details run (`previewReviews[].reviewerId`)

💎 **TIER LIMITS:** FREE 5 IDs · PAID unlimited.

## Actor input object example

```json
{
  "mode": "search",
  "destination": "Austin, TX",
  "checkIn": "2026-08-01",
  "checkOut": "2026-08-05",
  "experienceType": "food,tasting",
  "travelerType": "Solo Travellers",
  "hostLanguages": "english,spanish",
  "accessibilityFeatures": "Step-free access",
  "maxResultsPerQuery": 40,
  "includeAvailability": false,
  "availabilityStartDate": "2026-08-01",
  "availabilityEndDate": "2026-08-31"
}
```

# Actor output Schema

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

Structured Airbnb Experiences rows: search results, detail dossiers with optional availability, and host profiles.

## `htmlReport` (type: `string`):

HTML summary with run stats, market KPIs (price/rating/duration distributions) and per-query totals.

# 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 = {
    "destination": "Austin, TX"
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/airbnb-experiences-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 = { "destination": "Austin, TX" }

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/airbnb-experiences-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 '{
  "destination": "Austin, TX"
}' |
apify call sian.agency/airbnb-experiences-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Airbnb Experiences Scraper — Tours, Hosts & Availability",
        "description": "Airbnb Experiences scraper and API. Search tours and activities by destination with prices, ratings and themes; extract experience details, per-date availability, group caps and full host profiles (Superhost, tenure, ratings). Structured JSON for travel market intel and host lead-gen.",
        "version": "1.0",
        "x-build-id": "mMfFWwNpr1hyEx6jh"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sian.agency~airbnb-experiences-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sian.agency-airbnb-experiences-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/sian.agency~airbnb-experiences-scraper/runs": {
            "post": {
                "operationId": "runs-sync-sian.agency-airbnb-experiences-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/sian.agency~airbnb-experiences-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-sian.agency-airbnb-experiences-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": {
                    "mode": {
                        "title": "🧭 Mode",
                        "enum": [
                            "search",
                            "details",
                            "host"
                        ],
                        "type": "string",
                        "description": "🧭 **PICK ONE MODE PER RUN:**\n\n- 🔍 **search** — find experiences by destination (40 per page, auto-paginated)\n- 🎟️ **details** — full dossier per experience ID/URL (host bio, meeting point, preview reviews; optional availability calendar)\n- 🧑‍💼 **host** — structured host profile per host ID/URL (Superhost, tenure, ratings, portfolios)",
                        "default": "search"
                    },
                    "destination": {
                        "title": "📍 Destination (search mode)",
                        "type": "string",
                        "description": "📍 **DESTINATION SEARCH:** City, region or free-text destination — exactly what you would type into the Airbnb search box.\n\n💡 **Examples:** `Austin, TX` · `Lisbon, Portugal` · `Tokyo`\n\n🚀 **TIP:** Paid plans can pass multiple destinations via the *Bulk destinations* field below.",
                        "default": "Austin, TX"
                    },
                    "destinations": {
                        "title": "🚀 Bulk destinations (search mode)",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "🚀 **BULK SEARCH:** Scan several destinations in one run.\n\n💎 **TIER LIMITS:**\n- **FREE users:** 1 destination per run (25 experiences max)\n- **PAID users:** unlimited destinations\n\n📝 Use *Bulk edit* to paste one destination per line.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "checkIn": {
                        "title": "📅 Check-in date (optional)",
                        "type": "string",
                        "description": "📅 Filter experiences bookable from this date (ISO `YYYY-MM-DD`). Provide together with check-out to activate date filtering and per-date pricing."
                    },
                    "checkOut": {
                        "title": "📅 Check-out date (optional)",
                        "type": "string",
                        "description": "📅 Filter experiences bookable until this date (ISO `YYYY-MM-DD`). Must be after check-in."
                    },
                    "experienceType": {
                        "title": "🎨 Experience types (optional)",
                        "type": "string",
                        "description": "🎨 Comma-separated experience themes.\n\n✅ **Valid values:** `architecture, art, beauty, cooking, cultural, dining, flying, food, galleries, landmarks, museum, outdoor, performance, shopping, tasting, water, wellness, wildlife, workout`\n\n💡 **Example:** `food,tasting,dining`"
                    },
                    "travelerType": {
                        "title": "🧳 Traveler types (optional)",
                        "type": "string",
                        "description": "🧳 Comma-separated audience filter.\n\n✅ **Valid values:** `Kids, Big Groups, Solo Travellers, Date Night`"
                    },
                    "pricePerGuestMin": {
                        "title": "💰 Min price per guest (optional)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "💰 Only return experiences priced at or above this per-guest amount."
                    },
                    "pricePerGuestMax": {
                        "title": "💰 Max price per guest (optional)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "💰 Only return experiences priced at or below this per-guest amount."
                    },
                    "minDuration": {
                        "title": "⏱ Min duration in minutes (optional)",
                        "type": "integer",
                        "description": "⏱ Only return experiences lasting at least this many minutes.\n\n✅ **Valid values:** `30, 45, 60, 90, 120, 180`"
                    },
                    "maxDuration": {
                        "title": "⏱ Max duration in minutes (optional)",
                        "type": "integer",
                        "description": "⏱ Only return experiences lasting at most this many minutes.\n\n✅ **Valid values:** `45, 60, 90, 120, 180`"
                    },
                    "timeOfDay": {
                        "title": "🌅 Time of day (optional)",
                        "enum": [
                            "morning",
                            "afternoon",
                            "evening"
                        ],
                        "type": "string",
                        "description": "🌅 Restrict to experiences starting in the morning (before 12 PM), afternoon (after 12 PM) or evening (after 5 PM)."
                    },
                    "hostLanguages": {
                        "title": "🗣 Host languages (optional)",
                        "type": "string",
                        "description": "🗣 Comma-separated host language filter (lowercase).\n\n✅ **Valid values include:** `english, french, german, italian, japanese, russian, spanish, arabic, chinese, hindi, portuguese, turkish, indonesian, dutch, korean, bengali, thai, punjabi, greek, sign, hebrew, polish, swedish, norwegian, finnish, czech, hungarian, ukrainian`"
                    },
                    "accessibilityFeatures": {
                        "title": "♿ Accessibility features (optional)",
                        "type": "string",
                        "description": "♿ Comma-separated accessibility filter.\n\n✅ **Valid values:** `Step-free access, Sign language options, Designated sighted guide, No extreme sensory stimuli`"
                    },
                    "adults": {
                        "title": "🧑 Adults (optional)",
                        "minimum": 0,
                        "maximum": 16,
                        "type": "integer",
                        "description": "🧑 Number of adult guests used for pricing context."
                    },
                    "children": {
                        "title": "🧒 Children (optional)",
                        "minimum": 0,
                        "maximum": 16,
                        "type": "integer",
                        "description": "🧒 Number of child guests used for pricing context."
                    },
                    "infants": {
                        "title": "👶 Infants (optional)",
                        "minimum": 0,
                        "maximum": 16,
                        "type": "integer",
                        "description": "👶 Number of infant guests used for pricing context."
                    },
                    "maxResultsPerQuery": {
                        "title": "🔢 Max experiences per destination",
                        "minimum": 1,
                        "type": "integer",
                        "description": "🔢 Cap on rows returned per destination in search mode.\n\n💎 **TIER LIMITS:**\n- **FREE users:** 25 experiences per run\n- **PAID users:** unlimited (auto-paginated, 40 per page)",
                        "default": 40
                    },
                    "experienceIds": {
                        "title": "🎟️ Experience IDs or URLs (details mode)",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "🎟️ **DETAILS MODE INPUT:** Airbnb Experience IDs or URLs — one dossier row per entry.\n\n✅ **Accepted forms:**\n- Numeric ID: `175656`\n- Full URL: `https://www.airbnb.com/experiences/175656`\n- Listing ID from a previous search run (`activityListingId` field)\n\n💎 **TIER LIMITS:** FREE 5 IDs · PAID unlimited.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeAvailability": {
                        "title": "📅 Include availability calendar (PAID)",
                        "type": "boolean",
                        "description": "📅 **AVAILABILITY ADD-ON (details mode):** Adds one extra lookup per experience — per-date slots with spots remaining, group-size caps, guest age requirements and market timezone.\n\n💎 PAID plans only.",
                        "default": false
                    },
                    "availabilityStartDate": {
                        "title": "📅 Availability window start (optional)",
                        "type": "string",
                        "description": "📅 ISO `YYYY-MM-DD` start of the availability window. Defaults to today."
                    },
                    "availabilityEndDate": {
                        "title": "📅 Availability window end (optional)",
                        "type": "string",
                        "description": "📅 ISO `YYYY-MM-DD` end of the availability window. Defaults to 30 days from today (max window 90 days)."
                    },
                    "hostIds": {
                        "title": "🧑‍💼 Host IDs or profile URLs (host mode)",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "🧑‍💼 **HOST MODE INPUT:** Airbnb host user IDs or profile URLs — one structured host dossier per entry.\n\n✅ **Accepted forms:**\n- Numeric user ID: `1462708607514564035`\n- Profile URL: `https://www.airbnb.com/users/show/1462708607514564035`\n- Profile ID from a previous details run (`previewReviews[].reviewerId`)\n\n💎 **TIER LIMITS:** FREE 5 IDs · PAID unlimited.",
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
