{
  "openapi": "3.0.1",
  "info": {
    "title": "Airbnb Advanced Scraper",
    "description": "Unlock the full potential of Airbnb data with our advanced scraper on Apify. Dive deep into listings and experiences, effortlessly collecting detailed insights to empower your market analysis or project. Try now!\"",
    "version": "2.0",
    "x-build-id": "OLbSuHQ45tIbxC7wT"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/gooyer.co~airbnb/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-gooyer.co-airbnb",
        "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/gooyer.co~airbnb/runs": {
      "post": {
        "operationId": "runs-sync-gooyer.co-airbnb",
        "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/gooyer.co~airbnb/run-sync": {
      "post": {
        "operationId": "run-sync-gooyer.co-airbnb",
        "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": [
          "startUrls",
          "proxyUrls"
        ],
        "properties": {
          "startUrls": {
            "title": "Start Airbnb URLs",
            "minItems": 1,
            "uniqueItems": true,
            "type": "array",
            "description": "Airbnb URLs to scrape. Mix any of the six supported shapes: /rooms/<id>, /s/<city>/homes, /s/<city>/experiences, /experiences/<id>, /s/<city>/services, /services/<id>. To apply filters (check-in/out dates, guest counts, price range, property type, bedrooms, bathrooms, service type), just copy a URL from the Airbnb UI with your filters set — the scraper reads them straight from the URL.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "pagination": {
            "title": "Pagination Limit",
            "minimum": 0,
            "maximum": 40,
            "type": "integer",
            "description": "Number of pages per search URL. 1 = first page only (fastest, cheapest). 0 = follow every page until Airbnb stops returning a nextPageCursor. Each page yields up to ~18 stays or ~20 experiences.",
            "default": 1
          },
          "pdpPage": {
            "title": "Enqueue full rooms PDP for every stays-search hit",
            "type": "boolean",
            "description": "When on, every listing a /s/<city>/homes URL returns is queued as a separate /rooms/<id> scrape for the full 80+ field record. Bills at stays-pdp-item ($0.003) per listing, in addition to the stays-search-item ($0.0005) for the initial hit. Leave off if you only need search-card data.",
            "default": false
          },
          "reviews": {
            "title": "Fetch reviews on any PDP (stays, experiences, or services)",
            "type": "boolean",
            "description": "One switch for reviews across all three product lines. On stays PDPs: first 24 reviews sorted BEST_QUALITY. On experience and service PDPs: full review list sorted by recency. Bills separately per PDP type: stays-pdp-reviews ($0.002), experiences-pdp-reviews ($0.002), services-pdp-reviews ($0.002).",
            "default": false
          },
          "scrapeCalendar": {
            "title": "Fetch 12-month availability calendar on rooms PDPs",
            "type": "boolean",
            "description": "Fetch the 12-month booking calendar showing available / unavailable / min-stay per day. Unique to this scraper — no other Apify Airbnb scraper exposes this. Bills at stays-pdp-calendar ($0.002) per PDP.",
            "default": false
          },
          "scrapeSimilarListings": {
            "title": "Fetch similar-listings carousel on rooms PDPs",
            "type": "boolean",
            "description": "Fetch the ~10 similar listings Airbnb recommends at the bottom of each rooms PDP — useful for competitive-set construction. Bills at stays-pdp-similar ($0.001) per PDP.",
            "default": false
          },
          "experiencePage": {
            "title": "Enqueue full experience PDP for every experiences-search hit",
            "type": "boolean",
            "description": "When on, every hit a /s/<city>/experiences URL returns is queued as a /experiences/<id> scrape for the full PDP record. Bills at experiences-pdp-item ($0.005) per experience, in addition to experiences-search-item ($0.001) for the initial hit. This scraper is the only one on Apify that covers Experiences at all.",
            "default": false
          },
          "servicePage": {
            "title": "Enqueue full service PDP for every services-search hit",
            "type": "boolean",
            "description": "When on, every hit a /s/<city>/services URL returns is queued as a /services/<id> scrape for the full PDP record. Bills at services-pdp-item ($0.005) per service, in addition to services-search-item ($0.001) for the initial hit. Services is Airbnb's 2025 launch covering vetted local professionals — photographers, chefs, trainers, massage, etc. This scraper is the only one on Apify with Services support.",
            "default": false
          },
          "proxyUrls": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Residential proxy strongly recommended. Airbnb runs DataDome as bot defense — residential IPs pass clean, datacenter IPs get challenged. The default setting uses Apify's residential pool."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}