# Car Rental Search: Kayak, Momondo & Cheapflights Prices (`bowmark-ai/car-rental-search`) Actor

Compare car rental prices at any airport on Kayak, Momondo and Cheapflights in one search. Give an airport and dates, get every offer sorted by total price, with the rental company, car, terms and a booking link.

- **URL**: https://apify.com/bowmark-ai/car-rental-search.md
- **Developed by:** [Bowmark AI](https://apify.com/bowmark-ai) (community)
- **Categories:** Travel, MCP servers, Agents
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $67.00 / 1,000 car rental searches

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Car Rental Search: Kayak, Momondo & Cheapflights Prices do?

Car Rental Search looks up rental cars at an airport on **Kayak, Momondo and Cheapflights at the same time** and gives you one combined list, sorted by total price.

Give it an airport and your pickup and drop-off dates. For every search it returns the cheapest offer, the cheapest price in each car class, and up to 50 offers with the total and per-day price, the rental company you collect the car from, the site that sells the booking, the car, seats, bags, transmission, mileage and cancellation terms, whether pickup is in the terminal or by shuttle, and a link to book it. The same offer listed on several sites appears once.

It never books, pays or signs in anywhere. It only reads the public search results.

### Why use it?

- **Find the cheapest car fast.** One search gives you the whole market at an airport, sorted by total price, with the rental company and the cancellation terms side by side.
- **Track rental prices across many airports and dates.** Put dozens of searches in one run, schedule it, and export the table to a spreadsheet.
- **AI agents.** Connect it as an MCP server and let an agent price the rental car while it plans a trip.

### How it works

For each search it reads, at the same time:

1. **Kayak**
2. **Momondo**
3. **Cheapflights**

Offers are merged, duplicates removed, and sorted by total price. If one site is slow, the others still answer, and the row says which site was missing.

### Input

| Field | Required | Description |
|---|---|---|
| `searches` | Yes | One entry per airport and date range. Each needs a `pickup` airport code (like `DEN`), a `pickupDate` and a `dropoffDate` (`YYYY-MM-DD`, or `"+30"` for 30 days from today). Optional: `dropoff` (another airport, for a one-way rental), `pickupHour` and `dropoffHour` (0 to 23), `driverAge`. A line like `"DEN 2026-12-10 2026-12-14"` works too. |
| `maxConcurrency` | No | Searches run at once, 1 to 8. Default `4`. |

Example input:

```json
{
  "searches": [
    { "pickup": "DEN", "pickupDate": "2026-12-10", "dropoffDate": "2026-12-14" },
    { "pickup": "SFO", "dropoff": "LAX", "pickupDate": "2027-01-09", "dropoffDate": "2027-01-14" },
    { "pickup": "MCO", "pickupDate": "+30", "dropoffDate": "+37", "driverAge": 23 }
  ]
}
```

### Output

One dataset row per search. Download it as JSON, CSV, Excel or HTML, or read it through the Apify API.

```json
{
  "pickup": "LAS",
  "pickupDate": "2026-11-25",
  "dropoffDate": "2026-11-28",
  "status": "found",
  "cheapestPrice": 119,
  "cheapestDayPrice": 40,
  "currency": "USD",
  "cheapestCar": "Fiat 500",
  "cheapestClass": "Mini",
  "cheapestAgency": "Easirent",
  "cheapestPickupType": "SHUTTLE",
  "cheapestUrl": "https://www.momondo.com/book/car?code=2RAGV-bnWg...",
  "cheapestByClass": { "Mini": 119, "Economy": 123, "Compact": 137, "Intermediate": 157, "Standard SUV": 178 },
  "carCount": 50,
  "cars": [
    {
      "price": 119, "dayPrice": 40, "currency": "USD",
      "agency": "Easirent", "seller": "Booking.com",
      "carName": "Fiat 500", "carClass": "Mini",
      "passengers": 4, "bags": 1, "doors": 2, "transmission": "automatic",
      "airConditioning": true, "unlimitedMileage": true, "freeCancellation": true,
      "pickupType": "SHUTTLE", "pickupAddress": "3176 W Martin Ave",
      "url": "https://www.momondo.com/book/car?code=2RAGV-bnWg...",
      "site": "momondo"
    }
  ],
  "warnings": [],
  "error": null
}
```

`status` is `found`, `not_found` or `error`. `not_found` means every site answered and none had a car for that airport and dates, which is a real answer (a small airport, or dates too far ahead). `agency` is who hands you the keys; `seller` is the site that takes the booking, and the two are often different. A `null` in a field like `freeCancellation` means the site did not say, not that the answer is no.

### Pricing

**$0.067 per search**, with no monthly fee. One search covers all three sites and returns up to 50 offers, not one page of one site.

- A search that comes back `not_found` is charged, because all three sites were still searched.
- A search that fails with an error is not charged.
- Set a spending limit on the run and the Actor stops cleanly when it reaches it.
- On Apify's free plan, each run processes the first 10 searches (10 tool calls per MCP session). Any paid Apify plan removes the limit.

### Use it as an MCP server

This Actor also runs as an MCP server with one tool, `search_car_rentals`. Point any MCP client (Claude, Cursor, ChatGPT, your own agent) at:

```
https://bowmark-ai--car-rental-search.apify.actor/mcp
```

with your Apify API token as a bearer token. Each tool call is billed like one search in a normal run.

### Limits and good practice

- It reads only **public** search results. It never signs in anywhere and never changes anything.
- Use airport codes (`DEN`, `LHR`), not city names or street addresses. Rentals are searched at the airport.
- Prices are in US dollars and come from these three comparison sites, so a rental company's own website can occasionally differ.
- Give `driverAge` when the driver is under 25 or over 70: some cars and prices change with age.
- Each search takes about 15 to 50 seconds.

### Questions or a wrong result?

Open an issue on the **Issues** tab with the input you used and what you expected. We read every one.

# Actor input Schema

## `searches` (type: `array`):

One entry per airport and date range, up to 500 per run (10 on Apify's free plan). Each needs a pickup airport code (IATA, like DEN), a pickupDate and a dropoffDate (YYYY-MM-DD, or "+30" for 30 days from today). Optional: dropoff (another airport, for a one-way rental), pickupHour and dropoffHour (0 to 23), driverAge. A line like "DEN 2026-12-10 2026-12-14" works too.

## `maxConcurrency` (type: `integer`):

How many searches run in parallel.

## Actor input object example

```json
{
  "searches": [
    {
      "pickup": "LAS",
      "pickupDate": "+30",
      "dropoffDate": "+33"
    }
  ],
  "maxConcurrency": 4
}
```

# Actor output Schema

## `results` (type: `string`):

One row per search: the cheapest offer, the cheapest in each car class, and every offer found.

# 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 = {
    "searches": [
        {
            "pickup": "LAS",
            "pickupDate": "+30",
            "dropoffDate": "+33"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("bowmark-ai/car-rental-search").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 = { "searches": [{
            "pickup": "LAS",
            "pickupDate": "+30",
            "dropoffDate": "+33",
        }] }

# Run the Actor and wait for it to finish
run = client.actor("bowmark-ai/car-rental-search").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 '{
  "searches": [
    {
      "pickup": "LAS",
      "pickupDate": "+30",
      "dropoffDate": "+33"
    }
  ]
}' |
apify call bowmark-ai/car-rental-search --silent --output-dataset

```

## MCP server setup

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

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/MSgoIqfQN23IZlt1p/builds/p97eSOCUtf3ZkZ81A/openapi.json
