# Airbnb Services Scraper — Chefs, Photographers, Spa (`sian.agency/airbnb-services-scraper`) Actor

Airbnb Services scraper. Search the Services marketplace by destination (chefs, photographers, catering, spa), extract service details and guest reviews. Structured JSON for market intel and lead-gen.

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

## Pricing

from $2.50 / 1,000 extracted services

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Airbnb Services Scraper — Chefs, Photographers, Spa

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Sibling 1](https://img.shields.io/badge/Store-Airbnb%20Property-FF5A5F)](https://apify.com/sian.agency/airbnb-property-scraper?fpr=sian) [![Sibling 2](https://img.shields.io/badge/Store-Airbnb%20Experiences-FF5A5F)](https://apify.com/sian.agency/airbnb-experiences-scraper?fpr=sian) [![Sibling 3](https://img.shields.io/badge/Store-Booking.com-003580)](https://apify.com/sian.agency/booking-com-scraper?fpr=sian)

#### New: Airbnb Services marketplace as clean rows

##### Private chefs, photographers, spa, catering and beauty — search, details, reviews

### 🔍 What is the Airbnb Services Scraper — and when should you use it?

The **Airbnb Services Scraper** turns the Airbnb Services marketplace into structured rows you can filter, export and feed into a spreadsheet, database or agent. No Airbnb account. No API key of your own.

**Use it when you need:** service names, per-guest prices, ratings, bookable activities and guest reviews for chefs, photographers, spa, catering and beauty.

**Use something else when:** you need stays or STR KPIs. Use [Airbnb Property Scraper](https://apify.com/sian.agency/airbnb-property-scraper?fpr=sian) for homes. Use [Airbnb Experiences Scraper](https://apify.com/sian.agency/airbnb-experiences-scraper?fpr=sian) for tours and hosts.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Ask for this Actor by name: sian.agency/airbnb-services-scraper

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want a city-level snapshot of Airbnb Services using the Apify Actor sian.agency/airbnb-services-scraper.

Use it when I need: private chefs, photographers, spa, catering or beauty listings with prices and ratings.

Don't use it when: I need homes or tours — use airbnb-property-scraper for stays, airbnb-experiences-scraper for tours.

How to call it: pick one mode — search (destination + typeOfService + dates), details (serviceListingIds), or reviews (serviceListingIds).

Start with this input:
{
  "mode": "search",
  "destination": "New York",
  "typeOfService": "Chefs",
  "checkIn": "2026-09-15",
  "checkOut": "2026-09-17"
}

Ask me the city and service type, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *List private chefs in New York next month with price per guest and rating*
- *Pull the full menu and reviews for https://www.airbnb.com/services/6965696*
- *Compare photography listings in Los Angeles vs San Francisco*

Machine-readable API, MCP config and OpenAPI for this Actor live at [apify.com/sian.agency/airbnb-services-scraper.md](https://apify.com/sian.agency/airbnb-services-scraper.md).

### 📋 Overview

**Airbnb Services is a different catalog from stays and tours.** This actor returns that catalog as one clean dataset.

**Why teams use it:**

- ✅ **Three modes**: destination search, service details, guest reviews
- ⚡ **Nine service types**: chefs, prepared meals, catering, photography, training, makeup, hair, nails, spa
- 🎯 **Prices and ratings on every search row**
- 💰 **Pay per saved row** — failed lookups are not billed
- 💎 **IDs or URLs** — paste airbnb.com/services links
- ✨ **NEW**: dedicated Services listing, not bolted onto tours

### ✨ Features

- 🔍 **Destination search**: city plus one service type, with required stay dates
- 🛎 **Detail dossiers**: activities, prices, tips, preview reviews
- ⭐ **Full reviews**: up to 50 guest comments per service
- 💶 **Price filters**: min/max per guest, duration, time of day
- 📦 **Bulk destinations** on paid plans
- 📄 **HTML run report** with median price and rating

### 🎬 Quick Start

Pick a city, a service type and a short date window. Start the actor. Export JSON or CSV.

```bash
curl -X POST https://api.apify.com/v2/acts/sian.agency~airbnb-services-scraper/runs?token=[YOUR_TOKEN] \
-d '{"mode":"search","destination":"New York","typeOfService":"Chefs","checkIn":"2026-09-15","checkOut":"2026-09-17"}'
```

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Open the actor

Find Airbnb Services Scraper on the SIÁN Agency Store page.

#### Step 2: Choose a mode

Search for a city. Or paste service URLs for details or reviews.

#### Step 3: Run and export

Open the dataset. Download JSON, CSV or Excel.

**That's it. In about a minute you will have:**

- Named services with prices
- Ratings and review counts
- Direct Airbnb URLs

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| mode | string | No | search, details, or reviews |
| destination | string | No | City for search mode |
| typeOfService | string | No | Chefs, Photography, Spa\_Treatment, … |
| checkIn / checkOut | string | Search | YYYY-MM-DD, future dates |
| serviceListingIds | array | Details/reviews | IDs or airbnb.com/services URLs |
| includeReviews | boolean | No | Add full reviews on a paid details run |
| destinations | array | No | Several cities in one run, one search each |
| adults / children / infants | integer | No | Party size the prices are quoted for |
| maxResultsPerQuery | integer | No | Cap the services returned per destination |
| pricePerGuestMin / pricePerGuestMax | integer | No | Keep only services inside a price band |
| minDuration / maxDuration | integer | No | Keep only services inside a length band, in minutes |
| timeOfDay | string | No | morning, afternoon or evening availability |
| hostLanguages | string | No | Keep only hosts who speak these languages |
| accessibilityFeatures | string | No | Keep only services offering these features |

**Example:**

```json
{
  "mode": "search",
  "destination": "New York",
  "typeOfService": "Chefs",
  "checkIn": "2026-09-15",
  "checkOut": "2026-09-17"
}
```

### 📤 Output

Results land in the default dataset. Useful fields include:

| Field | Type | Description |
|-------|------|-------------|
| serviceName | string | Public listing name |
| typeOfService | string | Category |
| pricePerGuest | number | Headline price |
| rating | number | Average guest rating |
| reviewCount | number | Number of reviews |
| serviceUrl | string | Airbnb link |
| reviews | array | Full comments in reviews mode |

### 💼 Use Cases & Examples

#### 1. Private-chef competitive intel

**A chef or catering operator wants every rival menu in one city.**

**Input:** search, destination New York, typeOfService Chefs
**Output:** names, prices, ratings, URLs
**Use:** price against the local field

#### 2. Photographer supply map

**A marketplace wants Airbnb photography listings by city.**

**Input:** search, Photography, two coastal cities on a paid plan
**Output:** one row per photographer
**Use:** coverage maps and outreach lists

#### 3. Service-host lead generation

**A recruiter turns a service URL into a dossier.**

**Input:** details mode + serviceListingIds
**Output:** activities, prices, preview reviews
**Use:** qualify hosts before outreach

#### 4. Review mining

**A researcher wants guest language for spa treatments.**

**Input:** reviews mode + service IDs from a prior search
**Output:** comments, ratings, dates
**Use:** theme coding and NPS-style reads

#### 5. Travel-product catalog

**An itinerary app needs structured service cards.**

**Input:** search for the guest's city and dates
**Output:** name, byline, thumbnail, price
**Use:** inject into trip plans

### 🔗 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-services-scraper').call({
  mode: 'search',
  destination: 'New York',
  typeOfService: 'Chefs',
  checkIn: '2026-09-15',
  checkOut: '2026-09-17'
});

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-services-scraper').call(
    run_input={
        'mode': 'search',
        'destination': 'New York',
        'typeOfService': 'Chefs',
        'checkIn': '2026-09-15',
        'checkOut': '2026-09-17',
    }
)

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-services-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"mode":"search","destination":"New York","typeOfService":"Chefs","checkIn":"2026-09-15","checkOut":"2026-09-17"}'
```

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

1. **Trigger**: Schedule or webhook
2. **HTTP Request**: Call the actor API
3. **Process**: Handle JSON results
4. **Action**: Save, notify, or transform

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 services** per run — same fields as paid
- No credit card required
- Fine for a first city scan

#### PAID Tier (Production Ready)

- **Unlimited** destinations and IDs
- Full reviews on details runs
- Pay per saved row

💰 **Headline rate** is the search row. Details and reviews are a separate dossier event.

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

### ❓ Frequently Asked Questions

**Q: How many services can I pull?**
A: FREE: 25 per run. PAID: unlimited, paginated.

**Q: Do I need an Airbnb account?**
A: No.

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

**Q: Why did search return zero rows?**
A: Dates must be in the future. typeOfService must match the enum. Try a larger city.

**Q: Is this stays or tours?**
A: Neither. This is the Services marketplace. Use the property or experiences sibling for those.

**Q: How long does a run take?**
A: A single-city search is usually under a minute.

### 🐛 Troubleshooting

**Empty search**

- Use future check-in and check-out
- Pick a valid typeOfService
- Try New York or Los Angeles first

**Details look empty**

- Use an ID from a search row, or a full airbnb.com/services URL
- Numeric IDs are encoded automatically

**FREE run stopped early**

- 25-row cap, or 1 destination / 5 IDs
- Upgrade for bulk

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

Our actors do not extract private user data such as emails or phone numbers. They only extract what the host has chosen to share publicly. We believe they are safe when used for ethical purposes by Apify users.

Results can still contain personal data. Personal data is protected by the **GDPR** in the EU and by other rules elsewhere. Do not scrape personal data unless you have a legitimate reason. If you are unsure, ask a lawyer.

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

### ⚠️ Trademark Disclaimer

Airbnb is a trademark of Airbnb, Inc. This actor is not affiliated with, endorsed by, or sponsored by Airbnb. All product names, logos and brands are property of their respective owners.

### 🤝 Support

**Join our active support community**

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

***

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

# Changelog

This Actor's version history is a separate document: https://apify.com/sian.agency/airbnb-services-scraper/changelog.md

# Actor input Schema

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

🧭 **PICK ONE MODE PER RUN:** search by destination, details by ID/URL, or full guest reviews.

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

📍 **DESTINATION SEARCH:** City or region — the same text you type into Airbnb.

💡 **Examples:** New York · Los Angeles · Paris

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

🚀 **BULK SEARCH:** Several destinations in one run.

💎 **TIER LIMITS:** FREE 1 destination (25 services). PAID unlimited.

## `typeOfService` (type: `string`):

🛎 **REQUIRED FOR SEARCH.** One Airbnb Services category.

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

📅 Search needs a future check-in (YYYY-MM-DD).

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

📅 Search needs a check-out after check-in (YYYY-MM-DD).

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

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

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

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

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

⏱ Valid values: 30, 45, 60, 90, 120, 180.

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

⏱ Valid values: 45, 60, 90, 120, 180.

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

🌅 Morning before 12 PM, afternoon after 12 PM, evening after 5 PM.

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

🗣 Comma-separated, lowercase. Example: english,spanish

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

♿ Comma-separated. Example: Step-free access

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

🧑 Adult guests used for pricing context.

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

🧒 Child guests used for pricing context.

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

👶 Infant guests used for pricing context.

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

🔢 Cap per destination. FREE: 25 per run. PAID: unlimited, 40 per page.

## `serviceListingIds` (type: `array`):

🛎 **DETAILS / REVIEWS MODE:** numeric IDs, serviceListingId values from a search run, or https://www.airbnb.com/services/<id> URLs.

💎 FREE: 5 IDs. PAID: unlimited.

## `includeReviews` (type: `boolean`):

⭐ On PAID details runs, also pull up to 50 guest reviews onto the dossier. Rides the dossier charge.

## Actor input object example

```json
{
  "mode": "search",
  "destination": "New York",
  "typeOfService": "Chefs",
  "checkIn": "2026-09-15",
  "checkOut": "2026-09-17",
  "hostLanguages": "english,spanish",
  "accessibilityFeatures": "Step-free access",
  "adults": 2,
  "children": 0,
  "infants": 0,
  "maxResultsPerQuery": 40,
  "serviceListingIds": [
    "https://www.airbnb.com/services/6965696"
  ],
  "includeReviews": false
}
```

# Actor output Schema

## `serviceResults` (type: `string`):

Structured Airbnb Services rows: search results, detail dossiers, and review sets.

## `scrapingSummary` (type: `string`):

HTML summary with run stats, market KPIs 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 = {
    "mode": "search",
    "destination": "New York",
    "typeOfService": "Chefs",
    "checkIn": "2026-09-15",
    "checkOut": "2026-09-17",
    "adults": 2,
    "children": 0,
    "infants": 0,
    "maxResultsPerQuery": 40,
    "serviceListingIds": [
        "https://www.airbnb.com/services/6965696"
    ],
    "includeReviews": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/airbnb-services-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 = {
    "mode": "search",
    "destination": "New York",
    "typeOfService": "Chefs",
    "checkIn": "2026-09-15",
    "checkOut": "2026-09-17",
    "adults": 2,
    "children": 0,
    "infants": 0,
    "maxResultsPerQuery": 40,
    "serviceListingIds": ["https://www.airbnb.com/services/6965696"],
    "includeReviews": False,
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/airbnb-services-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 '{
  "mode": "search",
  "destination": "New York",
  "typeOfService": "Chefs",
  "checkIn": "2026-09-15",
  "checkOut": "2026-09-17",
  "adults": 2,
  "children": 0,
  "infants": 0,
  "maxResultsPerQuery": 40,
  "serviceListingIds": [
    "https://www.airbnb.com/services/6965696"
  ],
  "includeReviews": false
}' |
apify call sian.agency/airbnb-services-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/airbnb-services-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/9sN6026Jj1htLI1wJ/builds/n7KIKwl7dBnbHtXMH/openapi.json
