# Booking.com Car Rental Scraper (`solidcode/booking-com-car-rental-scraper`) Actor

\[💰 $5 / 1K] Extract car rental offers from Booking.com — prices, suppliers, vehicle specs, pickup and drop-off depots, fees, and insurance. Search any airport or city with your own dates, times, and driver age. Filter by car type and transmission, in 19 currencies.

- **URL**: https://apify.com/solidcode/booking-com-car-rental-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Travel, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## Booking.com Car Rental Scraper

Pull car rental offers from Booking.com at scale — total and per-day prices, supplier names and ratings, vehicle specs, pickup and drop-off depots with IATA codes, fee breakdowns, insurance products, and priced bookable extras for any airport or city in the world. Search several locations in one run with your own dates, times, and driver age. Built for travel price aggregators, corporate travel managers, and revenue analysts at rental suppliers who need comparable rate data across markets without hand-collecting quotes one search at a time.

### Why This Scraper?

- **Several pickup locations in a single run** — compare Los Angeles, Barcelona, and Manchester side by side under identical dates and driver age, with every row tagged with the location, resolved dates, and age that produced it.
- **19 currencies and 14 languages** — quote every market in EUR, GBP, JPY, BRL, INR, ZAR, TRY and 12 more, with car names, supplier terms, and review labels returned in German, French, Japanese, Arabic, or any of the other 13 languages.
- **Driver age 18–99, with the surcharge shown as a line item** — young-driver and senior-driver premiums appear as named charges in the fee breakdown (a 22-year-old can pay roughly three times what a 70-year-old pays for the same car), so you can model age-banded pricing rather than guess at it.
- **8 vehicle categories including an electric-only filter** — Small, Medium, Large, Premium, SUV, Estate / Wagon, and People Carrier, plus an Electric filter that runs on fuel type so it stacks on top of any size category.
- **7-category supplier review breakdown** — cleanliness, vehicle condition, collection time, drop-off time, efficiency, ease of locating the depot, and value for money, alongside the headline score and total review count.
- **Insurance products with their policy documents** — every protection product on the offer with its price, payment type, and direct links to the policy paperwork, so terms are auditable rather than summarized.
- **Priced bookable extras, not placeholder names** — child seats, additional drivers, GPS, and WiFi with real amounts, per-day versus per-rental pricing, a mandatory flag, and the maximum quantity you can add.
- **One-way rentals with full depot detail** — set a different drop-off and get both depots resolved with street address, city, country, IATA code, depot type, and latitude/longitude.
- **Relative date syntax for scheduled monitoring** — write `+7 days`, `next week`, or `+1 month` instead of a fixed calendar date, so a daily or weekly run keeps quoting a rolling booking window instead of going stale.

### Use Cases

**Price Intelligence & Rate Shopping**
- Track daily rates for the same car class across a portfolio of airports
- Compare total price against base price to see how much of a quote is fees
- Measure how far ahead of pickup prices start climbing by running a rolling booking window
- Benchmark your published rates against every competing supplier at the same depot

**Travel Affiliate & Comparison Content**
- Build "cheapest car at [airport]" pages backed by live offer data
- Populate comparison tables with seats, doors, bags, transmission, and fuel policy
- Show mileage allowances and free-cancellation availability next to each price
- Localize a comparison site by pulling the same search in 14 languages and 19 currencies

**Corporate Travel & Expense**
- Validate supplier rates against negotiated corporate agreements
- Flag offers requiring a credit card or a deposit before travel is approved
- Compare pay-now versus pay-at-pickup terms across suppliers
- Model young-driver surcharges for staff under 25 before booking

**Fleet & Revenue Management**
- Watch competing suppliers' inventory mix by category at your own depots
- Track how supplier review scores move alongside pricing
- Spot promotional discounts and their percentage the day they go live
- Monitor which categories sell out first in peak weeks

