# Avis Scraper — Brand-Direct Car Rental Prices (`studio-amba/avis-scraper`) Actor

Scrape brand-direct car rental offers straight from Avis.com. Extract car categories, models, daily and total prices, currency, transmission, fuel type, and unlimited-mileage status for any pickup location and date range. No login or cookies required.

- **URL**: https://apify.com/studio-amba/avis-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

## Avis Scraper

Scrape brand-direct car rental offers straight from Avis.com — no aggregator markup, no third-party commission baked into the price. Extract car categories, models, daily and total prices, currency, transmission, fuel type, seats, doors, bags, and unlimited-mileage status for any pickup location and date range. No login or cookies required.

### Why use this actor?

RentalCars.com and similar comparison sites show Avis offers with a booking-platform markup on top of Avis's own rate. This actor goes straight to Avis's own booking engine and reads the same price Avis itself quotes a walk-up customer — useful for price monitoring against `actors/rentalcars-scraper` (our Booking-Group aggregator scraper), for spotting the gap between aggregator and brand-direct pricing, or simply for tracking Avis's own rates over time and across markets.

### How it works

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

The actor resolves your pickup (and optional drop-off) location through Avis's own location search, then fetches Avis's server-rendered results page — the same page a customer sees — and parses every offer with Cheerio. No browser automation, no form filling: two plain HTTP requests per run.

### How to scrape Avis 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. Enter a pickup location and (optionally) dates, driver age, and a result limit.
4. Click **Start** and wait for the run to finish — it typically completes in under 10 seconds.
5. Download your data in JSON, CSV, Excel, or connect it to your workflow via the API.

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

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `pickupLocation` | String | No | City, airport, or station. Default: `Paris Charles de Gaulle Airport` |
| `dropoffLocation` | String | No | City, airport, or station to drop off at. Leave empty for a round trip back to the pickup location. |
| `pickupDate` | String | No | `YYYY-MM-DD`. Defaults to 30 days from now. Past or malformed dates are replaced by that default. |
| `pickupTime` | String | No | `HH:MM`, 24h. Default `10:00`. |
| `dropoffDate` | String | No | `YYYY-MM-DD`. Defaults to a 7-day rental. |
| `dropoffTime` | String | No | `HH:MM`, 24h. Default `10:00`. |
| `driverAge` | Integer | No | Driver age (default: 30). Under 25 may attract a young-driver surcharge shown at checkout — not modeled in the scraped price. |
| `maxResults` | Integer | No | Maximum number of offers to return (default: 100, max: 200) |
| `proxyConfiguration` | Object | No | Proxy settings. Avis.com has no meaningful anti-bot protection — the fleet's default Apify proxy is used, residential proxies are not required. |

### Output

Each result contains:

| Field | Type | Example |
|-------|------|---------|
| `rentalCompany` | String | `"Avis"` |
| `carName` | String | `"BMW X3"` |
| `carCategory` | String | `"Premium SUV"` |
| `sippCode` | String | `"PZAR"` |
| `vehicleGroup` | String | `"M"` |
| `transmission` | String | `"Automatic"` |
| `fuelType` | String | `"Petrol/Diesel"` |
| `seats` | Number | `5` |
| `doors` | Number | `5` |
| `bags` | Number | `4` |
| `totalPrice` | Number | `500.77` |
| `dailyPrice` | Number | `166.92` |
| `currency` | String | `"EUR"` |
| `unlimitedMileage` | Boolean | `true` |
| `fuelPolicy` | String | null | `null` (not shown on the results page for this market — see Limitations) |
| `pickupLocation` | String | `"Aéroport de Paris Charles de Gaulle Paris – Terminal 2 CD - France"` |
| `dropoffLocation` | String | `"Aéroport de Paris Charles de Gaulle Paris – Terminal 2 CD"` |
| `pickupDate` | String | `"2026-09-20"` |
| `pickupTime` | String | `"10:00"` |
| `dropoffDate` | String | `"2026-09-23"` |
| `dropoffTime` | String | `"10:00"` |
| `imageUrl` | String | Car image URL |
| `url` | String | Avis.com booking deep-link for this offer |
| `scrapedAt` | String | `"2026-08-29T09:16:03.803Z"` |

### Example output

