Airbnb Scraper
Under maintenancePricing
from $2.99 / 1,000 listings
Airbnb Scraper
Under maintenanceScrape rich public Airbnb listing search and detail data with explicit access-boundary diagnostics when the site is unavailable or challenged.
Airbnb Scraper
Under maintenancePricing
from $2.99 / 1,000 listings
Scrape rich public Airbnb listing search and detail data with explicit access-boundary diagnostics when the site is unavailable or challenged.
You can access the Airbnb Scraper programmatically from your own applications by using the Apify API. You can also choose the language preference from below. To use the Apify API, you’ll need an Apify account and your API token, found in API & Integrations in Apify Console.
{ "openapi": "3.0.1", "info": { "version": "1.1", "x-build-id": "FgXIqhuyj24jCAn6V" }, "servers": [ { "url": "https://api.apify.com/v2" } ], "paths": { "/acts/w3crawler~airbnb-scraper/run-sync-get-dataset-items": { "post": { "operationId": "run-sync-get-dataset-items-w3crawler-airbnb-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/w3crawler~airbnb-scraper/runs": { "post": { "operationId": "runs-sync-w3crawler-airbnb-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/w3crawler~airbnb-scraper/run-sync": { "post": { "operationId": "run-sync-w3crawler-airbnb-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": "Run mode", "enum": [ "search", "productUrl" ], "type": "string", "description": "Search one or more result pages, or scrape specific public listing URLs.", "default": "search" }, "location": { "title": "Location", "maxLength": 160, "type": "string", "description": "City, region, or neighbourhood used to create the public Airbnb search URL.", "default": "Paris" }, "searchUrl": { "title": "Search URL", "type": "string", "description": "Optional HTTPS Airbnb /s/... URL. Its public filters and cursor are preserved; explicit input options are applied on top." }, "startUrls": { "title": "Additional search URLs", "type": "array", "description": "Optional list of HTTPS Airbnb /s/... URLs. Each source gets its own pagination budget and contributes to one global deduplicated result set.", "items": { "type": "object", "properties": { "url": { "title": "Airbnb search URL", "type": "string", "description": "Approved HTTPS Airbnb /s/... search URL." } }, "required": [ "url" ], "additionalProperties": false } }, "productUrls": { "title": "Listing URLs", "maxItems": 500, "type": "array", "description": "Public HTTPS Airbnb /rooms/<id> URLs. Used in productUrl mode; duplicate listing IDs are removed.", "items": { "type": "string" } }, "checkIn": { "title": "Check-in date", "pattern": "^$|^\\d{4}-\\d{2}-\\d{2}$", "type": "string", "description": "Optional stay date in YYYY-MM-DD format. Must be used with checkOut." }, "checkOut": { "title": "Check-out date", "pattern": "^$|^\\d{4}-\\d{2}-\\d{2}$", "type": "string", "description": "Optional stay date in YYYY-MM-DD format. Must be after checkIn." }, "guests": { "title": "Guests", "minimum": 1, "maximum": 16, "type": "integer", "description": "Adult guest count included in the public Airbnb query.", "default": 2 }, "currency": { "title": "Currency", "enum": [ "USD", "EUR", "GBP", "CAD", "AUD", "INR", "JPY", "SGD" ], "type": "string", "description": "Requested display currency for visible prices.", "default": "USD" }, "locale": { "title": "Locale", "pattern": "^[a-z]{2}(?:-[A-Z]{2})?$", "maxLength": 10, "type": "string", "description": "Airbnb language or language-region preference, for example en-US or fr-FR.", "default": "en-US" }, "propertyType": { "title": "Property type", "enum": [ "any", "entire_home", "private_room", "shared_room" ], "type": "string", "description": "Optional Airbnb room-type query filter.", "default": "any" }, "priceMin": { "title": "Minimum nightly price", "minimum": 0, "type": "number", "description": "Optional lower bound in the requested currency. Applied to the visible price per night when available." }, "priceMax": { "title": "Maximum nightly price", "minimum": 0, "type": "number", "description": "Optional upper bound in the requested currency. Must be greater than or equal to priceMin." }, "keyword": { "title": "Keyword", "maxLength": 160, "type": "string", "description": "Case-insensitive text match across title, description, property type, location, neighbourhood, and collected amenities." }, "minRating": { "title": "Minimum rating", "minimum": 0, "maximum": 5, "type": "number", "description": "Keep listings with an average public rating at or above this value." }, "maxRating": { "title": "Maximum rating", "minimum": 0, "maximum": 5, "type": "number", "description": "Keep listings with an average public rating at or below this value." }, "minReviewCount": { "title": "Minimum review count", "minimum": 0, "maximum": 1000000, "type": "integer", "description": "Keep listings with at least this many public reviews." }, "guestFavouriteOnly": { "title": "Guest favourites only", "type": "boolean", "description": "Keep only cards/details visibly marked Guest favourite.", "default": false }, "superhostOnly": { "title": "Superhosts only", "type": "boolean", "description": "Keep only listings whose public card/detail data marks the host as a Superhost.", "default": false }, "freeCancellationOnly": { "title": "Free cancellation only", "type": "boolean", "description": "Keep only records that visibly expose free cancellation.", "default": false }, "sortBy": { "title": "Sort results", "enum": [ "recommended", "price_asc", "price_desc", "rating_desc", "review_count_desc", "title_asc" ], "type": "string", "description": "Global result order after all search pages and sources are collected. recommended preserves Airbnb order.", "default": "recommended" }, "deduplicate": { "title": "Deduplicate listings", "type": "boolean", "description": "Deduplicate by Airbnb listing ID across pages and sources.", "default": true }, "maxItems": { "title": "Maximum output records", "minimum": 1, "maximum": 500, "type": "integer", "description": "Global maximum dataset row count, including at most diagnostic rows when no listing data is available.", "default": 50 }, "maxPages": { "title": "Maximum pages per search URL", "minimum": 0, "maximum": 50, "type": "integer", "description": "Maximum observed cursor/page links to visit per search source. 0 follows observed next links until the source ends or maxItems is satisfied.", "default": 0 }, "deepScrape": { "title": "Enrich listing details", "type": "boolean", "description": "Visit selected listing pages for descriptions, amenities, host, policies, coordinates, availability, and bounded reviews.", "default": true }, "maxDetailItems": { "title": "Maximum detail pages", "minimum": 0, "maximum": 500, "type": "integer", "description": "Maximum selected listings to enrich. 0 enriches every selected listing; remaining selected rows are returned with detailEnriched=false.", "default": 0 }, "includeDescription": { "title": "Include descriptions", "type": "boolean", "description": "Include public listing/host description text when exposed.", "default": true }, "includeAmenities": { "title": "Include amenities", "type": "boolean", "description": "Collect visible amenities and expand the public amenities dialog when possible.", "default": true }, "includeImages": { "title": "Include image URLs", "type": "boolean", "description": "Include public image URLs, thumbnail, and imageCount.", "default": true }, "includeReviews": { "title": "Include reviews", "type": "boolean", "description": "Collect a bounded first-page sample of public review cards and rating categories.", "default": true }, "maxReviews": { "title": "Maximum reviews per listing", "minimum": 0, "maximum": 50, "type": "integer", "description": "Maximum public review cards per detail page when includeReviews is enabled.", "default": 10 }, "includeDiagnostics": { "title": "Include diagnostics", "type": "boolean", "description": "When no listing rows are available, emit rich run_diagnostic rows with access status, error codes, and fallback provenance.", "default": true }, "requestDelayMs": { "title": "Request delay (ms)", "minimum": 0, "maximum": 15000, "type": "integer", "description": "Delay before extracting a page. Increase for a gentler request profile.", "default": 0 }, "maxConcurrency": { "title": "Maximum concurrency", "minimum": 1, "maximum": 5, "type": "integer", "description": "Maximum concurrent browser requests. 1 is the gentlest setting.", "default": 1 }, "maxRequestRetries": { "title": "Maximum request retries", "minimum": 0, "maximum": 10, "type": "integer", "description": "Crawlee retries for failed navigations and extraction requests.", "default": 3 }, "requestTimeoutSecs": { "title": "Request timeout (s)", "minimum": 30, "maximum": 300, "type": "integer", "description": "Preferred navigation timeout for browser and HTTP fallback requests.", "default": 120 }, "navigationTimeoutSecs": { "title": "Navigation timeout alias (s)", "minimum": 30, "maximum": 300, "type": "integer", "description": "Backward-compatible alias for requestTimeoutSecs. requestTimeoutSecs takes precedence when both are supplied." }, "requestHandlerTimeoutSecs": { "title": "Request handler timeout (s)", "minimum": 60, "maximum": 900, "type": "integer", "description": "Maximum time for one page's extraction, modal expansion, and review parsing.", "default": 300 }, "proxyConfiguration": { "title": "Proxy configuration", "type": "object", "description": "Optional Apify proxy configuration passed to browser requests. Credentials are never logged. HTTP fallback remains direct if the browser cannot use the proxy." } } }, "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 } } } } } } } } }}OpenAPI is a standard for designing and describing RESTful APIs, allowing developers to define API structure, endpoints, and data formats in a machine-readable way. It simplifies API development, integration, and documentation.
OpenAPI is effective when used with AI agents and GPTs by standardizing how these systems interact with various APIs, for reliable integrations and efficient communication.
By defining machine-readable API specifications, OpenAPI allows AI models like GPTs to understand and use varied data sources, improving accuracy. This accelerates development, reduces errors, and provides context-aware responses, making OpenAPI a core component for AI applications.
You can download the OpenAPI definitions for Airbnb Scraper from the options below:
If you’d like to learn more about how OpenAPI powers GPTs, read our blog post.
You can also check out our other API clients: