# KAYAK Car Rental Scraper — Prices, Agencies & Deals (`haketa/kayak-car-rental-scraper`) Actor

Scrape car rental prices from KAYAK worldwide — car model, class, rental agency, price per day and total, transmission, seats, mileage and cancellation policy. Compare deals by airport and dates. Independent tool, not affiliated with KAYAK.

- **URL**: https://apify.com/haketa/kayak-car-rental-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** Travel, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

<h1 align="center">KAYAK Car Rental Scraper</h1>

<p align="center"><b>Export live car rental prices from KAYAK — car model, class, rental agency, price per day and total, transmission, seats, bags, mileage and cancellation policy — as clean, structured data. No code, no captcha.</b></p>

<p align="center">
  <img src="https://img.shields.io/badge/Platform-Apify-1a1a1a?style=for-the-badge" alt="Apify">
  <img src="https://img.shields.io/badge/Niche-Car%20Rentals-0aa06e?style=for-the-badge" alt="Car rentals">
  <img src="https://img.shields.io/badge/No--code-friendly-2f6fed?style=for-the-badge" alt="No-code">
  <img src="https://img.shields.io/badge/Coverage-Worldwide-f59e0b?style=for-the-badge" alt="Worldwide">
  <img src="https://img.shields.io/badge/Export-JSON%20%C2%B7%20CSV%20%C2%B7%20Excel%20%C2%B7%20API-8b5cf6?style=for-the-badge" alt="Export">
</p>

***

### ⚡ At a glance

| | |
|---|---|
| 🚗 **Coverage** | Rental cars from dozens of agencies (Hertz, Avis, Enterprise, Budget, Sixt, Alamo…) worldwide |
| 💷 **Prices** | Total and **per-day** price with currency — sort and filter to find the cheapest deal |
| 🔧 **Full specs** | Car, class, **transmission, seats, bags, doors, fuel, air-con** — not just a price |
| 📜 **Policies** | Mileage (unlimited / limited), free cancellation and fuel policy per offer |
| 🔎 **Targeting** | By airport code or city, dates, times, driver age and one-way trips |
| 🚫 **No barriers** | No captcha to solve, no login, no browser — just the data |
| ⚡ **Fast & cheap** | Straight from KAYAK's live search feed — seconds per location |

***

### What is the KAYAK Car Rental Scraper?

**KAYAK Car Rental Scraper** turns KAYAK's live car-rental metasearch into a clean dataset you can actually work with. KAYAK compares prices from **dozens of rental agencies at once**; this Actor pulls those comparison results — every car, every agency, every price — into a structured table.

For each pickup location and date range you get a **ready-to-use list of car rental offers**: the car and its class, the agency, the **price per day and total**, the transmission, seats and bags, the mileage and cancellation policy, and a direct booking link.

Whether you're a **travel agency or OTA** monitoring rates, a **price-comparison or deals site** building a feed, a **data analyst** tracking the rental market, or a traveler hunting the best deal, this scraper gives you the raw material in seconds — with no captcha and no page-by-page clicking.

> 💡 **Why it stands out:** most rental scrapers give you a price and a name. This one returns the **full vehicle spec** (transmission, seats, bags, doors, fuel), the **mileage and cancellation policy**, and both **per-day and total** prices across **every agency** — so you can truly compare deals.

***

### ✨ Key features

- 🌍 **Anywhere** — search by **airport code** (MIA, LAX, LHR) or **city name** (Miami, London, Orlando). Add several locations at once.
- 💰 **Full price comparison** — every agency's offer for each car, with **per-day and total** price and currency.
- 🔧 **Complete vehicle specs** — car model, class, transmission, seats, bags, doors, fuel type, air-conditioning.
- 📜 **Rental policies** — mileage (unlimited/limited), free-cancellation window and fuel policy per offer.
- 🧭 **Flexible search** — pickup & drop-off dates and times, **one-way** rentals, driver age, sort by price or recommendation.
- 🔗 **Direct booking links** — deep links to book each offer, plus the underlying rental site.
- 📤 **Export anywhere** — JSON, CSV, Excel or HTML, or pull straight from the Apify API into Sheets, Airtable, a dashboard or a webhook.

***

### 🎯 Use cases

<details open>
<summary><b>Travel agencies, OTAs & affiliates</b></summary>

- Monitor **competitor rates** across agencies and locations.
- Build a **car-rental price feed** for your site or app with full specs.
- Find the **cheapest deal** per car class for your customers.

</details>

<details>
<summary><b>Price-comparison & deals sites</b></summary>

- Aggregate rental offers with per-day and total prices and booking links.
- Track price movements by location and date on a schedule.

</details>

<details>
<summary><b>Market research & analytics</b></summary>

- Analyse **pricing by agency, car class, city and season**.
- Measure availability and supply across airports.
- Feed clean rental data into a **dashboard or model**.

</details>

<details>
<summary><b>Travelers & travel planners</b></summary>

- Compare every agency's price for your exact dates in one export.
- Filter to **unlimited mileage** or **free cancellation** offers.

</details>