**Market Research & Expansion**
- Map depot coverage and supplier density in a new city before entering it
- Compare electric vehicle availability across markets
- Analyze insurance and extras pricing as an ancillary revenue benchmark
- Study one-way rental availability and pricing between city pairs

### Getting Started

#### Simplest run

```json
{
    "pickupLocations": ["Los Angeles International Airport"]
}
````

#### Cheapest cars for a specific week

```json
{
    "pickupLocations": ["Barcelona", "Rome Fiumicino"],
    "pickupDate": "2026-09-14",
    "dropoffDate": "2026-09-21",
    "sortBy": "price_low",
    "currency": "EUR",
    "maxResults": 50
}
```

#### One-way rental with filters

```json
{
    "pickupLocations": ["Los Angeles International Airport"],
    "dropoffLocation": "San Francisco International Airport",
    "pickupDate": "+7 days",
    "pickupTime": "09:00",
    "dropoffDate": "+10 days",
    "dropoffTime": "18:00",
    "carTypes": ["suv", "large"],
    "transmission": "automatic",
    "maxResults": 100
}
```

#### Full detail for a rolling monitoring run

```json
{
    "pickupLocations": ["London Heathrow", "Manchester", "Edinburgh"],
    "pickupDate": "+30 days",
    "dropoffDate": "+37 days",
    "driverAge": 22,
    "sortBy": "rating_high",
    "currency": "GBP",
    "language": "en-gb",
    "maxResults": 200,
    "includeSupplierDetails": true
}
```

### Input Reference

#### Search

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `pickupLocations` | array | `["Los Angeles International Airport"]` | Airports, cities, or addresses where you collect the car. Add several to compare prices across locations in one run — each is searched with the same dates and driver age. |
| `dropoffLocation` | string | empty | Where the car is returned. Leave empty to return it to the pickup location. The same drop-off point applies to every pickup location, so use a single pickup location for a specific one-way route. |
| `startUrls` | array | `[]` | Booking.com car search URLs to collect exactly as they are — the dates, times, and filters already in each URL are used. Overrides the pickup locations and date settings. |

#### Rental Dates & Driver

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `pickupDate` | string | `+7 days` | Day you collect the car. Accepts `YYYY-MM-DD` or a relative expression — `today`, `tomorrow`, `+7 days`, `+2 weeks`, `+1 month`, `next week`. |
| `pickupTime` | string | `10:00` | Collection time in 24-hour format. Booking.com works in 30-minute steps, so times are rounded to the nearest half hour. |
| `dropoffDate` | string | `+10 days` | Day you return the car. Accepts `YYYY-MM-DD` or a relative expression such as `+10 days` or `next month`. Must be after the pickup date. |
| `dropoffTime` | string | `10:00` | Return time in 24-hour format, rounded to the nearest half hour. |
| `driverAge` | integer | `30` | Age of the main driver, 18–99. Booking.com quotes standard rates for ages 30–65 and adds young-driver or senior-driver surcharges outside that band, so this changes every price you see. |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `carTypes` | array | `[]` (all) | Vehicle categories to return: `small`, `medium`, `large`, `premium`, `suv`, `estate`, `people_carrier`, `electric`. Multi-select — picking several widens the results. `Electric` filters on fuel, so it combines with the size categories. |
| `transmission` | string | empty (both) | `automatic` (Automatic only) or `manual` (Manual only). |
| `sortBy` | string | `recommended` | `recommended` (Booking.com's top picks), `price_low` (Price, lowest first), or `rating_high` (Supplier rating, highest first). |

#### Localization

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `currency` | string | `USD` | Currency for all prices, fees, and extras. 19 options: US Dollar, Euro, British Pound, Canadian Dollar, Australian Dollar, Japanese Yen, Chinese Yuan, Swiss Franc, Swedish Krona, Norwegian Krone, Danish Krone, Polish Złoty, UAE Dirham, Mexican Peso, Brazilian Real, Indian Rupee, Singapore Dollar, South African Rand, Turkish Lira. |
| `language` | string | `en-gb` | Language for car names, supplier text, terms, and extras. 14 options: English (UK), English (US), German, French, Spanish, Italian, Dutch, Portuguese, Polish, Russian, Japanese, Korean, Chinese, Arabic. |

#### Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `100` | Maximum offers per pickup location. Set to `0` to keep every offer returned. Booking.com itself returns at most 500 offers for one search — see Tips below. |
| `includeSupplierDetails` | boolean | `false` | Adds the priced list of bookable extras, the protection and insurance products with their policy documents, and Booking.com's own offer reference. Supplier profile, review scores, fees, tags, and pickup alerts are always included without it. Adds one extra lookup per car, so runs take longer. |

### Output

One row per rental offer.

```json
{
    "pickupLocationQuery": "Los Angeles International Airport",
    "pickupLocationName": "Los Angeles International Airport",
    "dropoffLocationName": "Los Angeles International Airport",
    "pickupDateTime": "2026-08-01T10:00:00",
    "dropoffDateTime": "2026-08-04T10:00:00",
    "rentalDays": 3,
    "driverAge": 30,
    "currency": "USD",
    "language": "en-gb",
    "searchUrl": "https://cars.booking.com/search-results?locationName=Los+Angeles+International+Airport",
    "scrapedAt": "2026-07-25T14:02:11.482Z",

    "offerId": "784512396",
    "vehicleName": "Nissan Versa",
    "carType": "Small",
    "carClass": "ECAR",
    "transmission": "Automatic",
    "fuelType": null,
    "fuelPolicy": "Like For Like",
    "mileage": { "type": "UNLIMITED", "unlimited": true, "allowance": null, "unit": null },
    "seats": 5,
    "doors": 4,
    "bags": { "large": 1, "small": 1 },
    "airConditioning": true,
    "electric": null,
    "carCategories": ["Small"],
    "image": "https://cdn2.rcstatic.com/vehicles/nissan-versa.png",

    "price": { "amount": 128.94, "currency": "USD" },
    "pricePerDay": 42.98,
    "basePrice": { "amount": 118.94, "currency": "USD" },
    "priceBefore": { "amount": 151.70, "currency": "USD" },
    "discount": { "percentage": 15, "amount": 22.76, "currency": "USD" },
    "fees": [
        { "name": "Airport Fee", "amount": 10.00, "currency": "USD", "alwaysPayable": true, "payableAtPickup": false }
    ],
    "payWhen": "Pick Up",
    "creditCardRequired": true,
    "freeCancellation": true,
    "sponsored": false,

    "supplierName": "Alamo",
    "supplierRating": 8.4,
    "pickupDepot": {
        "id": "44219",
        "name": "Los Angeles International Airport",
        "address": "9020 Aviation Blvd, Los Angeles",
        "city": "Los Angeles",
        "country": "US",
        "iata": "LAX",
        "type": "SHUTTLE_BUS",
        "coordinates": { "latitude": 33.9415, "longitude": -118.4085 }
    },
    "dropoffDepot": { "iata": "LAX", "name": "Los Angeles International Airport" },
    "review": {
        "score": 8.4,
        "label": "Very good",
        "reviewCount": 1382,
        "categories": {
            "cleanliness": 8.7, "collectTime": 7.9, "condition": 8.6, "dropOffTime": 8.8,
            "efficiency": 8.5, "locating": 8.2, "valForMoney": 8.0
        }
    },
    "tags": [{ "id": "free_cancellation", "text": "Free cancellation" }],
    "alerts": [{ "id": "shuttle", "text": "Shuttle bus to the depot" }],
    "info": [{ "id": "seats", "text": "5 seats" }],
    "qualifiers": [{ "id": "aircon", "text": "Air conditioning" }],
    "url": "https://cars.booking.com/package/deal/Kf9tRz2mQx1p/784512396",

    "supplier": { "id": "48", "name": "Alamo", "logo": "https://cdn2.rcstatic.com/logos/alamo.png", "type": "PARTNER" },
    "bookingOfferId": "0f3c9a52-6b11-4c8e-9a77-2b5d41e0c8aa",
    "extras": [
        {
            "id": "12", "name": "Child seat (up to 3 years)", "type": "CHILD_SEAT", "group": "SAFETY",
            "description": "Suitable for children aged 9 months to 3 years",
            "price": { "amount": 11.50, "currency": "USD", "per": "DAY", "totalForRental": 34.50 },
            "mandatory": false, "maxQuantity": 3
        }
    ],
    "insurance": {
        "reference": "RC-INS-2026",
        "products": [
            {
                "reference": "FULL_PROTECTION",
                "name": "Full Protection",
                "paymentType": "PREPAID",
                "price": { "amount": 21.99, "currency": "USD", "per": "DAY" },
                "documents": [{ "name": "Policy wording", "url": "https://cars.booking.com/documents/policy.pdf" }]
            }
        ]
    }
}
```

#### Search Context

Echoed onto every row so results stay traceable when you run several locations at once.

| Field | Type | Description |
|-------|------|-------------|
| `pickupLocationQuery` | string | The pickup location exactly as you entered it |
| `pickupLocationName` | string | Booking.com's resolved name for that location |
| `dropoffLocationName` | string | Resolved drop-off location name |
| `pickupDateTime` | string | Resolved pickup date and time |
| `dropoffDateTime` | string | Resolved drop-off date and time |
| `rentalDays` | number | Rental length in days |
| `driverAge` | number | Driver age used for this quote |
| `currency` | string | Currency the prices are quoted in |
| `language` | string | Language the text fields are returned in |
| `searchUrl` | string | Booking.com search page that produced this row |
| `scrapedAt` | string | Timestamp of collection |

#### Vehicle

| Field | Type | Description |
|-------|------|-------------|
| `offerId` | string | Identifier for this vehicle offer |
| `vehicleName` | string | Make and model, e.g. "Nissan Versa" |
| `carType` | string | Display category — Small, Medium, Large, Premium, SUV, Estate, People Carrier. When you filter by category, this shows the one you asked for |
| `carCategories` | array | Every category the vehicle is listed under, so a crossover filed as both Medium and SUV is never mis-grouped |
| `carClass` | string | Booking.com's internal class code |
| `transmission` | string | Automatic or Manual |
| `fuelType` | string | Fuel where the supplier states it |
| `fuelPolicy` | string | Fuel policy, e.g. "Like For Like", "Full To Full" |
| `mileage` | object | `type`, `unlimited`, `allowance`, `unit` |
| `seats` | number | Number of seats |
| `doors` | number | Number of doors |
| `bags` | object | `large` and `small` suitcase capacity |
| `airConditioning` | boolean | Whether the car has air conditioning |
| `electric` | boolean | `true` for a fully electric vehicle, `false` when the supplier states another fuel, and `null` when the supplier states nothing |
| `image` | string | Vehicle photo link |

#### Pricing & Payment

| Field | Type | Description |
|-------|------|-------------|
| `price` | object | Total price — `amount`, `currency`, and `deposit` where one applies |
| `pricePerDay` | number | Total price divided by the rental length |
| `basePrice` | object | Price before fees are added |
| `priceBefore` | object | Original price when a promotion is applied |
| `discount` | object | `percentage`, `amount`, and `currency` of the applied promotion |
| `fees` | array | Real charges only — each with `name`, `amount`, `currency`, `alwaysPayable`, `payableAtPickup` |
| `payWhen` | string | Whether payment is taken now or at pickup |
| `creditCardRequired` | boolean | Whether a credit card is needed at the counter |
| `freeCancellation` | boolean | Whether the offer can be cancelled free of charge |
| `sponsored` | boolean | Whether the offer occupies a sponsored slot |

#### Supplier, Depots & Reviews

| Field | Type | Description |
|-------|------|-------------|
| `supplierName` | string | Rental company name |
| `supplierRating` | number | Headline rating for the pickup depot |
| `supplier` | object | Supplier profile — `id`, `name`, `logo`, `type` |
| `pickupDepot` | object | `id`, `name`, `address`, `city`, `country`, `iata`, `type`, `coordinates` |
| `dropoffDepot` | object | Same shape as `pickupDepot`, for the return location |
| `review` | object | `score`, `label`, `reviewCount`, and a `categories` breakdown across cleanliness, collect time, condition, drop-off time, efficiency, locating, and value for money |
| `url` | string | Direct link to this offer on Booking.com |

#### Badges & Notices

| Field | Type | Description |
|-------|------|-------------|
| `tags` | array | Highlight badges shown on the offer card |
| `alerts` | array | Pickup notices, e.g. shuttle bus required |
| `info` | array | Short spec callouts shown with the offer |
| `qualifiers` | array | Additional qualifying labels on the offer |

#### Insurance & Extras

Populated when `includeSupplierDetails` is enabled.

| Field | Type | Description |
|-------|------|-------------|
| `bookingOfferId` | string | Booking.com's own reference for this offer |
| `extras` | array | Bookable extras — `id`, `name`, `type`, `group`, `description`, `price` (`amount`, `currency`, `per`, `totalForRental`), `mandatory`, `maxQuantity` |
| `insurance` | object | `reference` plus a `products` list, each with `reference`, `name`, `paymentType`, `price`, and linked policy `documents` |

### Tips for Best Results

- **Booking.com returns at most 500 offers for any single search**, no matter how many cars actually match — a busy airport can match 600 and still send 500. Set `sortBy` to decide which 500 you get: `price_low` keeps the cheapest, `rating_high` keeps the best-reviewed. To go past 500 in one market, split the work across several runs using different car types or date ranges.
- **Split a big market across pickup locations rather than raising `maxResults`.** Listing three nearby airports gets you up to 500 offers each, where one search would have stopped at 500 in total.
- **Change `driverAge` to model the surcharge, not just to filter.** Run the same search at 22 and at 30 and diff the `fees` array — the young-driver charge shows up as its own named line, which is the cleanest way to quantify age-banded pricing.
- **Use relative dates for anything scheduled.** `+7 days` and `+1 month` keep a recurring run pointed at a rolling booking window; a fixed `YYYY-MM-DD` will silently start returning nothing once that date passes.
- **Turn on `includeSupplierDetails` for a shortlist, not a full sweep.** It adds a lookup per car, so it pays off on 50 targeted offers far more than on 500 broad ones.
- **Set `currency` and `language` together for market research.** Prices come back converted and the supplier terms, review labels, and extras names come back translated, so a German-market pull reads the way a German customer would see it.
- **Use a single pickup location when you set `dropoffLocation`.** The same drop-off applies to every pickup location, so multiple pickups plus one drop-off produces several unrelated one-way routes rather than the pair you wanted.

### Pricing

**From $5.00 per 1,000 results** — pay-per-result, with no monthly subscription to clear before your first run. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows the total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.60 | $0.57 | $0.53 | $0.50 |
| 1,000 | $6.00 | $5.65 | $5.30 | $5.00 |
| 10,000 | $60.00 | $56.50 | $53.00 | $50.00 |
| 100,000 | $600.00 | $565.00 | $530.00 | $500.00 |

A "result" is one car rental offer row in the output dataset. No compute or time-based charges — you pay per result, plus a small fixed per-run start fee.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger your own services when a run finishes
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is intended for legitimate travel price research, market analysis, and competitive benchmarking. You are responsible for complying with applicable laws and Booking.com's Terms of Service. The data collected is publicly listed commercial rental inventory and contains no personal information — do not use it for spam, harassment, or any unlawful purpose, and respect the rights of the suppliers and platforms whose pricing you analyze.

# Actor input Schema

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

Airports, cities, or addresses where you want to collect the car (e.g. 'Los Angeles International Airport', 'Barcelona', 'Rome Fiumicino'). Add several to compare prices across locations in a single run — each one is searched with the same dates and driver age.

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

Where the car will be returned. Leave empty to return it to the pickup location (the usual case). If you set it, the same drop-off point is used for every pickup location above — so use a single pickup location when you want a specific one-way route.

## `startUrls` (type: `array`):

Paste Booking.com car rental search URLs to scrape them exactly as they are — the dates, times, and filters already in each URL are used. When provided, this overrides the pickup locations and date settings.

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

The day you collect the car. Accepts a calendar date (YYYY-MM-DD) OR a relative expression — `today`, `tomorrow`, `+7 days`, `+2 weeks`, `+1 month`, `next week`. Relative dates make this actor easy to run on a schedule for price monitoring. Leave empty to search one week from today.

## `pickupTime` (type: `string`):

Time of day you collect the car, in 24-hour format (e.g. 10:00 or 16:30). Booking.com works in 30-minute steps, so times are rounded to the nearest half hour.

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

The day you return the car. Accepts a calendar date (YYYY-MM-DD) OR a relative expression such as `+10 days` or `next month`. Must be after the pickup date. Leave empty to search a three-day rental.

## `dropoffTime` (type: `string`):

Time of day you return the car, in 24-hour format (e.g. 10:00 or 22:30). Rounded to the nearest half hour.

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

Age of the main driver. Booking.com quotes standard rates for drivers aged 30-65 and adds young-driver or senior-driver surcharges outside that range, so this can change every price you see (a 22-year-old can pay roughly three times a 70-year-old for the same car). At the extremes — under 19 or over 90 — many suppliers decline to quote at all and the search can come back empty.

## `carTypes` (type: `array`):

Only return these categories of vehicle. Multi-select — picking several widens the results rather than narrowing them. Leave empty to include every car type. 'Electric' filters on the fuel, so it combines with the size categories.

## `transmission` (type: `string`):

Only return cars with this gearbox. Leave empty for both automatic and manual.

## `sortBy` (type: `string`):

How Booking.com should rank the offers. This matters whenever you set a result limit: Booking.com returns at most 500 offers per search, and the sort order decides which 500 you get. Sort by price to keep the cheapest cars, or by supplier rating to keep the best-reviewed ones.

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

Currency used for all prices, fees, and extras.

## `language` (type: `string`):

Language for car names, supplier text, terms, and extras.

## `maxResults` (type: `integer`):

Maximum car offers to return per pickup location. Set to 0 to keep every offer Booking.com returns. Important: Booking.com itself returns at most 500 offers for one search, no matter how many cars actually match — a busy airport can match 600+ and still send only 500. The Sort Order setting decides which 500 you get, so choose 'Price (lowest first)' if you want the cheapest ones. To go beyond 500 in one market, run several searches with different car types or date ranges.

## `includeSupplierDetails` (type: `boolean`):

Open the full offer page for every car to add the priced list of bookable extras (child seats, additional driver, GPS, WiFi), the protection and insurance products with their policy documents, and Booking.com's own offer reference. Supplier profile, review scores, fees, tags and pickup alerts are always included and do not need this option. Adds one extra lookup per car, so runs take longer.

## Actor input object example

```json
{
  "pickupLocations": [
    "Los Angeles International Airport"
  ],
  "startUrls": [],
  "pickupDate": "+7 days",
  "pickupTime": "10:00",
  "dropoffDate": "+10 days",
  "dropoffTime": "10:00",
  "driverAge": 30,
  "carTypes": [],
  "sortBy": "recommended",
  "currency": "USD",
  "language": "en-gb",
  "maxResults": 100
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of car rental offers with the key fields: vehicle, supplier, price, transmission, and pickup depot.

## `details` (type: `string`):

Full rows including vehicle specifications, fees, supplier reviews, insurance products, and bookable extras.

# 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": [
        "Los Angeles International Airport"
    ],
    "startUrls": [],
    "pickupDate": "+7 days",
    "pickupTime": "10:00",
    "dropoffDate": "+10 days",
    "dropoffTime": "10:00",
    "driverAge": 30,
    "carTypes": [],
    "sortBy": "recommended",
    "currency": "USD",
    "language": "en-gb",
    "maxResults": 100,
    "includeSupplierDetails": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/booking-com-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": ["Los Angeles International Airport"],
    "startUrls": [],
    "pickupDate": "+7 days",
    "pickupTime": "10:00",
    "dropoffDate": "+10 days",
    "dropoffTime": "10:00",
    "driverAge": 30,
    "carTypes": [],
    "sortBy": "recommended",
    "currency": "USD",
    "language": "en-gb",
    "maxResults": 100,
    "includeSupplierDetails": False,
}

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

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "Los Angeles International Airport"
  ],
  "startUrls": [],
  "pickupDate": "+7 days",
  "pickupTime": "10:00",
  "dropoffDate": "+10 days",
  "dropoffTime": "10:00",
  "driverAge": 30,
  "carTypes": [],
  "sortBy": "recommended",
  "currency": "USD",
  "language": "en-gb",
  "maxResults": 100,
  "includeSupplierDetails": false
}' |
apify call solidcode/booking-com-car-rental-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=solidcode/booking-com-car-rental-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Booking.com Car Rental Scraper",
        "description": "[💰 $5 / 1K] Extract car rental offers from Booking.com — prices, suppliers, vehicle specs, pickup and drop-off depots, fees, and insurance. Search any airport or city with your own dates, times, and driver age. Filter by car type and transmission, in 19 currencies.",
        "version": "1.0",
        "x-build-id": "hYzoB65nZvJS2QSRD"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~booking-com-car-rental-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-booking-com-car-rental-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~booking-com-car-rental-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-booking-com-car-rental-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~booking-com-car-rental-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-booking-com-car-rental-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": {
                    "pickupLocations": {
                        "title": "Pickup Locations",
                        "type": "array",
                        "description": "Airports, cities, or addresses where you want to collect the car (e.g. 'Los Angeles International Airport', 'Barcelona', 'Rome Fiumicino'). Add several to compare prices across locations in a single run — each one is searched with the same dates and driver age.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "dropoffLocation": {
                        "title": "Drop-off Location",
                        "type": "string",
                        "description": "Where the car will be returned. Leave empty to return it to the pickup location (the usual case). If you set it, the same drop-off point is used for every pickup location above — so use a single pickup location when you want a specific one-way route."
                    },
                    "startUrls": {
                        "title": "Booking.com Car Search URLs",
                        "type": "array",
                        "description": "Paste Booking.com car rental search URLs to scrape them exactly as they are — the dates, times, and filters already in each URL are used. When provided, this overrides the pickup locations and date settings.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "pickupDate": {
                        "title": "Pickup Date",
                        "type": "string",
                        "description": "The day you collect the car. Accepts a calendar date (YYYY-MM-DD) OR a relative expression — `today`, `tomorrow`, `+7 days`, `+2 weeks`, `+1 month`, `next week`. Relative dates make this actor easy to run on a schedule for price monitoring. Leave empty to search one week from today."
                    },
                    "pickupTime": {
                        "title": "Pickup Time",
                        "type": "string",
                        "description": "Time of day you collect the car, in 24-hour format (e.g. 10:00 or 16:30). Booking.com works in 30-minute steps, so times are rounded to the nearest half hour."
                    },
                    "dropoffDate": {
                        "title": "Drop-off Date",
                        "type": "string",
                        "description": "The day you return the car. Accepts a calendar date (YYYY-MM-DD) OR a relative expression such as `+10 days` or `next month`. Must be after the pickup date. Leave empty to search a three-day rental."
                    },
                    "dropoffTime": {
                        "title": "Drop-off Time",
                        "type": "string",
                        "description": "Time of day you return the car, in 24-hour format (e.g. 10:00 or 22:30). Rounded to the nearest half hour."
                    },
                    "driverAge": {
                        "title": "Driver Age",
                        "minimum": 18,
                        "maximum": 99,
                        "type": "integer",
                        "description": "Age of the main driver. Booking.com quotes standard rates for drivers aged 30-65 and adds young-driver or senior-driver surcharges outside that range, so this can change every price you see (a 22-year-old can pay roughly three times a 70-year-old for the same car). At the extremes — under 19 or over 90 — many suppliers decline to quote at all and the search can come back empty."
                    },
                    "carTypes": {
                        "title": "Car Types",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only return these categories of vehicle. Multi-select — picking several widens the results rather than narrowing them. Leave empty to include every car type. 'Electric' filters on the fuel, so it combines with the size categories.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "small",
                                "medium",
                                "large",
                                "premium",
                                "suv",
                                "estate",
                                "people_carrier",
                                "electric"
                            ],
                            "enumTitles": [
                                "Small",
                                "Medium",
                                "Large",
                                "Premium",
                                "SUV",
                                "Estate / Wagon",
                                "People Carrier",
                                "Electric"
                            ]
                        }
                    },
                    "transmission": {
                        "title": "Transmission",
                        "enum": [
                            "automatic",
                            "manual"
                        ],
                        "type": "string",
                        "description": "Only return cars with this gearbox. Leave empty for both automatic and manual."
                    },
                    "sortBy": {
                        "title": "Sort Order",
                        "enum": [
                            "recommended",
                            "price_low",
                            "rating_high"
                        ],
                        "type": "string",
                        "description": "How Booking.com should rank the offers. This matters whenever you set a result limit: Booking.com returns at most 500 offers per search, and the sort order decides which 500 you get. Sort by price to keep the cheapest cars, or by supplier rating to keep the best-reviewed ones."
                    },
                    "currency": {
                        "title": "Currency",
                        "enum": [
                            "USD",
                            "EUR",
                            "GBP",
                            "CAD",
                            "AUD",
                            "JPY",
                            "CNY",
                            "CHF",
                            "SEK",
                            "NOK",
                            "DKK",
                            "PLN",
                            "AED",
                            "MXN",
                            "BRL",
                            "INR",
                            "SGD",
                            "ZAR",
                            "TRY"
                        ],
                        "type": "string",
                        "description": "Currency used for all prices, fees, and extras."
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "en-gb",
                            "en-us",
                            "de",
                            "fr",
                            "es",
                            "it",
                            "nl",
                            "pt",
                            "pl",
                            "ru",
                            "ja",
                            "ko",
                            "zh",
                            "ar"
                        ],
                        "type": "string",
                        "description": "Language for car names, supplier text, terms, and extras."
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum car offers to return per pickup location. Set to 0 to keep every offer Booking.com returns. Important: Booking.com itself returns at most 500 offers for one search, no matter how many cars actually match — a busy airport can match 600+ and still send only 500. The Sort Order setting decides which 500 you get, so choose 'Price (lowest first)' if you want the cheapest ones. To go beyond 500 in one market, run several searches with different car types or date ranges."
                    },
                    "includeSupplierDetails": {
                        "title": "Include Insurance & Bookable Extras",
                        "type": "boolean",
                        "description": "Open the full offer page for every car to add the priced list of bookable extras (child seats, additional driver, GPS, WiFi), the protection and insurance products with their policy documents, and Booking.com's own offer reference. Supplier profile, review scores, fees, tags and pickup alerts are always included and do not need this option. Adds one extra lookup per car, so runs take longer."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
