# RentalCars Scraper — Compare Car Rental Prices Worldwide (`studio-amba/rentalcars-scraper`) Actor

Scrape car rental offers from RentalCars.com (Booking.com). Extract supplier names, car types, prices, ratings, and rental details. Compare prices across Hertz, Avis, Europcar, Sixt, and more. No login or cookies required.

- **URL**: https://apify.com/studio-amba/rentalcars-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Travel
- **Stats:** 5 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 result scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

## RentalCars Scraper

Scrape and compare car rental prices from RentalCars.com, the world's largest car rental comparison platform (owned by Booking.com). Extract offers from Hertz, Avis, Europcar, Sixt, Enterprise, Budget, and dozens more suppliers in one run. No login or cookies required.

### Why use this actor?

Planning a trip and want the best car rental deal? This actor extracts all available offers from a RentalCars.com search, giving you structured data you can sort, filter, and analyze. Perfect for price monitoring, travel agencies comparing supplier rates, or researchers tracking rental car pricing trends across locations and seasons.

### How it works

1. Enter a pickup location (city, airport, or station), for example `Barcelona Airport`
2. Optionally set pickup and drop-off dates (defaults: 30 days from now, 7-day rental)
3. Optionally set the driver age and a result limit
4. Start the actor

The actor resolves your location through the RentalCars location search, runs the search through the same JSON API the site itself uses, and returns structured offers in seconds. No browser automation, no form filling.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `pickupLocation` | String | No | City, airport, or station. Default: `Barcelona Airport` |
| `pickupDate` | String | No | `YYYY-MM-DD`. Defaults to 30 days from now. Past dates are replaced by that default. |
| `dropoffDate` | String | No | `YYYY-MM-DD`. Defaults to a 7-day rental. |
| `driverAge` | Integer | No | Driver age, affects pricing (default: 30) |
| `maxResults` | Integer | No | Maximum number of offers to return (default: 100, max: 500) |
| `currency` | String | No | ISO 4217 code (`EUR`, `GBP`, `USD`, `CHF`, `PLN`, ...) to price results in. Leave empty to auto-detect from the destination's country. |
| `countryOfResidence` | String | No | Advanced. ISO 3166-1 alpha-2 code sent as the location-search locale (default `gb`). Does not affect pricing currency — use `currency` for that. |
| `searchUrl` | String | No | Advanced: a RentalCars search-results URL. The location name and dates are extracted from it. |
| `proxyConfiguration` | Object | No | Proxy settings. **Residential proxies strongly recommended** due to AWS WAF protection. |

#### Currency handling

By default, results are priced in the destination's local currency: a Spanish or German airport returns `EUR`, a UK airport returns `GBP`, a US airport returns `USD`, and so on. This is derived automatically from the resolved pickup location's country — you don't need to set anything.

Set the `currency` input to force a specific currency regardless of destination — useful if you're quoting a customer in their home currency (e.g. price a Spanish rental in `USD` for a US-based client). RentalCars' search API accepts an explicit `currency` parameter independent of pickup/drop-off location; if you pass an unsupported code it falls back to `EUR`.

### Output

Each result contains:

| Field | Type | Example |
|-------|------|---------|
| `supplier` | String | `"Hertz"` |
| `carName` | String | `"Volkswagen Golf"` |
| `carType` | String | `"Compact"` |
| `transmission` | String | `"Automatic"` |
| `seats` | Number | `5` |
| `doors` | Number | `4` |
| `bags` | Number | `2` |
| `totalPrice` | Number | `287.50` |
| `dailyPrice` | Number | `41.07` |
| `currency` | String | `"EUR"` |
| `fuelPolicy` | String | `"Full to Full"` |
| `mileagePolicy` | String | `"Unlimited"` |
| `rating` | Number | `8.2` |
| `reviewCount` | Number | `1543` |
| `imageUrl` | String | Car image URL |
| `url` | String | Search results URL |
| `scrapedAt` | String | `"2026-04-07T14:30:00.000Z"` |

### Example output

```json
{
    "supplier": "Europcar",
    "carName": "Volkswagen Golf",
    "carType": "Compact",
    "transmission": "Manual",
    "seats": 5,
    "doors": 4,
    "bags": 2,
    "totalPrice": 287.50,
    "dailyPrice": 41.07,
    "currency": "EUR",
    "fuelPolicy": "Full to Full",
    "mileagePolicy": "Unlimited",
    "rating": 7.8,
    "reviewCount": 2341,
    "imageUrl": "https://cdn.rcstatic.com/images/car_images/web/europcar/golf_lrg.jpg",
    "url": "https://www.rentalcars.com/search-results?...",
    "scrapedAt": "2026-04-07T14:30:00.000Z"
}
```

