# Discovercars Listings Scraper (`piotrv1001/discovercars-listings-scraper`) Actor

The Discover Cars Listings Scraper extracts live car rental offers from DiscoverCars.com, capturing vehicle specs, total and per-day prices, promotions, supplier ratings, deposits, mileage and fuel policies, and pick-up branch locations — ideal for rate monitoring and travel market research.

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

## Pricing

from $5.00 / 1,000 rental searches

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

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

## How to integrate an Actor?

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

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

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

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

# README

### 🚗 Discover Cars Listings Scraper

Easily extract **live car rental offers from [Discover Cars](https://www.discovercars.com)** — a global rental aggregator comparing 500+ suppliers across 145 countries. The **Discover Cars Listings Scraper** returns the complete offer book for any pick-up location and rental window: vehicle, total price and price per day, supplier with detailed customer ratings, mileage and fuel policy, security deposit, full-coverage price and the exact pick-up branch. Perfect for **rate monitoring, competitive pricing, revenue management and travel market research**.

### ✨ Features

- 💵 **Complete Price Picture**: Total price, price per day, price before discount, active promotion and discount percentage, security deposit amount and the full-coverage insurance price — all in your chosen currency.
- 🚙 **Full Vehicle Detail**: Make and model, ACRISS/SIPP code, car category, transmission, seats, doors, bag capacity, air conditioning, fuel type and a car image.
- 🏢 **Suppliers & Ratings**: Hertz, Europcar, Sixt, Centauro, Record go, Drivalia, Keddy and dozens more — each with an overall score plus a **7-dimension rating breakdown** (value for money, ease of finding pick-up, staff efficiency, pick-up and drop-off speed, car cleanliness, car condition).
- 📍 **Exact Pick-up Branch**: Full address, coordinates, in-terminal vs shuttle service, airport flag and the desk's working hours for your pick-up day.
- 📋 **Booking Terms**: Mileage allowance, fuel policy with its full description, deposit type, accepted payment cards, free cancellation, instant confirmation and 18 offer badges (zero deposit, zero excess, winter tyres, AWD/4WD, online check-in, Wi-Fi and more).
- 🌍 **Search Anywhere**: Airport names or codes (`LAX`), cities (`Rome`), train stations — or simply paste a Discover Cars location page URL. Multiple pick-up locations per run.
- 🔁 **Round Trip or One-Way**: Set a different drop-off location for one-way rentals.
- 💱 **Currency Control**: Prices in USD, EUR, GBP and 11 more currencies.
- ⚡ **Fast & Cheap**: A single location search covers the whole local market — often **several hundred to 2,000 offers** — in seconds.

### 🛠️ How It Works

1. **Enter Pick-up Locations** – Airport names or codes, cities, stations, or Discover Cars location URLs (e.g. `Barcelona Airport (BCN)`, `LAX`, `Rome`).
2. **Pick Your Rental Window** – Set pick-up and drop-off dates and times, and the driver's age. Leave the dates empty for a 7-day rental starting two weeks from today.
3. **Set a Limit** – Choose how many offers to keep per location, cheapest first, and click **Start**.
4. **Export** – Download the dataset as JSON, CSV, Excel or HTML, or pull it via the Apify API into your BI tool, spreadsheet or pricing model.

### 📥 Input

| Field                | Type    | Description                                                                                               |
| -------------------- | ------- | --------------------------------------------------------------------------------------------------------- |
| `locations`          | array   | Cities, airports or stations to search, or Discover Cars location page URLs. Each is searched separately. |
| `pickUpDate`         | string  | Rental start date, `YYYY-MM-DD`. Empty = 14 days from today.                                              |
| `dropOffDate`        | string  | Rental end date, `YYYY-MM-DD`. Empty = a 7-day rental.                                                    |
| `maxOffersPerSearch` | integer | How many offers to keep per location, cheapest first. Default `50`.                                       |
| `dropOffLocation`    | string  | Leave empty for a round trip; set it for one-way rentals.                                                 |
| `pickUpTime`         | string  | Pick-up time in 24h `HH:MM` format. Default `11:00`.                                                      |
| `dropOffTime`        | string  | Drop-off time in 24h `HH:MM` format. Default `11:00`.                                                     |
| `driverAge`          | integer | Age of the main driver — prices and availability change under 25 and over 70. Default `35`.               |
| `residenceCountry`   | string  | Two-letter country code of the driver's residence. Default `US`.                                          |
| `currency`           | string  | Preferred price currency. Default `USD`.                                                                  |
| `proxyConfiguration` | object  | Proxy settings. The defaults are recommended.                                                             |

Example input:

```json
{
    "locations": ["Barcelona Airport (BCN)", "LAX", "Rome"],
    "pickUpDate": "2026-08-14",
    "dropOffDate": "2026-08-21",
    "driverAge": 35,
    "currency": "USD",
    "maxOffersPerSearch": 50
}
```

### 📊 Sample Output Data

The scraper provides structured JSON output with one item per rental offer. Example:

```json
[
    {
        "pickUpLocation": "Barcelona Airport (BCN), Barcelona, Spain",
        "dropOffLocation": "Barcelona Airport (BCN), Barcelona, Spain",
        "pickUpDateTime": "2026-08-14 11:00",
        "dropOffDateTime": "2026-08-21 11:00",
        "rentalDays": 7,
        "driverAge": 35,
        "currency": "USD",
        "offerId": "YE4Q",
        "bookingUrl": "https://www.discovercars.com/en/offer/d87a9107-ab96-456d-a14a-aadbfe278035-YE4Q?sq=eyJQaWNrdXBMb2NhdGlvbklkIjoxODY4...",
        "price": 130.42,
        "pricePerDay": 18.63,
        "priceFormatted": "$130.42",
        "priceBeforeDiscount": null,
        "discountPercent": null,
        "promoName": null,
        "carName": "Kia Picanto",
        "carImage": "https://www.discovercars.com/images/car/3776/220.png",
        "carCategory": "Mini",
        "sipp": "MDMR",
        "isExactModel": false,
        "seats": 5,
        "doors": 5,
        "bags": 1,
        "transmission": "Manual",
        "airConditioning": true,
        "fuelType": null,
        "supplierName": "Autounion",
        "supplierLogo": "https://www.discovercars.com/PartnerFiles/104/logo_140x70.png",
        "supplierRating": 8.6,
        "supplierRatingLabel": "Very Good",
        "supplierReviewCount": 42,
        "supplierRatingBreakdown": {
            "valueForMoney": 8.71,
            "easeOfFindingPickup": 8.12,
            "staffEfficiency": 8.65,
            "pickupSpeed": 7.81,
            "dropoffSpeed": 8.92,
            "carCleanliness": 9,
            "carCondition": 8.98
        },
        "pickUpAddress": "Av. Baix Llobregat, 5 - 7, Planta Baja, Oficina A, 08820 Barcelona",
        "pickUpLatitude": 41.3122,
        "pickUpLongitude": 2.0717,
        "pickUpMethod": "Free shuttle service",
        "isAirport": true,
        "mileage": "Unlimited",
        "unlimitedMileage": true,
        "fuelPolicy": "Same to same",
        "fuelPolicyDescription": "The fuel tank will be partly full when you pick up your car. Just replace the fuel you used before dropping your car off and you won't be charged any additional fuel fees.",
        "depositType": "Average deposit",
        "depositAmount": "$1,385.00",
        "fullCoveragePrice": 66.46,
        "paymentType": "Pay now",
        "acceptsCreditCard": true,
        "acceptsDebitCard": false,
        "noCardRequired": false,
        "freeCancellation": true,
        "instantConfirmation": true,
        "badges": ["additional_driver"],
        "pickUpDeskHours": "08:00 – 20:00",
        "scrapedAt": "2026-07-31T12:26:33.394Z"
    }
]
```

### 📋 Data Fields

| Field                                                                             | Description                                                                |
| --------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| `pickUpLocation`, `dropOffLocation`                                               | Resolved location names for the search                                     |
| `pickUpDateTime`, `dropOffDateTime`, `rentalDays`, `driverAge`, `currency`        | The rental window and terms the quote applies to                           |
| `offerId`, `requestId`, `bookingUrl`                                              | Offer identifiers and a direct link to the booking page                    |
| `price`, `pricePerDay`, `priceFormatted`                                          | Quoted rental price for the whole period and per day                       |
| `priceBeforeDiscount`, `discountPercent`, `promoName`                             | Active promotion on the offer, when present                                |
| `carName`, `carCategory`, `sipp`, `carImage`, `isExactModel`                      | Vehicle identity, ACRISS/SIPP class and photo                              |
| `seats`, `doors`, `bags`, `transmission`, `airConditioning`, `fuelType`           | Vehicle specification and capacity                                         |
| `supplierName`, `supplierLogo`, `supplierRating`, `supplierRatingLabel`           | Rental company behind the offer and its overall score                      |
| `supplierRatingBreakdown`, `supplierReviewCount`                                  | 7 sub-scores: value, finding pick-up, staff, speed, cleanliness, condition |
| `pickUpAddress`, `pickUpLatitude`, `pickUpLongitude`, `pickUpMethod`, `isAirport` | The exact branch, its coordinates and how you reach it                     |
| `mileage`, `unlimitedMileage`, `fuelPolicy`, `fuelPolicyDescription`              | Mileage allowance and the full fuel policy text                            |
| `depositType`, `depositAmount`, `fullCoveragePrice`                               | Security deposit and the price of full coverage insurance                  |
| `paymentType`, `acceptsCreditCard`, `acceptsDebitCard`, `noCardRequired`          | Payment conditions at the desk                                             |
| `freeCancellation`, `instantConfirmation`, `badges`                               | Booking flexibility and the offer's active perks                           |
| `pickUpDeskHours`                                                                 | Desk working hours on your pick-up day                                     |
| `scrapedAt`                                                                       | Timestamp of the quote — rental prices are perishable                      |

### 💰 How much does it cost to scrape Discover Cars?

This Actor uses Apify's **pay-per-event** pricing, so you only pay for the searches you run and the offers you keep.

| Event              | Price (USD)  | When it fires                        | What you get                                                       |
| ------------------ | ------------ | ------------------------------------ | ------------------------------------------------------------------ |
| Actor start        | **$0.00005** | Once per run, per GB of memory       | The run itself                                                     |
| `search-request`   | **$0.005**   | Once per pick-up location searched   | A live availability search for your dates, location and driver age |
| `car-rental-offer` | **$0.002**   | Once per offer stored in the dataset | Full offer record: vehicle, prices, terms, supplier and branch     |

**Example run costs:**

- Default run — 1 location, 50 offers: **$0.105**
- Full market snapshot — 1 location, 1,000 offers: **$2.005**
- Daily rate monitoring — 10 airports × 50 offers: **$1.05**

Apify's free plan includes **$5 of monthly usage**, enough for roughly 2,400 offers at no cost. Use **Max offers per location** to control your spend exactly.

### 💡 Tips

- **Start small.** Run one location with `maxOffersPerSearch: 10` to confirm it resolves the way you expect before launching a large run.
- **Cheapest first.** Offers are sorted by total price ascending before the limit is applied, so a small limit still gives you the competitive floor of the market.
- **Watch the whole market.** A single busy airport returns 1,000–2,000 offers across 30+ suppliers. Raise the limit when you need full coverage rather than just the lowest rates.
- **Schedule it.** Rental prices move daily. Schedule the Actor and keep `scrapedAt` to build a price history.
- **Driver age matters.** Under 25 and over 70 both trigger surcharges and a smaller set of offers — set it to match the segment you're studying.
- **Airport vs city.** `Barcelona Airport (BCN)` and `Barcelona` are different searches with different suppliers and prices. Search both if you want the complete market.

### ❓ FAQ

**How many offers can one search return?**
Typically 400–2,000 per pick-up location and rental window, across every supplier serving that area including off-airport branches. You keep the cheapest N, where N is your **Max offers per location**.

**Are the prices live?**
Yes. Every record is a quote at the moment of the search, which is why `scrapedAt` is included. For rate monitoring, schedule the Actor so it keeps tracking your window.

**Can I search several cities in one run?**
Yes — add as many locations as you like. Each one is searched separately and billed as one `search-request`.

**Can I scrape one-way rentals?**
Yes. Set **Drop-off location** and every pick-up location will be searched as a one-way rental to that point.

**Why do I sometimes get fewer offers than expected?**
Availability depends on the dates, the driver's age and the country of residence. Very short windows, last-minute dates and young drivers all reduce the number of suppliers who quote.

**Do I need a proxy?**
Apify Proxy is enabled by default and recommended. No special proxy group is required.

**Is scraping Discover Cars legal?**
The Actor collects publicly available rental listing data only — no personal data and no login required. You are responsible for how the collected data is used and for complying with the target site's terms and any applicable laws.

**Something isn't working — where do I report it?**
Use the **Issues** tab on the Actor page. Custom versions and bespoke scraping solutions can be arranged there too.

Start tracking car rental rates with the **Discover Cars Listings Scraper** today! 🚀

# Actor input Schema

## `locations` (type: `array`):

Cities, airports or train stations to search — e.g. `Barcelona Airport (BCN)`, `Rome`, `LAX`. You can also paste a Discover Cars location page URL, such as `https://www.discovercars.com/united-kingdom/london`.

## `pickUpDate` (type: `string`):

Pick-up date in `YYYY-MM-DD` format. Leave empty to search 14 days from today.

## `dropOffDate` (type: `string`):

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

## `maxOffersPerSearch` (type: `integer`):

How many offers to save per location, cheapest first. A single search typically returns several hundred to a couple of thousand offers, so raise this if you want the full picture.

## `dropOffLocation` (type: `string`):

Leave empty to return the car to the pick-up location. Set it to search one-way rentals — it applies to every pick-up location above.

## `pickUpTime` (type: `string`):

Pick-up time in 24-hour `HH:MM` format.

## `dropOffTime` (type: `string`):

Drop-off time in 24-hour `HH:MM` format.

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

Age of the main driver. Drivers under 25 and over 70 often see young/senior driver surcharges and a reduced set of offers.

## `residenceCountry` (type: `string`):

Two-letter country code of the driver's residence. Some suppliers price or restrict offers based on it.

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

Currency for all prices in the results.

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

Proxy settings. The defaults are recommended.

## Actor input object example

```json
{
  "locations": [
    "Barcelona Airport (BCN)"
  ],
  "maxOffersPerSearch": 50,
  "pickUpTime": "11:00",
  "dropOffTime": "11:00",
  "driverAge": 35,
  "residenceCountry": "US",
  "currency": "USD",
  "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 = {
    "locations": [
        "Barcelona Airport (BCN)"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/discovercars-listings-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 = { "locations": ["Barcelona Airport (BCN)"] }

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/discovercars-listings-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 '{
  "locations": [
    "Barcelona Airport (BCN)"
  ]
}' |
apify call piotrv1001/discovercars-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/discovercars-listings-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/Z1S47PZwVSTJ69NGT/builds/ZWq61atF8mUOKC7ZV/openapi.json
