{
  "openapi": "3.0.1",
  "info": {
    "title": "Airbnb Scraper - Listings, Prices & Ratings API, No 240 Cap",
    "description": "Scrape Airbnb search results as clean JSON: price, nightly/total breakdown, rating, coordinates, photos, room type. Splits large searches past Airbnb's 240-listing cap. Optional guest reviews (no reviewer identity), availability calendars with an occupancy proxy, and per-listing detail enrichment.",
    "version": "1.1",
    "x-build-id": "9Ip6kbUqyRkfJFBaF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/feedsmith~airbnb-listings-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-feedsmith-airbnb-listings-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/feedsmith~airbnb-listings-scraper/runs": {
      "post": {
        "operationId": "runs-sync-feedsmith-airbnb-listings-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/feedsmith~airbnb-listings-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-feedsmith-airbnb-listings-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": {
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Free-text places to search, e.g. \"Lisbon, Portugal\" or \"Austin, Texas\". Each location becomes its own search (results are combined and de-duplicated). Leave empty if you use Start URLs or Listing URLs instead. If everything is empty, a small default search (Lisbon) runs.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Airbnb search URLs to use as-is instead of (or in addition to) Locations, e.g. a URL you copied from your browser after setting filters/map bounds on airbnb.com. All of the URL's own query parameters are preserved.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "listingUrls": {
            "title": "Listing URLs or IDs",
            "type": "array",
            "description": "Airbnb listing links (https://www.airbnb.com/rooms/12345) or bare numeric IDs. Use this to pull reviews, the availability calendar or details for specific listings without running a search. The per-listing fee applies only when Include listing page details is on (the record then carries the full listing data); with reviews and/or calendar alone only those add-ons are charged.",
            "items": {
              "type": "string"
            }
          },
          "checkIn": {
            "title": "Check-in date",
            "type": "string",
            "description": "YYYY-MM-DD. Leave both dates empty to search with no dates (Airbnb then shows flexible-date pricing). Must be provided together with Check-out."
          },
          "checkOut": {
            "title": "Check-out date",
            "type": "string",
            "description": "YYYY-MM-DD, must be after Check-in. Leave both dates empty to search with no dates."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Number of adult guests.",
            "default": 2
          },
          "children": {
            "title": "Children",
            "minimum": 0,
            "maximum": 16,
            "type": "integer",
            "description": "Number of children (ages 2-12).",
            "default": 0
          },
          "infants": {
            "title": "Infants",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Number of infants (under 2).",
            "default": 0
          },
          "pets": {
            "title": "Pets",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Number of pets travelling with the guest.",
            "default": 0
          },
          "priceMin": {
            "title": "Minimum nightly price",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Only listings priced at or above this per-night amount, in the selected Currency."
          },
          "priceMax": {
            "title": "Maximum nightly price",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Only listings priced at or below this per-night amount, in the selected Currency."
          },
          "minBedrooms": {
            "title": "Minimum bedrooms",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Only listings with at least this many bedrooms."
          },
          "minBeds": {
            "title": "Minimum beds",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Only listings with at least this many beds."
          },
          "minBathrooms": {
            "title": "Minimum bathrooms",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Only listings with at least this many bathrooms."
          },
          "roomType": {
            "title": "Room type",
            "enum": [
              "any",
              "entire_home",
              "private_room"
            ],
            "type": "string",
            "description": "Restrict the search to one listing type.",
            "default": "any"
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "3-letter currency code Airbnb should price results in, e.g. USD, EUR, GBP.",
            "default": "USD"
          },
          "locale": {
            "title": "Locale",
            "type": "string",
            "description": "Language/locale code for listing text, e.g. en, pt, es.",
            "default": "en"
          },
          "maxItems": {
            "title": "Max listings",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many listings. You are only charged for listings actually saved. Default 100 keeps a first test run around $0.12; raise it (thousands are fine) for full-market exports.",
            "default": 100
          },
          "exhaustive": {
            "title": "Exhaustive mode (bypass the 240-listing cap)",
            "type": "boolean",
            "description": "When a search hits Airbnb's page limit (~240-270 results), automatically split it into price-band and then map-quadrant sub-searches and merge the de-duplicated results, up to Max listings. Turn off to fetch only what one plain search page returns.",
            "default": true
          },
          "includeDetails": {
            "title": "Include listing page details",
            "type": "boolean",
            "description": "Fetch each listing's own page for description, amenities, house rules, host name/superhost flag, bedrooms/beds/baths, sub-ratings and all photo URLs. Adds one extra request per listing and is charged as a separate enrichment event.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Detail fetch concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many listing pages to fetch in parallel when Include listing page details is on.",
            "default": 3
          },
          "includeReviews": {
            "title": "Include guest reviews",
            "type": "boolean",
            "description": "Output one record per review (type \"review\") for every listing: date, rating, language, text, translation and the host's reply. Reviewer names, photos and profile links are never collected. Charged per review.",
            "default": false
          },
          "maxReviewsPerListing": {
            "title": "Max reviews per listing",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Stop after this many reviews for each listing (50 reviews = one request).",
            "default": 50
          },
          "reviewsSort": {
            "title": "Review order",
            "enum": [
              "recent",
              "relevant"
            ],
            "type": "string",
            "description": "Which reviews to take first when a listing has more than the maximum.",
            "default": "recent"
          },
          "reviewsSince": {
            "title": "Only reviews since",
            "type": "string",
            "description": "Optional date (YYYY-MM-DD). Reviews written before it are skipped; with most-recent-first order the scan stops at the first older review."
          },
          "includeCalendar": {
            "title": "Include availability calendar",
            "type": "boolean",
            "description": "Add a per-day availability calendar to each listing (available, minimum and maximum nights) plus availableDaysNext30, availableDaysNext90 and occupancyProxy. Charged once per listing calendar fetched.",
            "default": false
          },
          "calendarMonths": {
            "title": "Calendar months",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "How many months ahead, starting today, the calendar and its summary cover. A month counts as at least 30 days, so the default 3 months always covers the 90-day summary; with 1 or 2 months availableDaysNext90 is null.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy (datacenter, included in every Apify plan) or your own proxy URLs. When set, every request of the run (search pages, listing pages, review and calendar calls, JavaScript bundle reads) goes through it from the first request. Airbnb blocks some datacenter IPs outright, so Apify Proxy is recommended; a run without a proxy that gets blocked switches to Apify Proxy automatically (see Fall back to Apify Proxy when blocked).",
            "default": {
              "useApifyProxy": false
            }
          },
          "autoProxyFallback": {
            "title": "Fall back to Apify Proxy when blocked",
            "type": "boolean",
            "description": "When the run has no proxy and Airbnb blocks it (a streak of 403/429 responses), switch to Apify Proxy (datacenter) for the rest of the run instead of giving up. Turn off to never use Apify Proxy; blocked pages are then retried with fresh sessions only.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}