# CRautos Scraper - Costa Rica Used Cars & Seller Phones (`normdata/crautos-scraper`) Actor

Scrape every used and new car on CRautos.com, the top car marketplace of Costa Rica. Get price in colones and US$, year, specs, plate digit and photos, plus km, seller name, phones, WhatsApp, address and equipment. Filter by brand, model, body, fuel, province, year and price.

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

## Pricing

from $6.80 / 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)

## 🚗 CRautos Scraper - Costa Rica Used Cars & Seller Phones

Extract every car, SUV, pickup, van and truck from **CRautos.com**, the biggest vehicle marketplace of Costa Rica, with about 11,000 listings from dealers and private sellers. For each vehicle you get the **brand, model, year, price in the seller's currency plus colones and US$, body type, fuel, transmission, engine size, seats, colors, last plate digit, province, the seller's comment, and the featured and financing flags**. Turn on **vehicle details** to also get the **km, condition, doors, taxes paid, negotiable price, trade-in, date listed, views and favorites, plus the seller's name and type, every phone and WhatsApp number, address, dealer page, every photo and the equipment list**. It collects **1,000 vehicles in about 25 seconds** and can run on a schedule to send you **only new listings**.

### 🎯 Who uses it?

#### 🏪 Car dealers and importers

See what every dealer and private seller in Costa Rica asks for each brand, model and year, in colones and dollars, to price your stock and find cars to buy.

#### 📞 Sales and lead generation teams

Get the phones, WhatsApp and address of every seller: insurers, banks, car loan companies, detailers, parts shops and inspection services use them as leads.

#### 📊 Market and pricing analysts

Build price models by brand, model, year, km, fuel and body type, compare colón and dollar listings at the site's own exchange rate, and track supply by province.

#### 🔔 Car buyers and resellers

Get a daily list of new listings for the cars you want, with the seller's WhatsApp ready.

### ✨ What it does

- **The whole site.** Every listing the search shows, used and new, with no page cap.
- **Many filters.** Brands, models, body type, fuel, transmission, provinces, doors, year, price in colones or US dollars, only used, only with financing and only if the seller takes a trade-in. Pick several values per filter: each combination becomes its own search.
- **Sort like on the site.** Lowest price, oldest year, brand or model.
- **Vehicle details add-on:** opens each vehicle page for the seller's contacts, km, condition, equipment and every photo.
- **Or paste links.** Vehicle pages, or a dealer's page with all its vehicles. Filters are not used with links.
- **Monitoring:** run it on a schedule with **Only new vehicles**, and each run saves only the listings you haven't received yet.

### 🏆 Why this scraper

- **Fast.** 1,000 vehicles in about 25 seconds without details, about 90 seconds with them.
- **Complete.** Every listing of a search, not a fixed maximum per run.
- **Both currencies.** Every price in colones and US$ at the site's own rate, so dollar and colón listings sort together. Price filters work in either currency.
- **Clean, typed data.** Prices, km, years, cc, seats, doors, views and favorites are numbers. Yes/no fields are true or false. Phones and WhatsApp are in +506 format. Dates are YYYY-MM-DD.
- **Nothing to set up.** No proxy, no login.

### ⚖️ How it compares

Based on each Actor's public input options and output fields (October 2026).

