# Webmotors Brazil Cars Scraper (`automatic/webmotors-br-scraper`) Actor

Used-car listings from Webmotors (webmotors.com.br), Brazil's biggest car marketplace: price (BRL), make, model, year, mileage km, transmission, location and photos per listing. Fresh listings every run.

- **URL**: https://apify.com/automatic/webmotors-br-scraper.md
- **Developed by:** [Philip Kirkbride](https://apify.com/automatic) (community)
- **Categories:** E-commerce
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 76.9% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Webmotors Brazil Cars Scraper

Collect used-car listings (*carros usados*, *seminovos*) from Webmotors
(webmotors.com.br), one of Brazil's largest car marketplaces. Filter by make,
model and state, and get one row per car with the asking price in Brazilian
reais (BRL), make, model, year, mileage (km), transmission, city and state,
photos and the listing link. Built for dealers, car-price researchers, lenders
and insurers who need Brazilian used-car prices in a spreadsheet.

### What you can do with it

- **Price guides and valuations:** compare asking prices for a model and year
  (for example a 2021 Toyota Corolla) by mileage and state.
- **Dealer stock research:** watch what is listed for the makes you sell in
  São Paulo, Minas Gerais or Paraná, and how prices move week to week.
- **Market reports:** track supply by make, model year and transmission across
  Brazil.
- **Lending and insurance checks:** pull current comparables for a vehicle
  before quoting a loan or a policy.

### Quick start

The Console form starts with empty filters: one page of cars from all makes
nationwide (about 24 cars). An empty input (`{}`) does the same. A small
filtered search:

```json
{"makes": ["Toyota"], "models": ["Corolla"], "states": ["SP"], "maxResults": 10}
```

Several makes in two states, two pages each:

```json
{"makes": ["Toyota", "Honda", "Fiat"], "states": ["São Paulo", "MG"], "maxPages": 2, "maxResults": 150}
```

### Input

| Name | Type | Default | What it does |
| --- | --- | --- | --- |
| `makes` | array | `[]` | Makes to search, such as `Toyota`, `Fiat` or `Volkswagen`. Empty = all makes. |
| `models` | array | `[]` | Models paired with `makes` by position, at most one per make. `makes: ["Toyota", "Fiat"]` with `models: ["Corolla"]` scopes Toyota to the Corolla and leaves Fiat open. Needs `makes`. |
| `states` | array | `[]` | Brazilian states, as full names with accents (`São Paulo`, `Paraná`) or two-letter UFs (`SP`, `MG`). Empty = nationwide. An unknown state is rejected. |
| `maxPages` | integer | `1` | Result pages per search, 1 to 10 (about 24 cars per page). |
| `maxResults` | integer | `50` | Maximum cars across all searches, 1 to 200. |
| `requestDelaySecs` | number | `1.0` | Pause between pages, 0.5 to 10 seconds. |

Every make (with its model) is searched in every state you list, so two makes
and two states are four searches. A car found by two searches is returned
once. Leave the connection and diagnostics settings at their defaults.

### Output example

One row per car. Values from a captured Webmotors search result (October
2026\), with the photo list shortened to two of its fifteen URLs and an
example collection time:

```json
{
  "listing_key": "webmotors.com.br:81069242",
  "url": "https://www.webmotors.com.br/comprar/land-rover/range-rover-evoque/20-p250-flex-se-awd-automatico/4-portas/2022/81069242",
  "price_brl": 199900,
  "make": "LAND ROVER",
  "model": "RANGE ROVER EVOQUE",
  "year": 2022,
  "km": 66000,
  "transmission": "Automático",
  "location": "Valinhos/SP",
  "images": [
    "https://image.webmotors.com.br/_fotos/anunciousados/gigante/2026/202610/20261012/land-rover-range-rover-evoque-2.0-p250-flex-se-awd-automatico-wmimagem10503791833.jpg",
    "https://image.webmotors.com.br/_fotos/anunciousados/gigante/2026/202610/20261012/land-rover-range-rover-evoque-2.0-p250-flex-se-awd-automatico-wmimagem10503956917.jpg"
  ],
  "source": "webmotors.com.br",
  "scraped_at": "2026-10-12T15:00:00+00:00"
}
```

- `price_brl` is the advertised price in reais, or `null` when the listing has
  no price.
- `year` is the model year (or the fabrication year when no model year is
  given). `km` is the odometer reading.
- `transmission` is `Automático` or `Manual` when the listing states it.
- `location` is `City/UF`.
- `listing_key` is stable across runs; use it to deduplicate and to track a
  car over time.

Fields the listing does not show are `null`. Download the dataset as JSON,
CSV, Excel, XML or HTML, or read it through the Apify API.

### Pricing

Pay per result:

- **$0.004** per car delivered.
- **$0.005** per run start. The start event is charged per GB of memory; the
  default 1024 MB run is one start event.

Worked costs: a 10-car search costs about **$0.045**; the empty-input run
(about 24 cars) about **$0.10**; 200 cars about **$0.805**. Only delivered cars
are charged.

### Scheduling

Save a search as a task and schedule it daily or weekly. Compare runs on
`listing_key` to see new, sold or repriced cars.

### FAQ

**How many cars can I get per run?** Up to 200, from up to 10 pages per search.
For more, split by make, model or state across several runs.

**How fresh is the data?** Each run reads the listings online at that moment.

**Why did I get fewer cars than `maxResults`?** The search may have fewer
listings, the page limit may be reached first, or a short run timeout may stop
the run early. Cars collected before the stop are kept and delivered.

**What if a search fails?** The other searches continue. If no search can be
read at all, the run fails with a status message explaining why, rather than
ending green with zero rows.

**Does it cover motorcycles?** No. It searches the car listings on Webmotors;
motorcycles are out of scope.

### Limits

Collects what Webmotors search results show; it does not open each listing for
seller contacts, options or full descriptions. Prices are asking prices, not
sale prices.

For help, use the Actor's Issues tab and include the run ID.

# Actor input Schema

## `makes` (type: `array`):

Car makes to search, e.g. \["Toyota", "Fiat"]. Empty = all makes nationwide.

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

Models paired with makes by index — at most one model per make, e.g. makes \["Toyota","Fiat"] + models \["Corolla"] scopes Toyota to the Corolla and leaves Fiat open.

## `states` (type: `array`):

Brazilian states to scope the search — full names or 2-letter UFs ("São Paulo", "MG"). Empty = nationwide.

## `maxPages` (type: `integer`):

Result pages fetched per search (~24 cars per page).

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

Stop after this many cars (across all searches combined).

## `requestDelaySecs` (type: `number`):

Minimum 0.5 seconds between fetches.

## `proxyUrl` (type: `string`):

Residential proxy URL (full URL with embedded credentials, or host:port with proxyUsername/proxyPassword). Empty = the Apify platform residential proxy. When neither is available the run fails with a clear error instead of returning empty results.

## `proxyUsername` (type: `string`):

Username for proxyUrl when the URL does not embed credentials.

## `proxyPassword` (type: `string`):

Password for proxyUrl when the URL does not embed credentials.

## `debugDump` (type: `boolean`):

Operator diagnostics: store each fetched HTML page in the run's key-value store (debug-page-\*.html).

## Actor input object example

```json
{
  "makes": [],
  "models": [],
  "states": [],
  "maxPages": 1,
  "maxResults": 50,
  "requestDelaySecs": 1,
  "proxyPassword": "",
  "debugDump": false
}
```

# 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 = {
    "makes": [],
    "models": [],
    "states": [],
    "proxyPassword": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("automatic/webmotors-br-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 = {
    "makes": [],
    "models": [],
    "states": [],
    "proxyPassword": "",
}

# Run the Actor and wait for it to finish
run = client.actor("automatic/webmotors-br-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 '{
  "makes": [],
  "models": [],
  "states": [],
  "proxyPassword": ""
}' |
apify call automatic/webmotors-br-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automatic/webmotors-br-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/evswMRSqCZyPFHQ3E/builds/fE7Ed9o8f1lNvzMB6/openapi.json
