# Chileautos Scraper (`normdata/chileautos-scraper`) Actor

Track Chile's entire car market in one pull: dealers spot competitor pricing, researchers model depreciation by year and mileage, lead-gen teams get seller names and contacts, and buyers skip sponsored ads — every car, moto, truck and bus on Chileautos, without stalling.

- **URL**: https://apify.com/normdata/chileautos-scraper.md
- **Developed by:** [Norm Data](https://apify.com/normdata) (community)
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $17.00 / 1,000 vehicles

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?

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

![Norm Data](https://raw.githubusercontent.com/FabriAV/normdata/refs/heads/main/assets/banner_norm2.png)

## 🚗 Chileautos Scraper

Extract car, motorcycle, truck, and bus listings from **Chileautos.cl**: make, model, year, price, odometer, fuel, transmission, body type, seller, region, and photos, as clean structured rows. No browser, **no proxy**, CSV/JSON/Excel ready.

Chileautos is Chile's largest vehicle classifieds site, with tens of thousands of active listings. Its listing pages are protected by DataDome, but this Actor talks directly to the same JSON API the site itself uses to render results, so it never needs a browser, a proxy, or a CAPTCHA solve to work.

### 🎯 Who uses it?

#### 🚘 Dealerships and car lots

Track competitor inventory and pricing by brand, body type, or region, and spot underpriced stock to flip.

#### 📊 Market researchers and pricing analysts

Build price-by-year-by-km datasets for any make and model to model depreciation curves or set listing prices.

#### 📇 Lead-generation teams

Pull private-seller listings with contact-ready details, or dealership inventory with the dealer's name attached.

#### 🗂️ Data analysts and journalists

Snapshot the used and new car market in Chile, by region, fuel type, or vehicle category, on a schedule.

### ✨ What it does

- **Paste a search link, or use the filters.** Already built a search on chileautos.cl? Paste that page's URL and it's reused exactly, same as pasting a `startUrl` on other scrapers.
- **Every filter Chileautos itself offers:** make, body type, condition, region, fuel, transmission, color, price/year/km ranges.
- **Multiple searches in one run:** list several keywords (models, trims, anything) and every row is tagged with the keyword that found it.
- **No pagination cap.** It keeps requesting until it has what you asked for or the matching listings run out, not a fixed page limit.
- **Seller name included.** Dealership name when the listing is from an agency, plus a clean private/dealer flag.
- **Sponsored listings flagged.** A `featured` field tells you which rows are paid placements, so you can exclude them from market analysis.
- **Raw query override.** Power users can paste Chileautos' own filter syntax directly for anything not exposed as a dedicated input.

### 🏆 Why this scraper

- **Zero proxy, zero browser, by design.** Every request is a plain JSON call to the same endpoint the site's own search page calls, not a workaround bolted onto a browser scraper.
- **No artificial page cap.** It keeps going until the matching pool is exhausted, instead of stopping at a fixed number of pages.
- **Transparent about sponsored content.** Featured/boosted listings are flagged, not silently mixed in with organic results.
- **One run, many searches.** Keywords are a list, run "corolla" and "civic" together and get both back, each tagged with the term that matched.

### ⚖️ How it compares

| Capability | This actor | [scraperschile/chileautos](https://apify.com/scraperschile/chileautos) |
|---|:--:|:--:|
| Paste a search link from the site instead of filling filters | yes | yes (`startUrl`) |
| Needs a browser or proxy in normal operation | **no, pure JSON API** | no (own README: structured route first) |
| Ships a browser + proxy fallback path at all | **no** | yes (documented fallback for when the structured route fails) |
| Public 30-day run reliability (from the Actor's own Apify stats) | n/a (new) | 32 of 273 runs **FAILED** (~12%) |
| Multiple keywords in one run, tagged per row | **yes** | no (single filter set per run) |
| Sponsored/featured listings flagged | **yes** | not exposed |
| Seller (dealership) name in output | **yes** | not listed in their output fields |
| Seller phone **and** WhatsApp | **yes** | phone only (scrapers_lat/chileautos-scraper) |
| Price/year/km **and** engine size range filters | yes (no engine-size facet exposed) | **yes, plus city/comuna-level location** |
| Raw query override for power users | **yes** | no |
| Dealer name on every agency listing, a real B2B lead, not just an ad | **yes** | no |

City/comuna-level filtering is the one place the other actor is ahead, this one currently filters by region only (see Limits below).

### 📦 What data you get

| Field | Description |
| --- | --- |
| `adId`, `url` | Chileautos' internal ad ID and the canonical listing URL. |
| `title`, `year`, `make`, `model`, `variant` | Full title plus its parsed year, make, model, and trim/engine variant. |
| `condition` | `Nuevo` or `Usado`. |
| `price`, `currency` | Listed price and currency (almost always CLP). |
| `km` | Odometer reading. |
| `bodyType`, `fuel`, `transmission` | Vehicle specs, when the listing shows them (new-vehicle and motorcycle listings often omit some of these). |
| `region` | Chilean region where the vehicle is listed. |
| `sellerName`, `sellerType` | Dealership name (when sold by an agency) and `Particular` / `Agencia`. |
| `sellerPhone`, `sellerWhatsapp` | The seller's public phone and WhatsApp, normalized to `+56…`. Left out of the row entirely when Include seller phone and WhatsApp is off. |
| `featured`, `badge` | Whether the listing is a paid/sponsored placement, and any on-site badge text. |
| `mainImage`, `images` | Photo URLs. |
| `searchKeyword`, `searchMake` | Which input produced this row. |
| `source`, `scrapedAt` | Always `chileautos.cl`, plus the UTC timestamp. |

### 💡 Use cases

#### 🚘 Monitor Toyota Corolla pricing by year and mileage

```json
{ "maxItems": 500, "make": "Toyota", "keywords": ["corolla"], "condition": "usado" }
```

#### 📊 Snapshot new SUV inventory nationwide

```json
{ "maxItems": 1000, "vehicleType": "autos", "bodyType": "SUV", "condition": "nuevo" }
```

#### 📇 Build a private-seller lead list in one region

```json
{ "maxItems": 300, "region": "Valparaíso", "sellerType": "particular" }
```

#### 🏍️ Track used motorcycle listings under a price cap

```json
{ "maxItems": 200, "vehicleType": "motos", "priceMax": 5000000, "condition": "usado" }
```

#### 🔗 Reuse a search you already built on the site

```json
{ "maxItems": 100, "pageUrl": "https://www.chileautos.cl/vehiculos/?q=(And.Servicio.ChileAutos._.Marca.Toyota.)" }
```

### ⚙️ How the input is organised

| Section | What it's for |
| --- | --- |
| **Maximum vehicles** | Always first, caps the whole run. |
| **Search** | Paste a search link from the site, or use Keywords, Make, Vehicle type, Condition. |
| **Location** | Region. |
| **Price, year and odometer** | Min/max price, model year, and kilometers. |
| **Vehicle details** | Body type, fuel, transmission, color. |
| **Seller** | Keep only private sellers or only dealerships, and include their phone/WhatsApp. |
| **Advanced** | A raw Chileautos query override. |

### 💰 Pricing

Pay-per-event: **$0.003** when the run starts, plus a price per vehicle saved to your dataset. The per-vehicle price depends on your Apify plan tier:

| Your Apify plan | Price per vehicle |
| --- | --- |
| Free | $0.0200 |
| Bronze | $0.0190 |
| Silver | $0.0180 |
| Gold / Platinum / Diamond | $0.0170 |

Each vehicle is a full record, not just a title and a link: year, make, model, trim, price, mileage, fuel, transmission, body type, region, the seller's phone and WhatsApp, a dealer's actual business name on agency listings, and a sponsored/organic flag, the kind of detail a lead list or a market-pricing dataset is actually built on.

New Apify accounts start with $5 in free credit.

### 🚀 Run it

1. Create a free Apify account with $5 in credit.
2. Open the Chileautos Scraper.
3. Set Make, Vehicle type, or any filter you need, set Maximum vehicles, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

Run it programmatically through the Apify API (`run-sync-get-dataset-items`) or the ApifyClient for JavaScript and Python.

### 🤖 Use with AI agents (MCP)

Give an AI agent live access to Chileautos through the Model Context Protocol:

```
claude mcp add --transport http apify "https://mcp.apify.com?tools=normdata/chileautos-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### 🔧 Troubleshooting

**Why am I getting no results?**
Make, Region, Body type, and Color must match Chileautos' own spelling exactly (see the examples in each field's description). Chileautos itself doesn't error on an unrecognized value, it silently answers with its general catalog instead, so this Actor double-checks Make, Region, and Condition on every row and drops anything that doesn't actually match, rather than shipping the wrong vehicles. A misspelled filter shows up as zero results, not wrong ones.

**I pasted a search link and nothing happened / my filters below were ignored.**
That's expected when the link has a `?q=` in it, it's reused as-is and every filter below is intentionally skipped (the run log says so). If the link has no `?q=` (a single listing's own page, or a plain category link like `/vehiculos/toyota/`), it can't be reused as a filter, the run logs a warning and falls back to whatever filters you set below instead.

**Why did my run stop before reaching Maximum vehicles?**
Chileautos doesn't expose a normal "next page", this Actor automatically widens a stalled search by year, then by price, to dig past that (so you don't have to narrow your own filters to get a big batch). If it still stops early, your filters' matching pool is genuinely that small, or the run's request budget for this search was reached, the summary log says which.

**Why are bodyType, fuel or transmission empty on some rows?**
New-vehicle listings and most motorcycle/truck listings don't show all of those specs on their card, they're left `null` rather than guessed.

**Can I filter by comuna (city), not just region?**
Not yet, only region-level filtering is supported today. Use the Raw query override in Advanced if you know Chileautos' internal expression for a comuna.

### ❓ FAQ

| Question | Answer |
| --- | --- |
| Do I need a Chileautos account or API key? | No. The Actor reads public listing data, so no login or API key is required. |
| Can I just paste a URL from the site? | Yes, paste a search results link (one you got by applying filters on chileautos.cl) into Paste a Chileautos search link. A single listing's own page doesn't work, since it carries no reusable filter. |
| Does this need a proxy? | No, never, it talks to the same JSON endpoint the site itself uses. |
| Can I search multiple models in one run? | Yes. Add several entries to Keywords, each row is tagged with the one that matched. |
| What does `featured` mean? | The listing is a paid/boosted placement on Chileautos, not a plain organic result. |
| Can I get the dealer's name? | Yes, in `sellerName`, for listings posted by an agency. |
| Can I get the seller's phone? | Yes, `sellerPhone` and `sellerWhatsapp`, on by default. |
| What output formats are supported? | CSV, JSON, Excel, or XML, from the Apify platform or API. |
| Is the data live? | Yes, each run reads the current Chileautos listings. |
| Can I schedule regular scrapes? | Yes, use Apify's built-in Scheduler to run it daily, weekly, or at any interval. |

### 🛡️ Limits and responsible use

This Actor collects only publicly available listing data from Chileautos. It never signs in and never touches private, internal, or paywalled pages, and it never attempts to bypass Chileautos' anti-bot protection, it simply calls the same public JSON endpoint the site's own search page uses.

Seller names and locations are personal/business data in some cases, use them in line with Chileautos' terms and applicable law (GDPR/CCPA). Comuna-level filtering is not supported yet (region-level only); very narrow filter combinations may return fewer vehicles than requested once the matching pool runs out.

### 📧 Contact

Need a scraper for a different site, or found something wrong with this one? norm.data.scrapers@gmail.com

### 🧪 Local development

```powershell
bun install
bun test
bun run typecheck
apify run
```

Local results are stored in `storage/datasets/default`.

# Actor input Schema

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

Stop after this many listings. Leave empty for no limit (the run stops on its own once the matching listings run out). The Apify Free plan is always capped at 10.

## `pageUrl` (type: `string`):

Already built a search on chileautos.cl with the filters you want? Paste that page's URL here and this Actor reuses it exactly, every filter below is then ignored. Works for a search results link; it does not work for a single listing's own page.

## `keywords` (type: `array`):

Free-text search terms, e.g. "corolla" or "4x4 diesel". Each keyword runs its own search and is tagged on every row it produces. Combines with Make and every filter below.

## `make` (type: `string`):

Exact brand name as shown on Chileautos, e.g. "Toyota", "Chevrolet", "Great Wall". Leave empty for every make.

## `vehicleType` (type: `string`):

Top-level category to search.

## `condition` (type: `string`):

New or used vehicles.

## `region` (type: `string`):

Chilean region, exactly as Chileautos names it, e.g. "Metropolitana de Santiago", "Valparaíso", "Bío Bío", "Araucanía", "Ñuble", "Los Lagos", "Los Ríos", "Maule", "Coquimbo", "Atacama", "Tarapacá", "Arica y Parinacota", "Aysén", "Magallanes y Antártica Chilena", "OHiggins". Leave empty for all of Chile.

## `priceMin` (type: `integer`):

Only listings priced at or above this amount, in Chilean pesos.

## `priceMax` (type: `integer`):

Only listings priced at or below this amount, in Chilean pesos.

## `yearMin` (type: `integer`):

Oldest model year to include.

## `yearMax` (type: `integer`):

Newest model year to include.

## `kmMin` (type: `integer`):

Minimum kilometers travelled.

## `kmMax` (type: `integer`):

Maximum kilometers travelled.

## `bodyType` (type: `string`):

Exact body style as shown on Chileautos, e.g. "SUV", "Sedán", "Hatchback", "Camioneta", "Furgón", "Coupé", "Station Wagon". Leave empty for any.

## `fuel` (type: `string`):

Engine fuel type.

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

Gearbox type.

## `color` (type: `string`):

Exact color name as shown on Chileautos, e.g. "Blanco", "Negro", "Gris". Leave empty for any.

## `sellerType` (type: `string`):

Keep only private sellers or only dealerships. Applied after fetching, like a client-side filter.

## `includeSellerContact` (type: `boolean`):

Adds the seller's public phone and WhatsApp number to every row, ready-to-call leads. One extra quick request per listing; turn off for a faster listing-only run.

## `customQuery` (type: `string`):

Optional. Paste a raw Chileautos search expression (the same format the site builds when you apply filters, e.g. "Marca.Toyota.\_.Precio.range(5000000..15000000).") to filter on something not exposed above. When set, it's combined with Keywords but replaces every other filter.

## Actor input object example

```json
{
  "maxItems": 10,
  "pageUrl": "https://www.chileautos.cl/vehiculos/?q=(And.Servicio.ChileAutos._.Marca.Toyota.)",
  "keywords": [
    "corolla"
  ],
  "make": "Toyota",
  "vehicleType": "autos",
  "condition": "cualquiera",
  "region": "Metropolitana de Santiago",
  "bodyType": "SUV",
  "fuel": "cualquiera",
  "transmission": "cualquiera",
  "sellerType": "todos",
  "includeSellerContact": true
}
```

# Actor output Schema

## `vehicles` (type: `string`):

One row per listing.

# 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 = {
    "maxItems": 10,
    "vehicleType": "autos",
    "condition": "cualquiera",
    "fuel": "cualquiera",
    "transmission": "cualquiera",
    "sellerType": "todos",
    "includeSellerContact": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("normdata/chileautos-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 = {
    "maxItems": 10,
    "vehicleType": "autos",
    "condition": "cualquiera",
    "fuel": "cualquiera",
    "transmission": "cualquiera",
    "sellerType": "todos",
    "includeSellerContact": True,
}

# Run the Actor and wait for it to finish
run = client.actor("normdata/chileautos-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 '{
  "maxItems": 10,
  "vehicleType": "autos",
  "condition": "cualquiera",
  "fuel": "cualquiera",
  "transmission": "cualquiera",
  "sellerType": "todos",
  "includeSellerContact": true
}' |
apify call normdata/chileautos-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,normdata/chileautos-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/TunX1qvrfMngOXJHX/builds/2hXYGvhwyGZovu6on/openapi.json
