# Kavak LATAM Used Car Marketplace Scraper (`jungle_synthesizer/kavak-latam-used-car-marketplace-scraper`) Actor

Extract Kavak's owned used-car inventory across Mexico, Brazil, Argentina and Chile: price, financing, mileage, spec, hub location and availability for every listed vehicle, normalised into one cross-country schema.

- **URL**: https://apify.com/jungle\_synthesizer/kavak-latam-used-car-marketplace-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** E-commerce, Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 record 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

## Kavak LATAM Used Car Marketplace Scraper

Extract **Kavak's** own used-car inventory across its four live storefronts — Mexico, Brazil, Argentina and Chile — into one normalised, cross-country dataset. Kavak owns and prices every vehicle it lists, so this is a clean first-party price series, not a classifieds aggregation: price, financing terms, mileage, full spec, certification/warranty policy, hub location and availability for every unit.

### What it does

- Crawls all four live Kavak storefronts (`mx`, `br`, `ar`, `cl`) — or a subset you choose
- Walks each country's full catalogue via pagination, not a narrow facet slice
- Returns price, an estimated monthly financing payment and an initial down-payment amount per vehicle
- Returns full vehicle spec: make, model, trim/version, year, mileage, transmission, fuel type, body type, engine, colour, drivetrain
- Returns Kavak's certification policy (inspection-point score, warranty length, return window) where the storefront publishes it
- Returns the holding hub/showroom, city/region and live availability status
- Supports `resumeCursor` to continue a large crawl without re-paying for records already delivered

### Use cases

- **Price benchmarking** — track first-party used-car pricing and financing terms across four Latin American markets in one schema
- **Market research** — compare inventory mix, pricing and availability by make/model/country over time
- **Financing analysis** — study Kavak's monthly-payment and down-payment structure against list price
- **Lead sourcing** — build a feed of currently available, certified used vehicles by hub/region

### Input

| Field | Type | Description | Default |
|-------|------|-------------|---------|
| `countries` | array | Storefronts to crawl: `mx`, `br`, `ar`, `cl`. Leave empty to crawl all four. | all four |
| `maxItems` | integer | Maximum number of vehicles to return | `10` |
| `resumeCursor` | string | Cursor from a previous run's Output, used to continue a crawl that stopped early | — |

**All four markets:**

```json
{
  "maxItems": 200
}
```

**Mexico only:**

```json
{
  "countries": ["mx"],
  "maxItems": 100
}
```

#### Resuming a large crawl

Every run emits a `resumeCursor` in its Output. If a large crawl stops before it finishes — because it hit `maxItems`, your spend cap (`maxTotalChargeUsd`), or was aborted — start a new run with **the same input** plus that `resumeCursor` to continue from where it left off.

- You are **not re-charged** for records the earlier run already delivered.
- Resume within your account's run-retention window. Once the source run is pruned, its `resumeCursor` is no longer valid.
- `resumeCursor` is opaque — supply it unmodified.

### Output Fields

