# Hertz Scraper — Direct Car Rental Prices in Europe (`studio-amba/hertz-scraper`) Actor

Scrape brand-direct car rental prices and availability straight from Hertz.com. Extract car category, model, daily and total price, currency, transmission, fuel type, and pickup/drop-off details across European Hertz locations. No login or cookies required.

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

## Pricing

from $1.20 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Hertz Scraper

Scrape brand-direct car rental prices and availability straight from Hertz.com, the largest US-headquartered car rental brand with dense coverage across Europe. Extract car category, model, daily and total price, currency, transmission, fuel type, and pickup/drop-off details. No login or cookies required.

### Why use this actor?

Most car rental price data comes from aggregators like Booking.com/RentalCars, Kayak, or Expedia — useful for comparison shopping, but the price shown there is the aggregator's markup on top of the supplier's own rate, not what Hertz actually charges at the counter. This actor goes straight to the source: Hertz's own booking engine. Use it to track brand-direct pricing separately from aggregator pricing, spot when Hertz undercuts (or overcuts) its own listings on comparison sites, or build a rental-cost monitor that isn't distorted by a middleman's commission.

If you need cross-supplier comparison (Hertz vs Avis vs Europcar vs Sixt in one call), pair this with [`rentalcars-scraper`](https://apify.com/studio-amba/rentalcars-scraper) — see Related Scrapers below.

### How to scrape Hertz data

1. Enter a pickup location (city or airport), for example `Paris Charles de Gaulle Airport`
2. Optionally set a drop-off location, pickup/drop-off dates, and driver age
3. Start the actor

Under the hood, the actor resolves your location through Hertz's own location-search endpoint (the same one that powers the autocomplete box on hertz.com), then loads Hertz's booking results page for that location and date range through a real browser session and reads the vehicle/pricing data straight off the network — no manual form-filling, no screen-scraping brittle HTML.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `pickupLocation` | String | No | City or airport. Default: `Paris Charles de Gaulle Airport` |
| `dropoffLocation` | String | No | City or airport to return the car. Defaults to the pickup location. |
| `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 at pickup (default: 30). Hertz prices by bracket (19-20, 21-24, 25-27, 28+) — mapped automatically. |
| `maxResults` | Integer | No | Maximum number of offers to return (default: 20, max: 100) |
| `proxyConfiguration` | Object | No | Proxy settings. Automatic Apify proxy is the default and was verified working end-to-end — see Anti-bot notes below. |

### Output

Each result contains:

| Field | Type | Example |
|-------|------|---------|
| `rentalCompany` | String | `"Hertz"` |
| `carName` | String | `"BMW X5"` |
| `carCategory` | String | `"Luxury"` |
| `sippCode` | String | `"LFAR"` |
| `transmission` | String | `"Auto"` |
| `fuelType` | String | `"Petrol"` |
| `fuelPolicy` | String or null | Not exposed by this endpoint — always `null`, never guessed |
| `seats` | Number | `5` |
| `doors` | Number | `5` |
| `bags` | Number | `6` |
| `totalPrice` | Number | `462.03` |
| `dailyPrice` | Number | `66` |
| `currency` | String | `"GBP"` |
| `pickupLocation` | String | `"Paris, FR - CDG-Roissy Charles de Gaulle Airport - Terminals 2D & 1 (CDG)"` |
| `dropoffLocation` | String | Same shape as `pickupLocation` |
| `pickupDate` | String | `"2026-09-28"` |
| `dropoffDate` | String | `"2026-10-05"` |
| `url` | String | Hertz booking results page URL for this search |
| `scrapedAt` | String | `"2026-08-29T09:42:16.859Z"` |

#### Example output

```json
{
  "rentalCompany": "Hertz",
  "carName": "BMW X5",
  "carCategory": "Luxury",
  "sippCode": "LFAR",
  "transmission": "Auto",
  "fuelType": "Petrol",
  "fuelPolicy": null,
  "seats": 5,
  "doors": 5,
  "bags": 6,
  "totalPrice": 462.03,
  "dailyPrice": 66,
  "currency": "GBP",
  "pickupLocation": "Paris, FR - CDG-Roissy Charles de Gaulle Airport - Terminals 2D & 1 (CDG)",
  "dropoffLocation": "Paris, FR - CDG-Roissy Charles de Gaulle Airport - Terminals 2D & 1 (CDG)",
  "pickupDate": "2026-09-28",
  "dropoffDate": "2026-10-05",
  "url": "https://www.hertz.co.uk/gb/en/book/vehicles?age=28&pid=CDGT50&did=CDGT50&pdate=2026-09-28T13%3A00%3A00&ddate=2026-10-05T13%3A00%3A00&pCountryCode=FR&travelType=LEISURE",
  "scrapedAt": "2026-08-29T09:42:16.859Z"
}
```

#### Currency note

Hertz shows the cheapest available rate plan per vehicle, and different rate plans can be priced in different currencies (a prepaid online rate in the storefront's home currency vs. a pay-at-counter rate in the destination's local currency). The actor always reports the currency alongside the price it picked, matching the "best price" figure Hertz's own site shows — it does not convert everything to a single currency.

### Cost estimate

Priced at Apify's STANDARD tier: $0.005 per run start + $0.002 per result. A typical search returning 15-20 vehicle offers costs roughly $0.03-0.05 per run, well under $1 for dozens of searches. The final usage cost only settles once the run reports SUCCEEDED — reading the dataset mid-run will undercount it.

### Anti-bot notes

Hertz.com and its supporting domains (booking pages, location search, pricing API) sit behind genuine Imperva Incapsula bot management plus reCAPTCHA Enterprise on the legacy reservation flow. This actor does not touch that legacy flow — it uses Hertz's own location-search JSON endpoint (plain HTTP, unaffected) and a modern booking results page that a real browser session loads cleanly. Verified live and repeatedly during development on Apify's automatic (non-residential) proxy pool with no blocks — that's the default here. If a live run does start getting blocked, the fix is switching `proxyConfiguration` to a `RESIDENTIAL` group.

### Limitations

- Fuel policy (e.g. "Full to Full") is not exposed by the pricing endpoint this actor reads — the field is always `null` rather than guessed.
- Pricing reflects Hertz's own "best available rate" logic, which can mix prepaid and pay-later rate plans (and their respective currencies) — see the currency note above.
- Driver age is priced in brackets (19-20 / 21-24 / 25-27 / 28+), not by exact age, matching how Hertz itself prices rentals.
- Very long or overly specific location queries (e.g. a full official location name) can return zero matches from Hertz's own location search — the actor automatically retries with shorter word-prefixes of your query, but a well-known city or airport name works best.

### Related Scrapers

- [RentalCars Scraper](https://apify.com/studio-amba/rentalcars-scraper) — compare Hertz against Avis, Europcar, Sixt and dozens more suppliers via the Booking.com-owned aggregator
- [Autoscout24 Scraper](https://apify.com/studio-amba) — used car listings across Europe
- [AtHome Scraper](https://apify.com/studio-amba) — Luxembourg real estate listings
- [Staatsblad Scraper](https://apify.com/studio-amba) — Belgian official company gazette

# Actor input Schema

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

City or airport to pick up the car. The actor resolves this via Hertz's own location search and uses the best match. Example: "Paris Charles de Gaulle Airport", "Berlin", "Madrid Barajas Airport".

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

City or airport to return the car. Leave empty to return to the same location as pickup.

## `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 at pickup. Hertz prices by age bracket (19-20, 21-24, 25-27, 28+) — this is mapped to the matching bracket. Minimum rentable age is 19.

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

Maximum number of car rental offers to return.

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

Proxy settings. Hertz.com sits behind Imperva Incapsula bot management, but the location lookup (plain HTTP) and the booking results page (real browser) both work reliably on Apify's automatic proxy pool — no residential proxy needed.

## Actor input object example

```json
{
  "pickupLocation": "Paris Charles de Gaulle Airport",
  "driverAge": 30,
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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": "Paris Charles de Gaulle Airport",
    "maxResults": 5,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/hertz-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": "Paris Charles de Gaulle Airport",
    "maxResults": 5,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/hertz-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": "Paris Charles de Gaulle Airport",
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call studio-amba/hertz-scraper --silent --output-dataset

```

## MCP server setup

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