# Decolar Brazil Car Rentals Scraper (`xtracto/decolar-brazil-car-rentals`) Actor

Scrape car rental offers from Decolar / Despegar Brazil (decolar.com/carros) in Brazilian Reais. Pick Brazilian cities and, optionally, a date range, and get vehicle model, price, rental company, transmission and category for every available car.

- **URL**: https://apify.com/xtracto/decolar-brazil-car-rentals.md
- **Developed by:** [Farhan Febrian Nauval](https://apify.com/xtracto) (community)
- **Categories:** Travel
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.67 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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?

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

## Decolar Brazil Car Rentals Scraper

Collect car-rental offers from **Decolar** (`decolar.com/carros`), the Brazilian
brand of Despegar, straight into a clean dataset. Give it Brazilian cities and get
one row per available car — model, total and daily price, rental company,
transmission, category, capacity and pick-up office, all in Brazilian Reais.

### What you get

Each row is one car offer:

| Field | Example |
| --- | --- |
| `vehicleModel` | Fiat Mobi, Renault Kwid |
| `totalPrice` / `dailyRate` / `currency` | 868 · 124 · BRL |
| `rentalCompany` | Localiza, Movida, Foco, Alamo, Locarx … |
| `transmission` | Manual / Automatic |
| `category` | Carros Pequenos, Carros Médios, SUV … |
| `passengerCapacity`, `doors` | 5 pessoas · 4 portas |
| `pickupCity`, `pickupOfficeName`, `pickupOfficeAddress` | Recife · Loja no Aeroporto Guararapes Intl · … |

The full upstream offer object (vehicle spec, price breakdown, insurances,
promotions, offices) is passed through untouched alongside these promoted fields.

### Input

```json
{
  "pickupCities": ["rec", "sao", "rio"],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "BR"
  }
}
```

- **pickupCities** — one or more Brazilian cities (choose from the list, or pass a
  Decolar 3-letter city code). Leave empty to search the whole built-in list.
- **proxyConfiguration** — must be a **Brazilian residential** proxy (see below).

### How it works

Decolar is protected by **DataDome**, which blocks datacentre and non-Brazilian
IPs. The actor draws Brazilian residential exit IPs until one is let through, reads
the signed search token off the page, and replays it to Decolar's internal
car-offers API — then returns every offer the city lists. One accepted session
covers the whole run.

Because of this, a **Brazilian residential proxy is required**. On a datacentre or
non-Brazilian IP every request is blocked and the run reports `blocked_by_datadome`.
Every city that returns nothing still emits one diagnostic `SEARCH_STATUS` row
explaining why, so a run never fails silently.

### Notes & limits

- Prices reflect what a Brazilian customer is quoted on Decolar (BRL); each offer
  also carries the upstream USD figure in its raw `pricesDetail`.
- Offers are Decolar's current best availability for the city (its default
  near-term rental window), not a custom pick-up/drop-off date search.
- This scraper reads only public offer listings — no login, no personal data.

# Actor input Schema

## `pickupCities` (type: `array`):

Brazilian pick-up cities to search on Decolar (decolar.com). Leave empty to search the full built-in list. Values are Decolar city codes; a raw 3-letter Decolar code not on this list is also accepted.

## `startDate` (type: `string`):

Pick-up date and time, YYYY-MM-DD HH:MM:SS (e.g. 2026-09-07 10:30:00). Leave both dates empty to get each city's current landing offers instead of a dated search.

## `endDate` (type: `string`):

Drop-off date and time, YYYY-MM-DD HH:MM:SS. Must be after the start date. Ignored when Date ranges is set.

## `dateRanges` (type: `array`):

Search several rental periods in a single run. Every city is searched for every period listed here, sharing one warm-up, which is far cheaper than one run per period. Format: \[{"startDate": "2026-09-07 10:30:00", "endDate": "2026-09-08 10:30:00"}]. Overrides the single Start/End date fields above.

## `maxResultsPerCity` (type: `integer`):

Cap the number of car offers emitted per city. 0 = no cap (every offer Decolar lists).

## `pageSize` (type: `integer`):

Decolar's chapu pageSize. The actor pages through results until the city is exhausted; a larger value means fewer round-trips.

## `sessionHuntAttempts` (type: `integer`):

How many Brazilian residential exit IPs to try before giving up on finding one Decolar's DataDome protection accepts. One accepted session covers the whole run, so the default of 80 leaves a wide margin. Each attempt costs a second or two.

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

Currency label recorded on the output. Keep BRL (R$) — the Brazilian point of sale is what this actor targets.

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

Must be a Brazilian residential proxy. Decolar is behind DataDome and blocks datacentre / foreign IPs; a Brazilian residential exit is required to clear it and to get Brazilian pricing.

## Actor input object example

```json
{
  "pickupCities": [
    "rec"
  ],
  "maxResultsPerCity": 0,
  "pageSize": 24,
  "sessionHuntAttempts": 80,
  "currency": "BRL",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BR"
  }
}
```

# Actor output Schema

## `vehicleModel` (type: `string`):

Car model as Decolar lists it, e.g. 'Fiat Mobi ou similar'.

## `totalPrice` (type: `string`):

Advertised rental price for the offer. Numeric value in the row currency.

## `dailyRate` (type: `string`):

Total price divided by the billable rental days, when a date range was searched.

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

ISO currency code of the price, normally BRL.

## `rentalCompany` (type: `string`):

Supplier offering the car, e.g. Localiza, Movida, Unidas.

## `transmission` (type: `string`):

Normalised transmission type - Automatic or Manual.

## `category` (type: `string`):

Vehicle category as Decolar groups it, e.g. Econômico, Intermediário, SUV.

## `passengerCapacity` (type: `string`):

Passenger capacity chip from the vehicle specification.

## `doors` (type: `string`):

Number-of-doors chip from the vehicle specification.

## `pickupCity` (type: `string`):

City the offer was searched for.

## `pickupCityCode` (type: `string`):

Decolar 3-letter city code used in the search URL.

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

Pick-up date searched (empty for the undated landing-offers mode).

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

Drop-off date searched (empty for the undated landing-offers mode).

## `rentalDays` (type: `string`):

Billable rental days for a dated search.

## `providerCode` (type: `string`):

Decolar internal supplier code for the offer.

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

Decolar page the offer was harvested from.

## `recordType` (type: `string`):

CAR_OFFER for a real offer, SEARCH_STATUS for a diagnostic row.

## `_source` (type: `string`):

Which endpoint produced the row: S1-chapu-results (dated) or S1-chapu-landing (undated).

# 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 = {
    "pickupCities": [
        "rec"
    ],
    "currency": "BRL"
};

// Run the Actor and wait for it to finish
const run = await client.actor("xtracto/decolar-brazil-car-rentals").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 = {
    "pickupCities": ["rec"],
    "currency": "BRL",
}

# Run the Actor and wait for it to finish
run = client.actor("xtracto/decolar-brazil-car-rentals").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 '{
  "pickupCities": [
    "rec"
  ],
  "currency": "BRL"
}' |
apify call xtracto/decolar-brazil-car-rentals --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,xtracto/decolar-brazil-car-rentals"
        }
    }
}
```

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/bOYOMZNuNbXdaGgCx/builds/q9IIfukOu514m8PRu/openapi.json