| Field | Description |
|-------|-------------|
| `vehicle_id` | Kavak's internal stock/car id for this vehicle |
| `url` | Canonical detail-page URL |
| `country` | Storefront country code: `mx` / `br` / `ar` / `cl` |
| `title` | Vehicle title as shown on the site |
| `make` | Vehicle make/brand |
| `model` | Vehicle model |
| `version` | Trim/version string |
| `year` | Model year |
| `mileage_km` | Odometer reading in kilometres |
| `price_amount` | Listed price in local currency |
| `price_currency` | `MXN` / `BRL` / `ARS` / `CLP` |
| `price_discounted` | Active promotional price when Kavak is running a discount on this unit (`null` if no promo) |
| `monthly_payment` | Advertised financing monthly-payment estimate, local currency (`null` where the storefront doesn't show one) |
| `down_payment` | Initial up-front payment shown in Kavak's financing calculator, local currency |
| `transmission` | Transmission type |
| `fuel_type` | Fuel type |
| `body_type` | Body style, e.g. Suv / Sedan / Hatchback |
| `engine` | Engine description |
| `colour` | Exterior colour |
| `traction` | Drivetrain configuration |
| `inspection_points` | Kavak's published certification inspection-point score (site policy figure, best-effort per market) |
| `warranty_months` | Included warranty length in months (site policy figure, best-effort per market) |
| `return_policy_days` | Return window in days (site policy figure, best-effort per market) |
| `hub_location` | Name of the Kavak hub/showroom holding the unit |
| `region` | City/region of the holding hub |
| `availability_status` | Availability state, e.g. `InStock` / `Disponible` / reserved |
| `has_360_tour` | Whether a 360° interactive tour is available |
| `photo_count` | Number of listing photos |
| `thumbnail_url` | Primary listing image URL |
| `scrapedAt` | ISO-8601 timestamp when the record was scraped |

### Notes

- Colombia and Peru have exited the Kavak network (their storefronts redirect); Turkey now runs on the separate carvak.com brand. All three are correctly out of scope.
- `inspection_points`, `warranty_months` and `return_policy_days` are Kavak's site-wide certification policy for a market, not a per-vehicle figure — they're only populated when the storefront publishes the numbers on that page, so expect them to be consistently present on some markets and sparse on others.
- `monthly_payment` and `down_payment` reflect Kavak's own financing calculator defaults and are `null` on units where the storefront doesn't surface a financing estimate.
- `price_discounted` is only set on vehicles currently running an active Kavak promotion.

### Example

Input:

```json
{
  "countries": ["mx"],
  "maxItems": 5
}
```

Output (excerpt):

```json
{
  "vehicle_id": "521638",
  "url": "https://www.kavak.com/mx/usado/nissan-kicks-16_advance_lts_xtronic-suv-2023",
  "country": "mx",
  "title": "Nissan Kicks 1.6 ADVANCE LTS XTRONIC Suv 2023",
  "make": "Nissan",
  "model": "Kicks",
  "version": "1.6 ADVANCE LTS XTRONIC",
  "year": 2023,
  "mileage_km": 37540,
  "price_amount": 240999,
  "price_currency": "MXN",
  "price_discounted": null,
  "monthly_payment": 4333,
  "down_payment": 180749,
  "transmission": "Automático",
  "fuel_type": "Gasolina",
  "body_type": "Suv",
  "engine": "Motor 1.6 ADVANCE LTS XTRONIC",
  "colour": "Blanco",
  "traction": "FrontWheelDriveConfiguration",
  "inspection_points": 240,
  "warranty_months": 3,
  "return_policy_days": 7,
  "hub_location": "Kavak Artz Pedregal",
  "region": "Ciudad de México",
  "availability_status": "InStock",
  "has_360_tour": false,
  "photo_count": 20,
  "thumbnail_url": "https://images.prd.kavak.io/images/521638/EXTERIOR-frontSidePilotNear.jpeg",
  "scrapedAt": "2026-08-11T03:53:00.000Z"
}
```

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

## `resumeCursor` (type: `string`):

Leave empty for a fresh crawl. To CONTINUE a previous run where it stopped — without paying again for records you already received — paste the `resumeCursor` value from that run's Output (the run's OUTPUT key). Resume promptly: the previous run's data expires with your account's retention window (free tier: your ~10 most recent runs).

## `maxItems` (type: `integer`):

Maximum number of items to scrape

## `countries` (type: `array`):

Kavak storefronts to crawl. Leave empty to crawl all four live markets.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10,
  "countries": [
    "mx",
    "br",
    "ar",
    "cl"
  ]
}
```

# 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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
    "countries": [
        "mx",
        "br",
        "ar",
        "cl"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/kavak-latam-used-car-marketplace-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
    "countries": [
        "mx",
        "br",
        "ar",
        "cl",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/kavak-latam-used-car-marketplace-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 '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10,
  "countries": [
    "mx",
    "br",
    "ar",
    "cl"
  ]
}' |
apify call jungle_synthesizer/kavak-latam-used-car-marketplace-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/kavak-latam-used-car-marketplace-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/NolPg32vl4BVbVDPv/builds/bE3zFi863AGsHb1qf/openapi.json