| Capability | This actor | [dadhalfdev](https://apify.com/dadhalfdev/crautos-scraper) |
|---|:--:|:--:|
| Vehicles per run | **no limit (the whole site)** | up to 2,000 |
| Seller name, phones, WhatsApp and address | **yes** | no |
| Km, condition, doors, taxes paid, negotiable, trade-in | **yes** | km only |
| Price in colones and US$ for every vehicle | **yes** | colones |
| Engine size, seats, colors, plate digit, comment, featured, financing | **yes** | no |
| Equipment list, every photo, views, favorites, date listed | **yes** | no |
| Several values per filter (like 3 brands or 2 provinces) | **yes** | one value each |
| Doors, only used, only with financing, only with trade-in filters | **yes** | no |
| Price filter in US dollars | **yes** | no |
| Vehicle page and dealer page links | **yes** | no (search link) |
| Only new listings on a schedule | **yes** | no |

### 📦 What data you get

| Field | Description |
| --- | --- |
| `imageUrl` | Main photo, full size. |
| `title` | Brand, model and year. |
| `brand`, `model` | Brand and model (with version, as the seller wrote it). |
| `year` | Model year. |
| `price`, `currency` | Asking price and its currency: CRC (colones) or USD, as the seller set it. |
| `priceCrc`, `priceUsd` | Price in colones and in US$, at the site's own exchange rate (for comparing listings). |
| `bodyType` | Body type, like Sedán, SUV 4WD/AWD, Pick Up 4WD or Hatchback. |
| `fuel` | Gasolina, Diesel, Híbrido or Eléctrico. |
| `transmission` | Manual or Automática (some sellers add more, like "Automática/Dual"). |
| `engineCc` | Engine size in cc. |
| `electricRange` | Range of electric vehicles, as the seller wrote it, like "120 kms" or "100 millas". |
| `passengers` | Number of passengers. |
| `exteriorColor`, `interiorColor` | Exterior and interior color, as the seller wrote them (Spanish). |
| `plateLastDigit` | Last digit of the plate (it sets the driving restriction day in San José). |
| `province` | Province where the vehicle is. |
| `comment` | The seller's short comment. |
| `id` | The site's listing ID. |
| `mileage`, `mileageUnit` | *(Vehicle details)* Distance driven and its unit (km or mi). |
| `batteryKwh` | *(Vehicle details)* Battery size of electric and hybrid vehicles, when given. |
| `condition` | *(Vehicle details)* Condition, as the site says it, like "Excelente" or "Muy bueno". |
| `doors` | *(Vehicle details)* Number of doors. |
| `views`, `favorites` | *(Vehicle details)* How many times the listing was viewed, and how many members saved it. |
| `sellerName`, `sellerType`, `sellerId` | *(Vehicle details)* Seller name, type (Dealer or Private) and dealer code. |
| `phone`, `whatsapp` | *(Vehicle details)* Main phone and WhatsApp, in +506 format. |
| `sellerAddress` | *(Vehicle details)* Seller's address. |
| `photoCount` | *(Vehicle details)* Number of photos. |
| `featured` | Featured (paid) listing. Empty for vehicle links. |
| `financing` | The listing offers financing. Empty for vehicle links. |
| `taxesPaid`, `negotiable`, `acceptsTrade` | *(Vehicle details)* Taxes are paid, the price is negotiable, and the seller takes a trade-in. |
| `url` | Link to the vehicle page. |
| `sellerPageUrl`, `whatsappUrl` | *(Vehicle details)* Dealer's page with all its vehicles, and WhatsApp chat link. |
| `photos` | *(Vehicle details)* Every photo, full size. |
| `phones` | *(Vehicle details)* Every phone and WhatsApp number of the seller. |
| `features` | *(Vehicle details)* Equipment the vehicle has, like "Cámara de retroceso" or "Bolsas de aire", in Spanish. |
| `listedAt` | *(Vehicle details)* Date the listing went up. |
| `scrapedAt` | When this row was saved. |
| `error` | Only present when a row failed. The fields that loaded are still there. |

Fields marked *Vehicle details* only appear when that add-on is on.

#### Example row (trimmed)

```json
{
  "imageUrl": "https://crautos.com/clasificados/usados/7497522-1.jpg",
  "title": "Toyota RAV4 LE 2023",
  "brand": "Toyota",
  "model": "RAV4 LE",
  "year": 2023,
  "price": 29000,
  "currency": "USD",
  "priceCrc": 13340000,
  "priceUsd": 29000,
  "bodyType": "SUV 4WD/AWD",
  "fuel": "Gasolina",
  "transmission": "Manual",
  "engineCc": 2000,
  "passengers": 5,
  "exteriorColor": "PLATEADO",
  "interiorColor": "NEGRO CON GRIS",
  "plateLastDigit": "7",
  "province": "Heredia",
  "comment": "Disponible en Sucursal Uno, trescientos cincuenta metros Oeste de EPA Belen",
  "id": "7497522",
  "mileage": 57446,
  "mileageUnit": "km",
  "condition": "Excelente",
  "doors": 5,
  "views": 201,
  "favorites": 0,
  "sellerName": "CHITO CARS",
  "sellerType": "Dealer",
  "sellerId": "YBHF4891",
  "phone": "+50662901001",
  "whatsapp": "+50662901001",
  "sellerAddress": "300 metros Oeste de la ferreteria EPA en San Antonio de Belen. Heredia",
  "photoCount": 5,
  "featured": false,
  "financing": true,
  "taxesPaid": true,
  "negotiable": true,
  "acceptsTrade": true,
  "url": "https://crautos.com/autosusados/cardetail.cfm?c=7497522",
  "sellerPageUrl": "https://crautos.com/autosusados/ssearchresults.cfm?p=1&c=YBHF4891",
  "whatsappUrl": "https://wa.me/50662901001",
  "photos": ["https://crautos.com/clasificados/usados/7497522-1.jpg", "https://crautos.com/clasificados/usados/7497522-2.jpg", "https://crautos.com/clasificados/usados/7497522-3.jpg"],
  "phones": ["+50662901001", "+50625896565"],
  "features": ["Dirección Hidráulica/Electroasistida", "Cierre central", "Vidrios eléctricos"],
  "listedAt": "2026-10-20",
  "scrapedAt": "2026-10-25T23:49:07.646Z"
}
```

### 💡 Use cases

**Every seller contact for Toyota and Hyundai SUVs in San José and Heredia:**

```json
{
  "brands": ["Toyota", "Hyundai"],
  "bodyTypes": ["SUV 4WD/AWD", "SUV 2WD"],
  "provinces": ["San José", "Heredia"],
  "includeDetails": true
}
```

**Used diesel 4x4 pickups from 2018, between 20,000 and 35,000 US dollars:**

```json
{
  "onlyUsed": true,
  "bodyTypes": ["Pick Up 4WD"],
  "fuels": ["Diesel"],
  "minYear": 2018,
  "priceCurrency": "USD",
  "minPrice": 20000,
  "maxPrice": 35000
}
```

**Hybrids and electric cars under ₡12,000,000, with financing:**

```json
{
  "fuels": ["Híbrido", "Eléctrico"],
  "maxPrice": 12000000,
  "onlyWithFinancing": true
}
```

**Every Corolla Cross and Yaris Cross, with km and the seller's WhatsApp:**

```json
{
  "brands": ["Toyota"],
  "models": ["cross"],
  "includeDetails": true
}
```

**New listings every day (schedule this run):**

```json
{
  "onlyNew": true,
  "monitorName": "daily-listings"
}
```

**Links (filters are not used):**

```json
{
  "startUrls": [
    { "url": "https://crautos.com/autosusados/ssearchresults.cfm?c=JHL2158" },
    { "url": "https://crautos.com/autosusados/cardetail.cfm?c=9700597" }
  ],
  "includeDetails": true
}
```

### ⚙️ How the input is organised

| Section | What it's for |
| --- | --- |
| **Maximum results** | Always first, caps the whole run. Empty means no limit. |
| **What to scrape** | Brands, models, sort by and vehicle details (km, seller phones, WhatsApp, address, equipment). |
| **Filters** | Body type, fuel, transmission, provinces, doors, from year, to year, price filter currency, minimum price, maximum price, only used, only with financing and only if they take a trade-in. |
| **Monitoring** | Only new vehicles and monitor name. |
| **Links** | Links instead of the fields above. Filters are ignored with links. |

### 💰 Pricing

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

| Your Apify plan | Price per vehicle |
| --- | --- |
| Free | $0.009 |
| Bronze | $0.0082 |
| Silver | $0.0074 |
| Gold / Platinum / Diamond | $0.0068 |

**Vehicle details add-on:** when **Vehicle details** is on, each vehicle saved with its page details adds one more charge:

| Your Apify plan | Vehicle details, per vehicle |
| --- | --- |
| Free | $0.013 |
| Bronze | $0.0118 |
| Silver | $0.0106 |
| Gold / Platinum / Diamond | $0.0095 |

Approximate total cost:

| Vehicles collected | Free | Bronze | Silver | Gold+ |
| --- | --- | --- | --- | --- |
| 1,000 | $9.00 | $8.20 | $7.40 | $6.80 |
| 1,000 with details | $22.00 | $20.00 | $18.00 | $16.30 |
| 11,000 (the whole site) | $99.00 | $90.20 | $81.40 | $74.80 |

Vehicle pages that could not be read pay only the base price, and vehicles left out by filters are free. New Apify accounts start with $5 in free credit. On the Free plan, a run saves up to 10 vehicles.

### 🚀 Run it

1. Create a free Apify account with $5 in credit.
2. Open the CRautos Scraper.
3. Add filters (or keep it empty for everything), then click **Start**.
4. Export the results as CSV, Excel, JSON or XML from the Dataset tab.

### 🤖 Use with AI agents (MCP)

Connect the [Apify MCP server](https://mcp.apify.com) to Claude, ChatGPT, Cursor or any MCP client, then ask in plain words, for example: *"Get every used Toyota RAV4 from 2019 or newer on CRautos under 25,000 US dollars, with the seller's WhatsApp"*. The agent runs this Actor and reads the results.

### 🔧 Troubleshooting

- **Few or no results.** Body type, fuel and transmission use the site's Spanish names (pick them from the lists). The model box matches part of the model name, so "cross" also finds "Crossfox" and "Eclipse Cross": add a brand to narrow it. Loosen a filter if nothing matches.
- **A search link was skipped.** CRautos search results links do not hold their filters, so set the same filters in the input instead. Vehicle pages and dealer pages work as links.
- **Prices in US dollars.** The site filters in colones. With US$ prices, the range is converted at the site's own rate and each vehicle is checked again in US$, so a run reads a few more pages than it saves.
- **Some fields are empty.** They are empty on the site too: some sellers write "ND" for km, private sellers have no dealer page or address, electric vehicles have a range instead of an engine size, and a few listings have no photo or no price.
- **A few more or fewer vehicles than the site's count.** Listings are added and sold while the run reads the site, and featured listings show up again on later pages (they are saved once).

### ❓ FAQ

**How many vehicles are there?** About 11,000 as of October 2026, almost all used.

**Are prices in colones or dollars?** Each listing is in the seller's currency (`price` and `currency`), and every row also has `priceCrc` and `priceUsd` as the site converts them.

**Do I need a proxy?** No.

### 🛡️ Limits & responsible use

This Actor collects vehicle listings that CRautos publishes on its website, at a moderate pace. Use the data in line with the site's terms and Costa Rica's data protection law (Law 8968). Seller phones belong to dealers and private people: follow anti-spam rules and only contact them about their listing.

### 📧 Contact

Questions, bugs or a field you need: norm.data.scrapers@gmail.com

### 🧪 Local development

```bash
bun install
bun scripts/gen-schemas.mjs
sh test/run.sh first '{"maxItems":10}'
```

# Actor input Schema

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

Stop after this many vehicles in total. Leave empty for no limit. The Apify Free plan is always capped at 10.

## `brands` (type: `array`):

Only these brands. Empty = every brand.

## `models` (type: `array`):

Only models whose name has this text, like "Corolla", "RAV4" or "Cross" (finds Corolla Cross and Yaris Cross). Up to 30 letters each.

## `sortBy` (type: `string`):

The order the site lists them in. Featured listings come first, as on the site.

## `includeDetails` (type: `boolean`):

Also read each vehicle page for mileage, condition, doors, taxes paid, negotiable price, trade-in, date listed, views and favorites, plus the seller name and type, every phone, WhatsApp, address, dealer page, every photo and the equipment list. Charged per vehicle as an add-on.

## `bodyTypes` (type: `array`):

Keep only these body types.

## `fuels` (type: `array`):

Keep only these fuels.

## `transmissions` (type: `array`):

Keep only these transmissions.

## `provinces` (type: `array`):

Only vehicles in these provinces. Empty = the whole country.

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

Empty = any.

## `minYear` (type: `integer`):

Model year, like 2018 (the site lists 1960 and later).

## `maxYear` (type: `integer`):

Model year, like 2024.

## `priceCurrency` (type: `string`):

The currency of the minimum and maximum price below. Vehicles priced in the other currency are compared at the site's own exchange rate.

## `minPrice` (type: `integer`):

In the currency above (colones when empty).

## `maxPrice` (type: `integer`):

In the currency above (colones when empty).

## `onlyUsed` (type: `boolean`):

Leave out new vehicles (the site lists both by default).

## `onlyWithFinancing` (type: `boolean`):

Keep only listings that offer financing.

## `onlyAcceptsTrade` (type: `boolean`):

Keep only sellers who accept a vehicle as part of the payment.

## `onlyNew` (type: `boolean`):

Skip vehicles saved by earlier runs with the same monitor name.

## `monitorName` (type: `string`):

Runs with the same name share their history. Use a different name for each schedule.

## `startUrls` (type: `array`):

Vehicle pages (https://crautos.com/autosusados/cardetail.cfm?c=9700597) or a seller's page with all their vehicles (https://crautos.com/autosusados/ssearchresults.cfm?c=JHL2158). Search results links do not hold their filters, so use the filters above for searches.

## Actor input object example

```json
{
  "maxItems": 10
}
```

# 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 = {
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("normdata/crautos-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 }

# Run the Actor and wait for it to finish
run = client.actor("normdata/crautos-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
}' |
apify call normdata/crautos-scraper --silent --output-dataset

```

## MCP server setup

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