***

### 🚀 How it works

1. **Enter locations** — airport codes or city names (one or many).
2. **Pick dates** — pickup and drop-off dates (and times, driver age, one-way if needed).
3. **Run it** — the Actor searches KAYAK, waits for every agency to respond, and returns a clean dataset.
4. **Export** — JSON, CSV, Excel or API.

No accounts, captchas or scripts — just fill in the form and press **Start**.

***

### 📥 Input

| Field | Type | Description |
|---|---|---|
| `pickupLocations` | list | Airport codes (`MIA`, `LAX`) or city names (`Miami`, `London`). Each is searched separately. |
| `dropoffLocation` | text | Optional — for one-way rentals, the return location. |
| `pickupDate` / `dropoffDate` | text | `YYYY-MM-DD`. Leave empty for dates ~2 weeks out. |
| `pickupHour` / `dropoffHour` | number | Pickup/return time, 0–23 (default 12). |
| `driverAge` | number | Driver age (affects pricing). |
| `sort` | select | Recommended, price ↑ or price ↓. |
| `priceMode` | select | Total price or price per day. |
| `maxItemsPerSearch` | number | Max cars per location (0 = all). |
| `proxyConfiguration` | proxy | Residential proxies (required); defaults to US residential. |

#### Example inputs

**1. Cheapest cars at Miami airport**

```json
{
  "pickupLocations": ["MIA"],
  "pickupDate": "2026-09-20",
  "dropoffDate": "2026-09-24",
  "sort": "price_a",
  "maxItemsPerSearch": 100
}
```

**2. Compare several airports**

```json
{
  "pickupLocations": ["LAX", "SFO", "LAS"],
  "pickupDate": "2026-10-05",
  "dropoffDate": "2026-10-12",
  "maxItemsPerSearch": 80
}
```

**3. One-way rental, London → Paris**

```json
{
  "pickupLocations": ["London"],
  "dropoffLocation": "Paris",
  "pickupDate": "2026-11-01",
  "dropoffDate": "2026-11-05"
}
```

***

### 📤 Output

Each car rental offer is one row. Example:

```json
{
  "carName": "Toyota RAV4",
  "carClass": "Intermediate SUV",
  "carCategory": "SUV",
  "transmission": "Automatic",
  "seats": 5,
  "bags": 2,
  "doors": 5,
  "fuelType": "Gas",
  "airConditioning": true,
  "agency": "CarWiz",
  "bookingSite": "Expedia",
  "dayPrice": 7,
  "totalPrice": 27,
  "currency": "USD",
  "priceDisplay": "$27",
  "paymentType": "postpay",
  "mileagePolicy": "Unlimited miles",
  "fuelPolicy": "full-to-full",
  "cancellation": "Free cancellation (48h)",
  "freeCancellation": true,
  "isCheapest": true,
  "image": "https://content.r9cdn.net/rimg/car-images/…png",
  "bookingUrl": "https://www.kayak.com/book/car?…",
  "pickupLocation": "MIA",
  "pickupDate": "2026-09-20",
  "dropoffDate": "2026-09-24"
}
```

#### Output fields

**Coverage key:** 🟢 almost every offer · 🟡 when the agency provides it

##### 🚗 Vehicle

| Field | Coverage | Description |
|---|---|---|
| `carName` | 🟢 | Car model (or "or similar") |
| `carClass` | 🟢 | Class (Economy, Intermediate SUV, Luxury…) |
| `carCategory` | 🟡 | Category group |
| `transmission` | 🟢 | Automatic / Manual |
| `seats` / `bags` / `doors` | 🟢 | Capacity |
| `fuelType` | 🟢 | Gas, Diesel, Electric, Hybrid |
| `airConditioning` | 🟢 | Air-con flag |

##### 💰 Price & agency

| Field | Coverage | Description |
|---|---|---|
| `agency` | 🟢 | Rental agency (Hertz, Avis, Sixt…) |
| `bookingSite` | 🟢 | Site the price is booked through |
| `dayPrice` / `totalPrice` | 🟢 | Per-day and total price as numbers |
| `currency` / `priceDisplay` | 🟢 | Currency and formatted price |
| `paymentType` | 🟡 | Prepay / pay at desk |
| `isCheapest` / `isBestValue` | 🟡 | KAYAK's cheapest / best-value flags |

##### 📜 Policies & links

| Field | Coverage | Description |
|---|---|---|
| `mileagePolicy` | 🟢 | Unlimited or limited miles |
| `fuelPolicy` | 🟡 | e.g. full-to-full |
| `cancellation` / `freeCancellation` | 🟢 | Cancellation terms |
| `bookingUrl` | 🟢 | Direct booking link |
| `bookingSiteUrl` | 🟡 | Underlying rental site |
| `image` | 🟢 | Car image |
| `pickupLocation` / dates | 🟢 | Search context |

***

### 🔎 Sample searches

