# Airbnb Search Scraper (`scrapeai/airbnb-search-scraper`) Actor

Scrape Airbnb search result listings by extracting title, price, rating, location, images, and listing URL from the search page. Use pagination/scroll handling to load more results, avoid duplicates, and store output in JSON/CSV for analysis or automation.

- **URL**: https://apify.com/scrapeai/airbnb-search-scraper.md
- **Developed by:** [ScrapeAI](https://apify.com/scrapeai) (community)
- **Categories:** Travel, Automation, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $15.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/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

A flexible Airbnb scraper that supports both search-based and direct listing URL scraping. It extracts listing metadata, pricing, review summaries, and optional detail-page data.

### What it does

- Searches Airbnb by location, dates, guests, price range, and property type
- Scrapes specific Airbnb listing URLs with `productUrl` mode
- Supports optional detail-page scraping using `deepScrape`
- Captures first-page reviews when enabled
- Outputs results to `storage/datasets/default/`

### Requirements

- Node.js 18 or newer
- npm
- Residential proxies are recommended for Airbnb scraping

### Installation

```bash
cd apify-airbnb
npm ci
````

### Running the scraper

```bash
npm start
```

The scraper reads input from `INPUT.json` or an Apify actor input payload.

### Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `search` | `search` for location search, `productUrl` for specific listing URLs |
| `location` | string | `New York, USA` | Search location used in `search` mode |
| `checkIn` | string | | Optional check-in date in `YYYY-MM-DD` format |
| `checkOut` | string | | Optional check-out date in `YYYY-MM-DD` format |
| `guests` | integer | `2` | Number of guests to search for |
| `maxItems` | integer | `50` | Maximum number of listings to scrape |
| `priceMin` | integer | | Minimum nightly price filter |
| `priceMax` | integer | | Maximum nightly price filter |
| `propertyType` | string | `any` | `any`, `entire_home`, `private_room`, or `shared_room` |
| `productUrls` | array | | Airbnb listing URLs when `mode` is `productUrl` |
| `includeReviews` | boolean | `true` | Extract the first page of reviews per listing |
| `deepScrape` | boolean | `true` | `true` for full detail pages, `false` for card-only search results |
| `proxyConfiguration` | object | | Proxy settings used by the scraper |

### Example search input

```json
{
  "mode": "search",
  "location": "Barcelona, Spain",
  "checkIn": "2026-08-10",
  "checkOut": "2026-08-15",
  "guests": 2,
  "maxItems": 12,
  "includeReviews": false,
  "deepScrape": false,
  "propertyType": "entire_home"
}
```

### Example product URL input

```json
{
  "mode": "productUrl",
  "productUrls": [
    "https://www.airbnb.com/rooms/9876543210"
  ],
  "includeReviews": true,
  "deepScrape": true,
  "maxItems": 5
}
```

### Output

```json

{
	"detail": true,
	"link": "https://www.airbnb.com/rooms/1104883308160967951",
	"scrapedAt": "2026-04-28T11:49:24.110Z",
	"detailData": {
		"title": "Parisian getaway in the heart of Montmartre!",
		"description": "Let yourself be charmed by our Premium Studio for two – a 30m² space combining comfort, modernity, and elegance.\n\nEnjoy a spacious living area in a refined setting, ideally located for your stay. Benefit from 4-star hotel services available 24/7, including access to the lobby, luggage storage, and à la carte services.\nPlease note that the layout may vary depending on the apartment (other layout pictures)\n\nThe space\nAs soon as you walk through the door, you will be greeted by an ergonomic living space designed for your comfort. The studio offers a large living room with a bed for two people.\nNext to it is a dining area with a table and chairs, and a large HD television is also available for unforgettable movie nights. The spacious kitchen is fully equipped with a refrigerator, a 2-burner stove, a dishwasher, a range hood, a Nespresso coffee machine, a kettle, and all the necessary dishes.\nIn addition, a large open closet is available for storing your belongings.\nYou can access the apartment from 3:00 PM on the day of your arrival, and we will ensure that you have everything you need for a pleasant stay, including fresh sheets, soap, and all the amenities necessary to make you feel at home. Please do not hesitate to contact us with any questions or specific requests.\n\nGuest access\nOur hotel is easily accessible from international airports, with convenient transportation options available. From Charles de Gaulle Airport (CDG), you can take the RER B train line to Gare du Nord station, where you can transfer to metro line 12 towards Mairie d'Issy. Alternatively, from Orly Airport (ORY), you can take line 14 to Gare Saint Lazare station, where you can take metro line 12. In addition, we offer taxi services for guests who prefer a direct and comfortable transfer. Following booking confirmation, guests will receive an email inviting them to check in online. Once completed, they will receive a unique access code allowing them to enter the apartment on the day of arrival at 3:00 PM. For those arriving earlier, a free luggage storage service is available in our automated storage facility.\n\nOther things to note\nWe would like to remind our customers that parties and large gatherings of people are strictly prohibited on our premises. We also ask our customers not to play music too loudly or to disturb the peace of other residents with excessive noise. Any damage to the installations will be automatically invoiced. In the event of incivility, penalties will be applied, and we will contact Airbnb and the competent authorities. We attach great importance to respecting the tranquility of all our travelers.\n\nIn addition, we would like to emphasize the importance of completing your online check-in before arrival. This ensures a smoother arrival process and allows you to access your accommodation without hassle.\n\nRegistration details\nExempt – hotel-type listing",
		"propertyType": "Entire serviced apartment",
		"locationName": "Paris, France",
		"maxGuests": 2,
		"bedrooms": 1,
		"beds": 1,
		"bathrooms": 1,
		"hostName": "Yuna",
		"isSuperhost": true,
		"hostYearsHosting": 2,
		"isGuestFavourite": true,
		"rating": 4.97,
		"reviewCount": 91,
		"categoryRatings": {
			"cleanliness": 5,
			"accuracy": 5,
			"check": 5,
			"communication": 5,
			"location": 4.9,
			"value": 4.9
		},
		"price": "",
		"originalPrice": null,
		"priceLabel": "",
		"amenities": [
			"Bathroom",
			"Hairdryer",
			"Cleaning products",
			"Terre de Mars shampoo",
			"Terre de Mars body soap",
			"Hot water",
			"Shower gel",
			"Bedroom and laundry",
			"Free washer – In building",
			"Free dryer – In building",
			"Essentials",
			"Towels, bed sheets, soap and toilet paper",
			"Hangers",
			"Bed linen",
			"Cotton Linvosges linen",
			"Extra pillows and blankets",
			"Iron",
			"Safe",
			"Clothes storage",
			"Entertainment",
			"43-inch HDTV with Chromecast",
			"Family",
			"Travel cot – available upon request",
			"Standalone high chair – available upon request",
			"With straps/harness",
			"Heating and cooling",
			"Central air conditioning",
			"Central heating",
			"Home safety",
			"Smoke alarm",
			"Carbon monoxide alarm",
			"Fire extinguisher",
			"First aid kit",
			"Internet and office",
			"Wifi",
			"Dedicated workspace",
			"In a common space",
			"Kitchen and dining",
			"Kitchen",
			"Space where guests can cook their own meals",
			"Candy refrigerator",
			"Microwave",
			"Cooking basics",
			"Pots and pans, oil, salt and pepper",
			"Crockery and cutlery",
			"Bowls, chopsticks, plates, cups, etc.",
			"Mini fridge",
			"Freezer",
			"Dishwasher",
			"Kettle",
			"Coffee maker: espresso machine",
			"Wine glasses",
			"Toaster",
			"Baking sheet",
			"Dining table",
			"Coffee",
			"Location features",
			"Private entrance",
			"Separate street or building entrance",
			"Launderette nearby",
			"Free resort access",
			"Guests can use nearby resort facilities",
			"Parking and facilities",
			"Lift",
			"Paid street parking off premises",
			"Single-level home",
			"No stairs in home",
			"Services",
			"Luggage drop-off allowed",
			"For guests' convenience when they are arriving early or departing late",
			"Long-term stays allowed",
			"Allow stays of 28 days or more",
			"Self check-in",
			"Keypad",
			"Check yourself in to the home with a door code",
			"Not included",
			"Unavailable: Exterior security cameras on property",
			"Exterior security cameras on property"
		],
		"highlights": [
			"Top 10% of homes",
			"This home is highly ranked based on ratings, reviews and reliability.",
			"Self check-in",
			"Check yourself in with the keypad.",
			"Great restaurants nearby",
			"Guests say there are excellent options for dining out."
		],
		"sleepingArrangement": "Bedroom, 1 king bed",
		"cancellationPolicy": "",
		"houseRules": "",
		"checkoutTime": null,
		"coordinates": {
			"lat": 48.8902,
			"lng": 2.3451
		},
		"images": [
			"https://a0.muscache.com/im/pictures/hosting/Hosting-U3RheVN1cHBseUxpc3Rpbmc6MTEwNDg4MzMwODE2MDk2Nzk1MQ==/original/46b38411-150e-4c5d-a967-a287227a6a1e.jpeg",
			"https://a0.muscache.com/im/pictures/hosting/Hosting-U3RheVN1cHBseUxpc3Rpbmc6MTEwNDg4MzMwODE2MDk2Nzk1MQ==/original/fc0da716-28ce-4b20-85e1-6baa2a94ad2e.jpeg",
			"https://a0.muscache.com/im/pictures/hosting/Hosting-U3RheVN1cHBseUxpc3Rpbmc6MTEwNDg4MzMwODE2MDk2Nzk1MQ==/original/327d13d3-122b-4007-8a88-4bda8916bfe8.jpeg",
			"https://a0.muscache.com/im/pictures/hosting/Hosting-U3RheVN1cHBseUxpc3Rpbmc6MTEwNDg4MzMwODE2MDk2Nzk1MQ==/original/6d72051d-9936-4f4f-98b9-d1db388226f6.jpeg",
			"https://a0.muscache.com/im/pictures/hosting/Hosting-U3RheVN1cHBseUxpc3Rpbmc6MTEwNDg4MzMwODE2MDk2Nzk1MQ==/original/f8345610-5ca7-4cab-8f58-2d98de413ab9.jpeg",
			"https://a0.muscache.com/im/pictures/hosting/Hosting-U3RheVN1cHBseUxpc3Rpbmc6MTEwNDg4MzMwODE2MDk2Nzk1MQ==/original/c89cfd62-0b85-42e0-bd54-96614e1e0508.jpeg",
			"https://a0.muscache.com/im/pictures/hosting/Hosting-U3RheVN1cHBseUxpc3Rpbmc6MTEwNDg4MzMwODE2MDk2Nzk1MQ==/original/98b0f53c-4bd0-4a6b-b158-8ebf26ec5266.jpeg",
			"https://a0.muscache.com/im/pictures/hosting/Hosting-U3RheVN1cHBseUxpc3Rpbmc6MTEwNDg4MzMwODE2MDk2Nzk1MQ==/original/258d6a2f-f77a-4675-bbac-82df8aa50eb1.jpeg"
		],
		"neighbourhoodDescription": "Montmartre is a charming and atypical village nestled in the heart of Paris, renowned for its artistic heritage and picturesque streets. The hotel is located in this lively area, surrounded by quaint cafes, trendy bars, and delicious bakeries. Just a 5-minute walk away, guests can explore a bustling market with fresh produce and local delights. With its bohemian atmosphere and rich cultural history, Montmartre offers a unique and unforgettable experience for visitors eager to immerse themselves in the true Parisian lifestyle.",
		"hostAbout": "Born in the 80s\nWhere I went to school: Paris\nWelcome to Yuna Montmartre: your chic pied-à-terre in the heart of Paris! Our team of hotel experts welcomes you all year round in our premium aparthotel. Available 24/7, we prepare your stay to make it an unforgettable moment. Book with us and enjoy a professional, secure and 100% serene service.\nYuna is a Superhost\nSuperhosts are experienced, highly rated hosts who are committed to providing great stays for guests.\nHost details\nResponse rate: 100%\nResponds within an hour\nMessage host\nTo help protect your payment, always use Airbnb to send money and communicate with hosts.",
		"reviews": [
			{
				"author": "Floyd",
				"authorLocation": "10 years on Airbnb",
				"rating": 5,
				"date": "3 weeks ago",
				"stayType": "Stayed a few nights",
				"text": "Yuna had very friendly staff, Beautiful apartment with view over the rooftops, cherry blossoms and surrounding Juliette balconies so atmospheric! Every need had been thought of and  so it was a really well equipped kitchen and apartment. Local shops close by and excellent foods available in local supermarket We had a wonderful experience at Yuna and would highly recommend this as a place to stay and enjoy! Many thanks 🤩"
			},
			{
				"author": "Jensen",
				"authorLocation": "6 years on Airbnb",
				"rating": 5,
				"date": "3 weeks ago",
				"stayType": "Stayed a few nights",
				"text": "We loved staying at the Yuna! It was clean, quiet, and an easy check in! There are a few good restaurants near by but we loved walking up to Montmartre which was nice it was only a 10 minute walk away! Get ready for the steps but it’s worth it to see the views of the city."
			}
		]
	}
}

```

### Notes

- Deep scraping produces more complete listing data but runs slower
- Light scraping is faster and returns only search-card metadata
- Airbnb may block non-residential IPs, so residential proxies are preferred
- If `apify` and `crawlee` version issues appear, reinstall dependencies using `npm ci`

# Actor input Schema

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

Location used for search-mode scraping.

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

Optional check-in date in YYYY-MM-DD format.

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

Optional check-out date in YYYY-MM-DD format.

## `guests` (type: `integer`):

Number of guests for the search.

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

Maximum number of listings to collect.

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

Minimum nightly price filter (local currency).

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

Maximum nightly price filter (local currency).

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

Filter results by property type.

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

Select search mode or direct product URL scraping.

## `productUrls` (type: `array`):

Specific Airbnb listing URLs to scrape when productUrl mode is selected.

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

If enabled, the first page of reviews is extracted for each listing.

## `deepScrape` (type: `boolean`):

Visit each listing detail page for full data when enabled; otherwise only card-level search results are collected.

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

Proxy configuration used by the scraper.

## Actor input object example

```json
{
  "location": "Tokyo, Japan",
  "guests": 2,
  "maxItems": 50,
  "propertyType": "any",
  "mode": "search",
  "productUrls": [
    "https://www.airbnb.com/rooms/789012345"
  ],
  "includeReviews": true,
  "deepScrape": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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": "Tokyo, Japan",
    "productUrls": [
        "https://www.airbnb.com/rooms/789012345"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapeai/airbnb-search-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": "Tokyo, Japan",
    "productUrls": ["https://www.airbnb.com/rooms/789012345"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapeai/airbnb-search-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": "Tokyo, Japan",
  "productUrls": [
    "https://www.airbnb.com/rooms/789012345"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scrapeai/airbnb-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Airbnb Search Scraper",
        "description": "Scrape Airbnb search result listings by extracting title, price, rating, location, images, and listing URL from the search page. Use pagination/scroll handling to load more results, avoid duplicates, and store output in JSON/CSV for analysis or automation.",
        "version": "1.0",
        "x-build-id": "9dMv3p7pWyYcYXVUz"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapeai~airbnb-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapeai-airbnb-search-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/scrapeai~airbnb-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapeai-airbnb-search-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/scrapeai~airbnb-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapeai-airbnb-search-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",
                "required": [
                    "location"
                ],
                "properties": {
                    "location": {
                        "title": "Search Location",
                        "type": "string",
                        "description": "Location used for search-mode scraping."
                    },
                    "checkIn": {
                        "title": "Check-In Date",
                        "type": "string",
                        "description": "Optional check-in date in YYYY-MM-DD format."
                    },
                    "checkOut": {
                        "title": "Check-Out Date",
                        "type": "string",
                        "description": "Optional check-out date in YYYY-MM-DD format."
                    },
                    "guests": {
                        "title": "Guests",
                        "minimum": 1,
                        "maximum": 16,
                        "type": "integer",
                        "description": "Number of guests for the search.",
                        "default": 2
                    },
                    "maxItems": {
                        "title": "Maximum Listings",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of listings to collect.",
                        "default": 50
                    },
                    "priceMin": {
                        "title": "Price Minimum",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum nightly price filter (local currency)."
                    },
                    "priceMax": {
                        "title": "Price Maximum",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum nightly price filter (local currency)."
                    },
                    "propertyType": {
                        "title": "Property Type",
                        "enum": [
                            "any",
                            "entire_home",
                            "private_room",
                            "shared_room"
                        ],
                        "type": "string",
                        "description": "Filter results by property type.",
                        "default": "any"
                    },
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "search",
                            "productUrl"
                        ],
                        "type": "string",
                        "description": "Select search mode or direct product URL scraping.",
                        "default": "search"
                    },
                    "productUrls": {
                        "title": "Listing URLs",
                        "type": "array",
                        "description": "Specific Airbnb listing URLs to scrape when productUrl mode is selected.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeReviews": {
                        "title": "Include Reviews",
                        "type": "boolean",
                        "description": "If enabled, the first page of reviews is extracted for each listing.",
                        "default": true
                    },
                    "deepScrape": {
                        "title": "Deep Scrape",
                        "type": "boolean",
                        "description": "Visit each listing detail page for full data when enabled; otherwise only card-level search results are collected.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Settings",
                        "type": "object",
                        "description": "Proxy configuration used by the scraper."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
