{
  "openapi": "3.0.1",
  "info": {
    "title": "Airbnb Listing Details Scraper: Full Data & Price by URL",
    "description": "Full data of Airbnb listings from URLs or IDs: description, amenities, house rules, host, photos, registration/permit number and the exact price breakdown for your dates, as numbers.",
    "version": "0.1",
    "x-build-id": "wW1hKBcQ1q1zJ1jG9"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/thelastscraper~airbnb-listing-details/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-thelastscraper-airbnb-listing-details",
        "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/thelastscraper~airbnb-listing-details/runs": {
      "post": {
        "operationId": "runs-sync-thelastscraper-airbnb-listing-details",
        "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/thelastscraper~airbnb-listing-details/run-sync": {
      "post": {
        "operationId": "run-sync-thelastscraper-airbnb-listing-details",
        "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": {
          "actorVariant": {
            "title": "Actor variant",
            "type": "string",
            "description": "Internal: which Store Actor this is (do not change).",
            "default": "listing-details"
          },
          "where": {
            "title": "Listings: Airbnb listing URLs or IDs",
            "type": "array",
            "description": "One per line: a listing URL (https://www.airbnb.com/rooms/123, any Airbnb domain) or a listing ID.",
            "items": {
              "type": "string"
            }
          },
          "checkIn": {
            "title": "Check-in date",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "YYYY-MM-DD. Leave both dates empty for automatic dates (30 days from today, 5 nights): Airbnb only quotes a price for specific dates."
          },
          "checkOut": {
            "title": "Check-out date",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "YYYY-MM-DD, after the check-in date. Empty with an empty check-in = automatic dates (each record says so in scrape.dates_auto)."
          },
          "adults": {
            "title": "Adults",
            "minimum": 0,
            "maximum": 16,
            "type": "integer",
            "description": "Adult guests. Airbnb keeps the listings that accommodate at least this many people (4 also brings listings for 5, 6 or more guests) and quotes each price for exactly this party. 0 = any number of guests: no capacity filter, each price quoted for one guest (cannot be combined with Children).",
            "default": 2
          },
          "children": {
            "title": "Children",
            "minimum": 0,
            "maximum": 15,
            "type": "integer",
            "description": "Ages 2-12. They count toward the listing's capacity like adults and pay the extra-guest fee in the quote.",
            "default": 0
          },
          "infants": {
            "title": "Infants",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Under 2. They do not count toward capacity and stay free.",
            "default": 0
          },
          "pets": {
            "title": "Pets",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Only pet-friendly listings are returned, and the quote includes the host's pet fee (folded into the nightly rate).",
            "default": 0
          },
          "currency": {
            "title": "Currency",
            "pattern": "^[A-Z]{3}$",
            "type": "string",
            "description": "ISO 4217 code (default USD). All amounts are returned as numbers in this currency.",
            "default": "USD"
          },
          "language": {
            "title": "Language of the texts",
            "enum": [
              "en",
              "sq",
              "ar",
              "hy",
              "az",
              "bs",
              "bg",
              "ca",
              "zh-HK",
              "zh",
              "zh-TW",
              "hr",
              "cs",
              "da",
              "nl",
              "nl-BE",
              "en-AU",
              "en-CA",
              "en-GB",
              "et",
              "fi",
              "fr",
              "fr-CA",
              "ka",
              "de",
              "el",
              "he",
              "hi",
              "hu",
              "is",
              "id",
              "ga",
              "it",
              "ja",
              "kn",
              "ko",
              "lv",
              "lt",
              "mk",
              "ms",
              "mt",
              "mr",
              "sr-ME",
              "no",
              "pl",
              "pt",
              "pt-BR",
              "pt-PT",
              "ro",
              "ru",
              "sr",
              "sk",
              "sl",
              "es",
              "es-AR",
              "es-XL",
              "es-419",
              "sw",
              "sv",
              "tl",
              "th",
              "tr",
              "uk",
              "vi",
              "xh",
              "zu"
            ],
            "type": "string",
            "description": "Everything is collected and parsed in English. Another language adds one more listing page per listing (~28 KB, no extra charge) and fills the `localized` block: title, description, amenities and house rules in that language (Airbnb's machine translation when the host wrote in another one; the originals stay in the main fields). In Spreadsheet output, the columns title_localized and description_localized.",
            "default": "en"
          },
          "outputFormat": {
            "title": "Output format",
            "enum": [
              "spreadsheet",
              "full_json"
            ],
            "type": "string",
            "description": "Spreadsheet (default): one flat row per listing with 98 curated columns (100 with a language) in a useful order (url first, listing_id as text, prices as numbers, key amenities as true/false, estimates prefixed est_), ready for Excel, Google Sheets or CSV. Full JSON: the complete nested record of every listing (~2,800 fields once flattened: line items, every amenity and photo, description, field sources), for developers.",
            "default": "spreadsheet"
          },
          "omitPersonalData": {
            "title": "Omit personal data",
            "type": "boolean",
            "description": "Set host and co-host names, photos, bios, 'lives in' and work to null, and replace the host's name with \"the host\" in Airbnb-generated texts (price-drop notice, listing highlights). GDPR-friendly. What stays: the numeric host id, business data (ratings, Superhost, years hosting, license numbers) and the listing description as the host wrote it.",
            "default": false
          },
          "photos": {
            "title": "Photos",
            "enum": [
              "full",
              "preview",
              "none"
            ],
            "type": "string",
            "description": "Photo URLs in each listing (the Actor never downloads image files). Full gallery: every photo; when Airbnb sends a listing with only its first 5 photos (common for regular homes at busy times), the Actor also reads the listing's web page: one more request and about 0.5-0.9 MB per such listing, so runs take longer. Preview: the photos Airbnb sends (up to 5 plus the cover when it trims the gallery; photo_count is then empty and photos_complete false), faster. None: no photo list (the cover photo stays). The price is the same either way. Empty = Preview."
          },
          "estimateCleaning": {
            "title": "Estimate the cleaning fee (+2 requests per listing)",
            "type": "boolean",
            "description": "Airbnb folds cleaning and service fees into the nightly rate. With this on, 2 extra price quotes per listing (different stay lengths) estimate the fixed per-stay part (estimates.cleaning_fee_estimated). Off by default: it adds 2 requests to the 3-4 of a listing (about +50 % run time) for a low-confidence estimate.",
            "default": false
          },
          "hostProfile": {
            "title": "Host profile",
            "enum": [
              "off",
              "count",
              "full"
            ],
            "type": "string",
            "description": "Count (default, free): one small request per unique host (~1.9 KB) for the host's total number of Airbnb listings, what tells an individual from a management company (it feeds the professional-host flag). Full: the host's whole public profile (~7 KB per unique host): listings, years on Airbnb, sign-up month, verifications and the business verification badge; charged as host-profile, once per unique host ($1.00 per 1,000 hosts on the Free plan). Languages, 'lives in', work and the business label come free from the listing page's host card when it shows them (it shows 2 of the host's lines at a time; 'lives in' and work are empty with Omit personal data). Off: no profile requests.",
            "default": "count"
          },
          "hostFeePct": {
            "title": "Host fee (for net revenue)",
            "pattern": "^(0(\\.\\d+)?)?$",
            "type": "string",
            "description": "Fraction Airbnb keeps from the host, used for estimates.revenue_net_of_platform_fee, e.g. 0.155. Empty = not computed."
          },
          "proxyStrategy": {
            "title": "Proxy strategy",
            "enum": [
              "auto",
              "datacenter",
              "residential"
            ],
            "type": "string",
            "description": "Auto (recommended): starts with Apify datacenter proxies and switches to residential proxies only if Airbnb starts blocking (2 blocks in the last 50 requests: a request blocked on 2 datacenter IPs makes its third attempt through residential); after 300 clean requests on residential it tries datacenter once more. If residential proxies are not available to the run, it slows down instead. Datacenter / Residential: always that kind. Proxy traffic is not billed to you separately: the event prices include it. The log, the status message and the OUTPUT record show requests, blocks and estimated traffic per proxy level.",
            "default": "auto"
          },
          "proxyCountry": {
            "title": "Residential proxy country",
            "pattern": "^([A-Za-z]{2})?$",
            "type": "string",
            "description": "Optional 2-letter country code for residential proxies. Empty = US, like the datacenter proxies: Airbnb shows totals before taxes to visitors outside the EU, so every run's prices mean the same. An EU country (e.g. DE) makes Airbnb show totals with taxes (the taxes column fills in). Prices are always in the selected currency."
          },
          "retryLocationAb": {
            "title": "Retry listings without neighborhood text",
            "type": "boolean",
            "description": "Airbnb hides the neighborhood name and area text for about half of the sessions (an A/B test). When on, such listings are fetched again with a new session, up to 'Listing page retries' times (about +0.5 requests per listing and retry).",
            "default": false
          },
          "pdpRetryAttempts": {
            "title": "Listing page retries",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Airbnb sometimes (about 1 in 9 requests) sends a listing page with only 5 of its photos. Such pages are fetched again with a new session up to this many times and the most complete answer is kept (also used by the neighborhood-text retry above). 0 = never retry.",
            "default": 1
          },
          "maxConcurrency": {
            "title": "Parallel listings",
            "minimum": 20,
            "maximum": 32,
            "type": "integer",
            "description": "Listings scraped at the same time, each through its own Apify Proxy IP with its own pause (a listing's price quote, policies and calendar are requested together with its page, as a browser loads it). 20 to 32; the default, 32, scrapes about 5 listings a second with the default 4 GB of memory. The minimum keeps a run's duration, which the event prices include, bounded. With your own proxy URLs or without a proxy (one IP), the pause is shared and more parallel listings are not faster.",
            "default": 32
          },
          "delaySeconds": {
            "title": "Pause between requests",
            "minimum": 1,
            "maximum": 2,
            "type": "integer",
            "description": "Minimum seconds between two requests from the same IP (plus up to 1 s of random jitter); a listing's quote, policies and calendar go out with its page. 1 (the default, the fastest) or 2. If Airbnb blocks, the Actor slows down and changes proxies by itself.",
            "default": 1
          },
          "maxRequests": {
            "title": "Max requests to Airbnb",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on requests to airbnb.com for the whole run (retries included). 0 = no cap.",
            "default": 0
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}