### Use cases

- **Price comparison** — Compare rental prices across all suppliers for a given location and date range
- **Price monitoring** — Schedule daily runs to track pricing trends and find the cheapest booking window
- **Travel agencies** — Aggregate rental car data across destinations for client recommendations
- **Market research** — Analyze supplier pricing strategies, availability patterns, and seasonal trends
- **Fleet analysis** — Track which car models are available at specific airports and cities

### Integrations

This actor can be combined with Apify's built-in integrations to:

- **Schedule runs** to monitor prices daily or weekly
- **Export to Google Sheets** for easy analysis and sharing
- **Send webhook notifications** when prices drop below a threshold
- **Connect to Zapier/Make** for custom automation workflows
- **Use the API** to integrate car rental data into your applications

### Cost estimate

This actor charges $0.02 per run (start fee, based on its 4 GB memory allocation) plus $0.002 per rental offer returned. A default run (up to 100 offers) costs about $0.22. A run's usage cost only settles after it reports SUCCEEDED.

### Proxy requirements

RentalCars.com uses AWS WAF anti-bot protection that blocks datacenter IPs. **Residential proxies are required** for reliable results — the actor defaults to Apify residential proxies.

### Limitations

- Results cover a single pickup location and date range per run
- One-way rentals (different drop-off location) are not supported yet
- Anti-bot protection may occasionally block requests even with residential proxies
- Data is scraped from the public website and may change without notice
- Some fields may not be available for all car offers

### How to scrape Rentalcars data

1. Go to this actor's page on the [Apify Store](https://apify.com/store).
2. Click **Try for free** to open it in Apify Console.
3. Configure your search query or URL, set the maximum number of results, and adjust proxy settings if needed.
4. Click **Start** and wait for the run to finish.
5. Download your data in JSON, CSV, Excel, or connect it to your workflow via API.

You can also schedule regular runs, set up webhooks for real-time notifications, or integrate the results directly into your application using the [Apify API](https://docs.apify.com/api).

# Actor input Schema

## `pickupLocation` (type: `string`):

City, airport, or station to pick up the car. The actor resolves this via the RentalCars location search and uses the best match. Example: "Barcelona Airport", "Brussels", "Malaga".

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

Pickup date in YYYY-MM-DD format. Leave empty to default to about 30 days from now. Dates in the past are automatically replaced by that default.

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

Drop-off date in YYYY-MM-DD format. Leave empty to default to a 7-day rental.

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

Driver age (affects pricing and availability).

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

ISO 4217 currency code to price results in (e.g. EUR, GBP, USD, CHF, PLN). Leave empty to auto-detect from the pickup destination's country — a Spanish airport returns EUR, a UK airport returns GBP, etc. Set this to force a specific currency regardless of destination (e.g. price a Spanish rental in USD for a US customer).

## `countryOfResidence` (type: `string`):

ISO 3166-1 alpha-2 country code (e.g. "gb", "es", "us") sent as the location-search locale. Affects location-suggestion ordering only — it does NOT control pricing currency (use the Currency field above for that). Leave empty to use the default "gb".

## `searchUrl` (type: `string`):

Optional. A RentalCars.com search-results URL. The actor extracts the location name and dates from it (query params like locationName, puDay/puMonth/puYear). Most users should leave this empty and use the pickup location and dates above instead.

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

Maximum number of car rental offers to return.

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

Proxy settings. Residential proxies are strongly recommended for RentalCars.com due to AWS WAF protection.

## Actor input object example

```json
{
  "pickupLocation": "Barcelona Airport",
  "driverAge": 30,
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "GB"
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "pickupLocation": "Barcelona Airport",
    "maxResults": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "GB"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/rentalcars-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 = {
    "pickupLocation": "Barcelona Airport",
    "maxResults": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "GB",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/rentalcars-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 '{
  "pickupLocation": "Barcelona Airport",
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "GB"
  }
}' |
apify call studio-amba/rentalcars-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/rentalcars-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/6jA4RJuOaup0XkcA7/builds/38aOZF6g8gbpfvYfK/openapi.json
