{
  "openapi": "3.0.1",
  "info": {
    "title": "Airbnb Availability Calendar By Guest Count & Pets",
    "description": "Airbnb Availability Calendar Scraper: Extract listing availability by date, guest count, and pet preferences. Collect prices, minimum stays, blocked dates, property details, and listing URLs to analyze rental availability, pricing, and booking opportunities.",
    "version": "0.1",
    "x-build-id": "2l9SLKueqRLx2Qa3U"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapapi~airbnb-availability-calendar/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapapi-airbnb-availability-calendar",
        "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/scrapapi~airbnb-availability-calendar/runs": {
      "post": {
        "operationId": "runs-sync-scrapapi-airbnb-availability-calendar",
        "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/scrapapi~airbnb-availability-calendar/run-sync": {
      "post": {
        "operationId": "run-sync-scrapapi-airbnb-availability-calendar",
        "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": {
          "urls": {
            "title": "🔗 Listing URLs or IDs",
            "type": "array",
            "description": "Airbnb room URLs or listing IDs. Add multiple for bulk. Use this or listingUrl.",
            "items": {
              "type": "string"
            }
          },
          "listingUrl": {
            "title": "🔗 Single listing URL or ID",
            "type": "string",
            "description": "Single room URL or numeric ID (alternative to urls)."
          },
          "startDate": {
            "title": "📆 Start Date",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "First day of the range (YYYY-MM-DD).",
            "default": "2025-12-01"
          },
          "endDate": {
            "title": "📆 End Date",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Last day of the range (YYYY-MM-DD).",
            "default": "2025-12-31"
          },
          "enrichWithPricing": {
            "title": "💰 Enrich with Pricing",
            "type": "boolean",
            "description": "Include pricing and booking-related fields in each availability entry.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy Configuration",
            "type": "object",
            "description": "Optional. Default: no proxy. On block: datacenter → residential (3 retries), then residential for remaining requests."
          },
          "adults": {
            "title": "🧑 Adults",
            "minimum": 1,
            "type": "integer",
            "description": "👥 How many adults are travelling. Airbnb re-quotes availability and price for this party size — go over the listing's cap and the date comes back unavailable with the reason \"Maximum number of guests is N\". Default 2 is the value the actor already used invisibly, so an existing run's numbers do not move.",
            "default": 2
          },
          "children": {
            "title": "🧒 Children",
            "minimum": 0,
            "type": "integer",
            "description": "🧒 Children aged 2–12 in the party. They count against the listing's guest cap exactly like adults do, so leaving them out gives you an answer for a smaller party than the one arriving.",
            "default": 0
          },
          "infants": {
            "title": "👶 Infants",
            "minimum": 0,
            "type": "integer",
            "description": "👶 Infants under 2. Airbnb does not count them against the guest cap — the listing's own guest note says so, and this variant returns that note so you can see the rule rather than guess it.",
            "default": 0
          },
          "pets": {
            "title": "🐾 Pets",
            "minimum": 0,
            "type": "integer",
            "description": "🐕 How many pets are coming. On a listing that refuses pets the date comes back unavailable with Airbnb's own line \"This place doesn't allow pets.\" — which is a different problem from a booked-out calendar, and this is how you tell them apart.",
            "default": 0
          },
          "stayDays": {
            "title": "🌙 Nights per stay",
            "minimum": 1,
            "maximum": 28,
            "type": "integer",
            "description": "🛏️ How many nights each check-in date is quoted for; check-out becomes check-in plus this many nights. A party that fits for one night can still be refused for five by the listing's minimum-stay rule, and the refusal sentence names it. Ride-along setting — it is not the reason this variant exists, and 1 keeps the base's existing behaviour exactly.",
            "default": 1
          },
          "explainUnavailableDates": {
            "title": "❓ Ask about every date, and keep the refusal reason",
            "type": "boolean",
            "description": "📅 Ask Airbnb about each date in your range separately, for your party, and keep the sentence and reason code it sends back when a date says no — booked, too many guests, or no pets. On by default, because the reason is the point of this variant. Turn it off for one cheap call per listing, the way the base works today.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}