{
  "openapi": "3.0.1",
  "info": {
    "title": "KAYAK Car Rental Scraper",
    "description": "[💰 $1.3 / 1K] Extract car rental offers from KAYAK — vehicle class, rental agency, daily and total prices, mileage and fuel policies, cancellation terms, and direct booking links. Search by location and dates or paste KAYAK URLs.",
    "version": "1.0",
    "x-build-id": "o5uE5ykI7llje3Z8y"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidcode~kayak-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidcode-kayak-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/solidcode~kayak-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidcode-kayak-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/solidcode~kayak-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidcode-kayak-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": {
          "pickupLocation": {
            "title": "Pickup Location",
            "type": "string",
            "description": "City, airport code, or place to pick up the car (e.g. 'Los Angeles', 'LAX', 'Paris'). Leave the Advanced URLs field empty to use this.",
            "default": "Los Angeles"
          },
          "dropoffLocation": {
            "title": "Drop-off Location",
            "type": "string",
            "description": "Where to return the car for a one-way rental (e.g. 'San Diego', 'SAN'). Leave empty to return the car to the same place you picked it up."
          },
          "pickupDate": {
            "title": "Pickup Date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Date you pick up the car, in YYYY-MM-DD format (e.g. 2026-07-15). Leave empty to default to two weeks from today. Dates in the past are automatically moved forward."
          },
          "pickupTime": {
            "title": "Pickup Time",
            "enum": [
              "00:00",
              "06:00",
              "07:00",
              "08:00",
              "09:00",
              "10:00",
              "11:00",
              "12:00",
              "13:00",
              "14:00",
              "15:00",
              "16:00",
              "17:00",
              "18:00",
              "19:00",
              "20:00",
              "21:00",
              "22:00",
              "23:00"
            ],
            "type": "string",
            "description": "Time of day you pick up the car.",
            "default": "10:00"
          },
          "returnDate": {
            "title": "Return Date",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Date you return the car, in YYYY-MM-DD format. Leave empty to default to one week after the pickup date. Must be on or after the pickup date."
          },
          "returnTime": {
            "title": "Return Time",
            "enum": [
              "00:00",
              "06:00",
              "07:00",
              "08:00",
              "09:00",
              "10:00",
              "11:00",
              "12:00",
              "13:00",
              "14:00",
              "15:00",
              "16:00",
              "17:00",
              "18:00",
              "19:00",
              "20:00",
              "21:00",
              "22:00",
              "23:00"
            ],
            "type": "string",
            "description": "Time of day you return the car.",
            "default": "10:00"
          },
          "driverAge": {
            "title": "Driver Age (recorded, not priced)",
            "minimum": 18,
            "maximum": 99,
            "type": "integer",
            "description": "Age of the main driver. It is written into the KAYAK search URL the run uses and sent with the search, and that URL is on every row, so your export records which age it was collected for. It does NOT change what you get back: KAYAK's US site has no driver-age option of its own and quotes the same cars at the same prices for every age from 18 to 99, with no young-driver surcharge published. Those surcharges are set by the rental agency at the counter.",
            "default": 30
          },
          "sortBy": {
            "title": "Sort Order",
            "enum": [
              "recommended",
              "cheapest",
              "distance",
              "best"
            ],
            "type": "string",
            "description": "How to rank the rental offers. Cheapest first orders every offer row by total price, lowest first. The other three keep KAYAK's own ranking.",
            "default": "recommended"
          },
          "carType": {
            "title": "Car Types",
            "type": "array",
            "description": "Only keep these vehicle classes in the results. Leave empty to include every car type. Note: KAYAK has no server-side car-type filter, so the actor fetches the search and keeps only the matching offers — pick a smaller Max Results when filtering to a rare class.",
            "items": {
              "type": "string",
              "enum": [
                "SMALL",
                "MEDIUM",
                "LARGE",
                "SUV",
                "VAN",
                "LUXURY",
                "SPECIAL",
                "PICKUPTRUCK",
                "CONVERTIBLE"
              ],
              "enumTitles": [
                "Small / Economy",
                "Medium / Intermediate",
                "Large / Full-size",
                "SUV",
                "Van / Minivan",
                "Luxury",
                "Special",
                "Pickup truck",
                "Convertible"
              ]
            }
          },
          "currency": {
            "title": "Currency",
            "enum": [
              "USD",
              "EUR",
              "GBP",
              "CAD",
              "AUD",
              "JPY",
              "CHF",
              "SEK",
              "NOK",
              "DKK",
              "PLN",
              "BRL",
              "MXN",
              "INR",
              "CNY",
              "HKD",
              "SGD",
              "NZD",
              "ZAR",
              "AED"
            ],
            "type": "string",
            "description": "Currency to price the results in (ISO 4217 code). Every price in the output is converted to your choice, and each row's 'currencyCode' field confirms what its prices are in. Rows also carry 'providerCurrencyCode' — the currency the rental company itself bills in — whenever that differs from the price you see.",
            "default": "USD"
          },
          "maxResults": {
            "title": "Max Results",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of rental offers to collect per search. Set to 0 to collect every available offer. Pages are sized to the limit you set, so a small value returns close to that many offers — expect a modest overshoot (measured at up to 25%) because a page already in flight is never cut short.",
            "default": 50
          },
          "startUrls": {
            "title": "KAYAK Car Rental URLs",
            "type": "array",
            "description": "Advanced: paste one or more full KAYAK car-rental result URLs to scrape them directly (e.g. 'https://www.kayak.com/cars/Los-Angeles,CA/2026-07-15/2026-07-22'). When provided, these override the search fields above. Expired dates are automatically moved forward.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}