```json
{
    "rentalCompany": "Avis",
    "carName": "BMW X3",
    "carCategory": "Premium SUV",
    "sippCode": "PZAR",
    "vehicleGroup": "M",
    "transmission": "Automatic",
    "fuelType": "Petrol/Diesel",
    "seats": 5,
    "doors": 5,
    "bags": 4,
    "totalPrice": 500.77,
    "dailyPrice": 166.92,
    "currency": "EUR",
    "unlimitedMileage": true,
    "fuelPolicy": null,
    "pickupLocation": "Aéroport de Paris Charles de Gaulle Paris – Terminal 2 CD - France",
    "dropoffLocation": "Aéroport de Paris Charles de Gaulle Paris – Terminal 2 CD",
    "pickupDate": "2026-09-20",
    "pickupTime": "10:00",
    "dropoffDate": "2026-09-23",
    "dropoffTime": "10:00",
    "imageUrl": "https://avisassets.abgemea.com/.imaging/gridView_vehicleSearch_large/dam/avis/fleet/BMW/X3/bmw_25x3xdrive20ftnmsprtsu4e_lowaggressive.png",
    "url": "https://secure.avis.fr/coverage-page?coverNavIndicator=true-true&pickupLocation=CDG&pickupDateTime=202609201000&returnLocation=CDG&returnDateTime=202609231000&country=FR&reference=0&awdcode=U197500&rentalPeriod=3&groupPickupLoc=M-A1CDG&locationBrand=avis&vehicleBrand=avis&paymentIndicator=pre",
    "scrapedAt": "2026-08-29T09:16:03.803Z"
}
```

This is real output from a live run against Paris Charles de Gaulle Airport (3-night search, September 2026) — 29 offers were returned, from city cars around €25/day up to premium SUVs and vans.

### Use cases

- **Brand-direct vs aggregator comparison** — Run alongside `rentalcars-scraper` for the same pickup location and dates to see exactly how much markup a comparison site adds on top of Avis's own rate.
- **Price monitoring** — Schedule daily runs to track Avis's own pricing trends and find the cheapest booking window.
- **Corporate travel** — Feed Avis rates directly into a travel-booking or expense-policy tool without going through a reseller.
- **Market research** — Analyze Avis's category mix, fleet composition, and seasonal pricing 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 a small platform start fee plus a per-result fee (Standard tier: ~$0.005 start + $0.002 per rental offer returned). A default run (up to 100 offers) costs about $0.21. A run's usage cost only settles after it reports SUCCEEDED.

### Limitations

- v1 targets the France market (`avis.fr` / `secure.avis.fr`, `fr_FR` locale) — other Avis country sites (avis.co.uk, avis.de, ...) use the same booking platform but a different locale endpoint and are not covered yet.
- One-way rentals (different drop-off location) are supported, but only within the resolved locations the France endpoint knows about.
- `fuelPolicy` (full-to-full, etc.) is not shown on the results page in this market and is left `null` rather than guessed — Avis reveals it at the coverage/checkout step, one request deeper than this actor goes in v1.
- Under-25 driver pricing (young-driver surcharge) requires a date of birth in Avis's flow and is not modeled — results reflect the standard 25+ rate.
- Data is scraped from the public website and may change without notice.

### Related Scrapers

- [RentalCars Scraper](https://apify.com/studioamba/rentalcars-scraper) — the Booking-Group aggregator covering Hertz, Avis, Europcar, Sixt, and dozens more suppliers in one search. Run both against the same location/dates to compare brand-direct vs aggregator pricing.
- More travel and car-rental scrapers on the [Studio AMBA Apify Store profile](https://apify.com/studioamba).

# Actor input Schema

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

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

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

City, airport, or station to drop the car off. Leave empty for a round trip back to the pickup location.

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

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

Pickup time, 24h HH:MM format. Leave empty to default to 10:00.

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

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

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

Drop-off time, 24h HH:MM format. Leave empty to default to 10:00.

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

Driver age. 25 or over unlocks the standard rate; under 25 may attract a young-driver surcharge shown at checkout (not modeled in the scraped price).

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

Maximum number of car rental offers to return.

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

Proxy settings. Avis.com has no meaningful anti-bot protection (verified — see the actor's recon notes) so the default Apify proxy works fine; residential proxies are not needed.

## Actor input object example

```json
{
  "pickupLocation": "Paris Charles de Gaulle Airport",
  "pickupTime": "10:00",
  "dropoffTime": "10:00",
  "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",
    "pickupTime": "10:00",
    "dropoffTime": "10:00",
    "maxResults": 5,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/avis-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",
    "pickupTime": "10:00",
    "dropoffTime": "10:00",
    "maxResults": 5,
    "proxyConfiguration": { "useApifyProxy": True },
}

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

```

## MCP server setup

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