| Goal | How |
|---|---|
| 💸 Cheapest car at an airport | `pickupLocations: [MIA]`, `sort: price_a` |
| 🌆 Compare airports | `pickupLocations: [LAX, SFO, LAS]` |
| 🔁 One-way trip | `pickupLocations: [Miami]`, `dropoffLocation: Orlando` |
| 🧳 Long trip, per-day view | `priceMode: per-day` |
| 🏙️ Search a city | `pickupLocations: [London]` |

***

### 🔌 Integrations & automation

- **Google Sheets / Excel** — one-click export or scheduled sync.
- **Airtable, Notion, BI tools** — via Apify integrations or webhooks.
- **Zapier / Make** — trigger flows on price changes.
- **API & webhooks** — pull the dataset into your app or warehouse.
- **Schedules** — run daily to track rental prices over time.

***

### ❓ FAQ

**Which locations can I search?**
Any KAYAK car-rental location worldwide — pass an airport code (MIA, LHR) or a city name (Miami, London). City names are resolved automatically.

**Do I get every agency's price?**
Yes — KAYAK compares dozens of agencies, and the Actor returns each car offer with its agency, price and full specs, so you can compare.

**Do I get per-day and total prices?**
Both. `dayPrice` and `totalPrice` are returned as clean numbers, plus a formatted `priceDisplay` and the `currency`.

**Can I do one-way rentals?**
Yes — set a `dropoffLocation` different from the pickup.

**Which currency are prices in?**
Prices come back in the market's default currency (USD for US searches). The `currency` field reflects the actual currency of each price.

**Do I need proxies?**
Residential proxies are required and enabled by default (US residential). No browser or captcha-solving is needed.

**How many results can I get?**
Set `maxItemsPerSearch` (0 = all). A busy airport returns hundreds of offers across agencies.

**In what formats can I export?**
JSON, CSV, Excel, HTML, plus the Apify API and integrations.

***

### 💡 Tips

- Start with one airport and `maxItemsPerSearch: 100` to preview, then scale up.
- Use `sort: price_a` to surface the cheapest deals first.
- Run on a **schedule** to track how prices change as the date approaches.
- Filter your export to **unlimited mileage** or **free cancellation** offers.
- Compare several airports in one run to find the cheapest city to rent in.

***

### ⚠️ Limitations & responsible use

- Prices are live and change constantly; a run is a snapshot at that moment.
- Availability and some fields depend on what each agency publishes.
- Currency follows the market default unless the location implies otherwise.
- Use the data responsibly and in line with applicable laws and the source's terms. This tool is intended for price comparison, market research and travel planning.

***

<p align="center"><i>This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by KAYAK or Booking Holdings. All trademarks are the property of their respective owners.</i></p>

<p align="center"><b>Compare every car rental deal in seconds. Enter a location, press Start. 🚗</b></p>

# Actor input Schema

## `pickupLocations` (type: `array`):

Airport codes (e.g. "MIA", "LAX", "JFK") or city names (e.g. "Miami", "London"). Each location is searched separately.

## `dropoffLocation` (type: `string`):

For one-way rentals, the return location (airport code or city). Leave empty to return to the pickup location.

## `pickupDate` (type: `string`):

Format YYYY-MM-DD. Leave empty to use a date about two weeks out.

## `dropoffDate` (type: `string`):

Format YYYY-MM-DD. Leave empty to use a date a few days after pickup.

## `pickupHour` (type: `integer`):

Pickup time, 0–23 (default 12 = noon).

## `dropoffHour` (type: `integer`):

Drop-off time, 0–23 (default 12 = noon).

## `driverAge` (type: `integer`):

Driver's age (affects pricing and availability).

## `currency` (type: `string`):

Currency for prices (ISO code, e.g. USD, EUR, GBP).

## `sort` (type: `string`):

How to order results.

## `priceMode` (type: `string`):

Whether prices are shown as the total for the rental or per day.

## `maxItemsPerSearch` (type: `integer`):

Stop after collecting this many cars per pickup location. Set 0 for all.

## `proxyConfiguration` (type: `object`):

Residential proxies are required for KAYAK. The Actor defaults to US residential.

## Actor input object example

```json
{
  "pickupLocations": [
    "MIA",
    "LAX",
    "Orlando"
  ],
  "dropoffLocation": "LAX",
  "pickupDate": "2026-09-20",
  "dropoffDate": "2026-09-24",
  "pickupHour": 12,
  "dropoffHour": 12,
  "driverAge": 30,
  "currency": "USD",
  "sort": "rank_a",
  "priceMode": "total",
  "maxItemsPerSearch": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Open to view, filter and export every car rental offer — car, agency, price, specs and policies (JSON, CSV, Excel).

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "pickupLocations": [
        "MIA"
    ],
    "maxItemsPerSearch": 100,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/kayak-car-rental-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "pickupLocations": ["MIA"],
    "maxItemsPerSearch": 100,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/kayak-car-rental-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "pickupLocations": [
    "MIA"
  ],
  "maxItemsPerSearch": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call haketa/kayak-car-rental-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,haketa/kayak-car-rental-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/qznLOZbBIVW9GFidH/builds/LOHwcKPmSiqA7NePQ/openapi.json
