# Brazil Car Scraper: Carros Usados e Novos, FIPE Gap and Alerts (`getascraper/webmotors-vehicles-scraper`) Actor

Scrape Webmotors carros usados e novos and motos across Brazil with 40+ filters: make, model, year, price, km, fuel, state, city, seller. Each row has FIPE percent, specs, photos and dealer data. Monitor NEW, PRICE_DROP and REMOVED listings on a schedule. No login. Pay per listing.

- **URL**: https://apify.com/getascraper/webmotors-vehicles-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.30 / 1,000 vehicle listings

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

## 🚗 Brazil Car Scraper: Carros Usados e Novos, FIPE Gap and Alerts

<table width="100%" style="margin-bottom:0">
<tr>
<td style="padding:24px 28px;background:#FDEEEE;border:1px solid #F6C9CB;border-top:4px solid #D81F26;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Every Webmotors car and motorcycle listing, priced against FIPE and watched for changes.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Filter by make, model, year, price, mileage, fuel, state, city and seller. Get 50+ fields per listing, and schedule a saved search to catch new listings, price drops and removed ads.</span>
</td>
</tr>
</table>
<table width="100%" style="margin-top:0">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F6C9CB;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#9E1218">🎯 40+ filters</span><br>
<span style="font-size:12px;color:#57534E">Make, model, years, price, km, fuel, gearbox, body, colour, equipment, state, city and seller.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F6C9CB;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#9E1218">💸 FIPE position built in</span><br>
<span style="font-size:12px;color:#57534E">Price as a percent of FIPE on every row, plus a below-FIPE filter and a maximum percent cap.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F6C9CB;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#9E1218">🏪 Seller controls</span><br>
<span style="font-size:12px;color:#57534E">Dealer or private, one dealer's full stock, and a cap per seller so one lot does not fill the list.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F6C9CB;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#9E1218">🔔 Change monitor</span><br>
<span style="font-size:12px;color:#57534E">NEW, PRICE_DROP, PRICE_RISE and REMOVED labels with price history between scheduled runs.</span>
</td>
</tr>
</table>

Procurando carros usados e novos no Brasil? This Actor collects car and motorcycle listings from Webmotors, one of Brazil's largest vehicle marketplaces, as clean rows for a spreadsheet, a database or an alert. Each row has the price, the FIPE position, mileage, specs, photos and the seller.

This Actor is not affiliated with or endorsed by Webmotors. It reads only listings that anyone can open without an account.

### 🔍 What does this Actor do?

Webmotors shows hundreds of thousands of listings but only lets you scroll them. This Actor turns a search into data.

- Applies the filters of the site (make, model, year, price, mileage, gearbox, fuel, body, colour, doors, drivetrain, equipment, state, city, seller type) and adds more: a maximum percent of FIPE, keyword include and exclude lists, a cap per seller and motorcycle engine size.
- Returns the price as a percent of the FIPE table value that Webmotors shows, the gap to FIPE and a below-FIPE flag, so you can sort by the best deals.
- Covers cars and motorcycles, new and used, from one state or all of Brazil. Searches of more than 10,000 matches are split into price bands automatically.
- Reads dealer stock by seller ID, merges several states or cities into one list and removes duplicate listings.
- Tracks a saved search between runs and labels each listing NEW, PRICE_DROP, PRICE_RISE, UPDATED, UNCHANGED or REMOVED, with price history and the lowest and highest price your runs saw.

### 🎯 What can I use it for?

- **Dealers and resellers:** spot cars listed below FIPE before competitors do and watch rival stock and prices.
- **Price analysts and appraisers:** build a market price history for a make, model and year range.
- **Car buyers and brokers:** get an alert when a specific car appears or drops in price.
- **Fleet and rental managers:** compare fleet-ready used cars by price, mileage and seller across states.
- **Marketplaces and data teams:** feed a clean, de-duplicated listing table into a pipeline each day.

### 🚀 How to use it

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#FDEEEE;border:1px solid #F6C9CB;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#D81F26;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Set your filters</span><br>
<span style="font-size:12px;color:#57534E">Pick make, model, years, price, states and seller type, or paste a search page you filtered on webmotors.com.br.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FDEEEE;border:1px solid #F6C9CB;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#D81F26;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Run it</span><br>
<span style="font-size:12px;color:#57534E">Start with the default of 20 listings, then raise the limit and sort by price or mileage.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FDEEEE;border:1px solid #F6C9CB;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#D81F26;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Export or monitor</span><br>
<span style="font-size:12px;color:#57534E">Download CSV, Excel or JSON, or add a monitor name and put the run on a schedule.</span>
</td>
</tr>
</table>

### 📥 Input

Every field is optional. With nothing set you get the 20 most relevant listings in Brazil.

| Field | Type | Required | Description |
|---|---|---|---|
| Webmotors search pages | array of URLs | No | Optional. Paste search pages copied from webmotors.com.br (for example a page you filtered by hand). Each page is read with its own filters. Leave empty to use the filters below. |
| Vehicle type | enum | No | Search cars or motorcycles. |
| Condition | enum | No | Used (seminovos), brand new (0 km) or both. |
| Makes | array of text | No | Brands to include, for example Toyota, Honda, Volkswagen. Several makes are searched together. Names are not case sensitive. |
| Models | array of text | No | Models to include, for example Corolla, Yaris. With exactly one make the site filters by model; with several makes the models are matched on the listing title. |
| Version (exact) | text | No | Exact version text as Webmotors shows it, for example "2.0 VVT-IE FLEX XEI DIRECT SHIFT". Needs exactly one make and one model. |
| Must mention (any) | array of text | No | Keep only listings whose title, description or highlights contain at least one of these words, for example "único dono" or "revisões". |
| Must not mention | array of text | No | Drop listings whose title, description or highlights contain any of these words, for example "sinistro" or "repasse". |
| States | array of enum | No | Search one or more Brazilian states. Each state is searched separately and results are merged. |
| Cities | array of text | No | Cities written as city, then the two-letter state, for example "Campinas, SP" or "Curitiba, PR". When set, cities replace the state list. |
| Minimum price (R$) | number | No | Lowest asking price in Brazilian reais. |
| Maximum price (R$) | number | No | Highest asking price in Brazilian reais. |
| Earliest model year | integer | No | Oldest model year to include, for example 2018. |
| Latest model year | integer | No | Newest model year to include, for example 2024. |
| Minimum mileage (km) | integer | No | Lowest odometer reading. |
| Maximum mileage (km) | integer | No | Highest odometer reading, for example 60000. |
| Only listings priced below FIPE | boolean | No | Keep only listings Webmotors flags as priced under the FIPE reference table ("Super Preço"). |
| Maximum price as % of FIPE | integer | No | Keep listings whose price is at most this percent of the FIPE value Webmotors shows, for example 92 for at least 8 percent under FIPE. Listings without a FIPE figure are dropped. |
| Transmission | array of enum | No | Gearbox types to include. |
| Fuel | array of enum | No | Fuels to include. When exactly one fuel is chosen every row also carries it as "fuelType". |
| Body type | array of enum | No | Body styles to include. |
| Colour | array of enum | No | Exterior colours to include. |
| Doors | array of enum | No | Number of doors to include. |
| Drivetrain | array of enum | No | Which wheels are driven. |
| Last plate digit | array of enum | No | Groups of license plate endings (useful for circulation restriction rules). |
| Minimum horsepower | integer | No | Lowest engine power in cv. |
| Maximum horsepower | integer | No | Highest engine power in cv. |
| Minimum engine size (liters) | number | No | Smallest engine displacement in liters for cars, for example 1.0. |
| Maximum engine size (liters) | number | No | Largest engine displacement in liters for cars, for example 2.0. |
| Minimum engine size (cc) | integer | No | Smallest engine displacement in cubic centimeters (motorcycles). |
| Maximum engine size (cc) | integer | No | Largest engine displacement in cubic centimeters (motorcycles). |
| Armored | enum | No | Include armored vehicles or not. |
| Auction history | enum | No | Filter by whether the vehicle passed through an auction. |
| Equipment (all required) | array of enum | No | Equipment the vehicle must have. When you pick several, every one must be present. |
| Highlights (any) | array of enum | No | Seller-declared highlights. Listings matching at least one are kept. |
| Use case | array of enum | No | Webmotors use-case collections such as family cars or first car. |
| Seller type | array of enum | No | Who is selling: franchised dealer, independent store or private person. |
| Seller IDs | array of text | No | Webmotors seller IDs (the "sellerId" field of earlier results) to read one dealer's full stock. Each ID is searched separately. |
| Max listings per seller | integer | No | Keep at most this many listings from each seller, so one big dealer does not fill the whole result. |
| Offers and services | array of enum | No | Keep listings where the seller offers these. When you pick several, all are required. |
| Only listings with photos | boolean | No | Skip listings that have no photos. |
| Sort by | enum | No | Order of results. Relevance is the order Webmotors shows by default. |
| Max listings | integer | No | Maximum number of listings to save. Searches with more than 10,000 matches are split into price bands automatically when this is above 9,900. Free plan runs are capped at 25. |
| Include all photo URLs | boolean | No | Add the full list of photo links to every row. The main photo link is always included. |
| Monitor name | text | No | Give a name to turn the run into a monitor. Each run compares with the previous run of the same name and labels listings NEW, PRICE_DROP, PRICE_RISE, UPDATED, UNCHANGED or REMOVED, with price history. Use the same filters and a high "Max listings" on a schedule. |
| Only save changes | boolean | No | With a monitor name set, save only new, changed and removed listings and skip unchanged ones. |
| Proxy | object | No | Optional. By default the actor connects directly and switches to Brazilian residential proxy by itself if Webmotors refuses the connection. Set your own proxy only if you need to. |

### 📊 Data table

Fields a listing does not show are left out of the row. Nothing is filled with placeholders. Seller phone numbers are not part of the data, and private sellers appear only with city and state.

| Field | Type | Description |
|---|---|---|
| `id` | number | Webmotors listing ID. Stable across runs, so it works as a database key. |
| `url` | text | Link to the listing page on webmotors.com.br. |
| `title` | text | Listing title as shown on the site. |
| `vehicleType` | text | `cars` or `motorcycles`. |
| `condition` | text | `used` or `new`, as listed. |
| `make` | text | Brand, for example `TOYOTA`. |
| `model` | text | Model, for example `COROLLA`. |
| `version` | text | Version or trim text. |
| `yearManufactured` | number | Year of manufacture. |
| `yearModel` | number | Model year. |
| `mileageKm` | number | Odometer reading in km. |
| `price` | number | Asking price in Brazilian reais. |
| `currency` | text | Always `BRL`. |
| `fipePercent` | number | Asking price as a percent of the FIPE table value, as shown by Webmotors. Left out when the listing has none. |
| `fipeDeltaPercent` | number | `fipePercent` minus 100. Negative means below FIPE. |
| `belowFipe` | boolean | True when the asking price is under the FIPE value. |
| `goodDeal` | boolean | True when Webmotors flags the listing as a good deal. |
| `financingInstallment` | number | Monthly installment of the financing quote shown on the listing, in BRL. |
| `financingInstallmentCount` | number | Number of installments in that quote. |
| `financingInterestRate` | number | Interest rate of that quote as published. |
| `fuelType` | text | Fuel. Present when exactly one fuel is selected in the input. |
| `transmission` | text | Gearbox type. |
| `bodyType` | text | Body style. |
| `doors` | number | Number of doors. |
| `color` | text | Main colour. |
| `secondaryColor` | text | Secondary colour (motorcycles). |
| `engineLiters` | number | Engine size in liters (cars). |
| `engineCc` | number | Engine size in cc (motorcycles). |
| `horsepower` | number | Engine power in cv. |
| `drivetrain` | text | Which wheels are driven. |
| `trunkLiters` | number | Trunk capacity in liters. |
| `fuelTankLiters` | number | Fuel tank size in liters. |
| `wheelSize` | number | Wheel size in inches. |
| `armored` | boolean | Whether the vehicle is armored. |
| `auctionHistory` | boolean | Whether the vehicle has passed through an auction. |
| `motorcycleEngine` | text | Motorcycle engine type (strokes). |
| `motorcycleBrakes` | text | Motorcycle brake setup. |
| `motorcycleFeed` | text | Motorcycle fuel feed. |
| `motorcycleCooling` | text | Motorcycle cooling. |
| `motorcycleGearbox` | text | Motorcycle gearbox. |
| `motorcycleStarter` | text | Motorcycle starter. |
| `highlights` | array | Highlights the seller ticked, for example `Aceita troca` or `IPVA pago`. |
| `acceptsTrade` | boolean | True when the listing says it accepts a trade-in. |
| `ipvaPaid` | boolean | True when the listing says IPVA is paid. |
| `singleOwner` | boolean | True when the listing says single owner. |
| `factoryWarranty` | boolean | True when the listing says factory warranty. |
| `description` | text | Seller description text. |
| `campaigns` | array | Official store or fair campaign names attached to the listing. |
| `inspectionEligible` | boolean | True when an inspection is offered. |
| `view360Eligible` | boolean | True when a 360 view is offered. |
| `photoCount` | number | Number of photos. |
| `mainPhotoUrl` | text | Link to the main photo. |
| `photoUrls` | array | Links to all photos. Only with "Include all photo URLs". |
| `sellerId` | number | Webmotors seller ID. Use it in "Seller IDs" to read one dealer's stock. |
| `sellerKind` | text | `dealer` or `private`. |
| `sellerAdType` | text | Franchised dealership, independent store or private seller. |
| `sellerName` | text | Trade name of the dealer. Never filled for private sellers. |
| `sellerCity` | text | Seller city. |
| `sellerState` | text | Two-letter state code. |
| `sellerStateName` | text | State name. |
| `sellerAddress` | text | Street address of the dealer. Never filled for private sellers. |
| `sellerNeighborhood` | text | Dealer neighborhood. |
| `sellerZipCode` | text | Dealer ZIP code. |
| `sellerScore` | number | Dealer score when the site shows one. |
| `carDelivery` | boolean | True when the seller offers car delivery. |
| `tradeWithCash` | boolean | True when the seller offers trade-in with cash back. |
| `whatsappAvailable` | boolean | True when the seller takes contact on WhatsApp. |
| `answersQuickly` | boolean | True when Webmotors marks the seller as replying within 24 hours. |
| `searchLabel` | text | Which of your searches (state, city, seller or pasted page) returned the row. |
| `scrapedAt` | text | Time the row was collected (ISO 8601). |
| `changeType` | text | Monitor only: `NEW`, `PRICE_DROP`, `PRICE_RISE`, `UPDATED`, `UNCHANGED` or `REMOVED`. |
| `changedFields` | array | Monitor only: which tracked fields changed. |
| `firstSeenAt` | text | Monitor only: when your monitor first saw the listing. |
| `daysTracked` | number | Monitor only: days since your monitor first saw the listing. |
| `previousPrice` | number | Monitor only: price in the previous run when it changed. |
| `priceChange` | number | Monitor only: price change in BRL. |
| `priceChangePercent` | number | Monitor only: price change in percent. |
| `lastPriceChangeAt` | text | Monitor only: when the price last moved. |
| `lowestSeenPrice` | number | Monitor only: lowest price your monitor has seen. |
| `highestSeenPrice` | number | Monitor only: highest price your monitor has seen. |
| `priceHistory` | array | Monitor only: up to 12 dated price points. |

Example row:

```json
{
  "id": 80846626,
  "url": "https://www.webmotors.com.br/comprar/land-rover/range-rover-evoque/20-p250-flex-r-dynamic-hse-awd-automatico/4-portas/2023-2024/80846626",
  "title": "LAND ROVER RANGE ROVER EVOQUE 2.0 P250 FLEX R-DYNAMIC HSE AWD AUTOMÁTICO",
  "vehicleType": "cars",
  "condition": "used",
  "make": "LAND ROVER",
  "model": "RANGE ROVER EVOQUE",
  "version": "2.0 P250 FLEX R-DYNAMIC HSE AWD AUTOMÁTICO",
  "yearManufactured": 2023,
  "yearModel": 2024,
  "mileageKm": 18443,
  "price": 298500,
  "currency": "BRL",
  "fipePercent": 96,
  "fipeDeltaPercent": -4,
  "belowFipe": true,
  "goodDeal": true,
  "financingInstallment": 5866.41,
  "financingInstallmentCount": 60,
  "financingInterestRate": 0.019,
  "transmission": "Automática",
  "bodyType": "Utilitário esportivo",
  "doors": 4,
  "color": "Prata",
  "engineLiters": 2,
  "horsepower": 249,
  "drivetrain": "Integral permanente",
  "trunkLiters": 472,
  "fuelTankLiters": 67,
  "wheelSize": 20,
  "armored": false,
  "auctionHistory": false,
  "highlights": [
    "Aceita troca",
    "Todas as revisões feitas pela concessionária"
  ],
  "acceptsTrade": true,
  "description": "PERICIA CAUTELAR APROVADA.",
  "campaigns": [
    "Loja Oficial Grupo Automob"
  ],
  "inspectionEligible": true,
  "view360Eligible": true,
  "photoCount": 18,
  "mainPhotoUrl": "https://image.webmotors.com.br/_fotos/anunciousados/gigante/2026/202610/20261006/land-rover-range-rover-evoque-2.0-p250-flex-rdynamic-hse-awd-automatico-wmimagem10565832010.jpg",
  "sellerId": 3829387,
  "sellerKind": "dealer",
  "sellerAdType": "Concessionária",
  "sellerName": "Euro Import Jaguar Land Rover Curitiba",
  "sellerCity": "Curitiba",
  "sellerState": "PR",
  "sellerStateName": "Paraná",
  "sellerAddress": "Rua Tobias de Macedo Junior, 217",
  "sellerNeighborhood": "Santo Inacio",
  "sellerZipCode": "82010340",
  "scrapedAt": "2026-10-15T16:31:51.072Z"
}
```

### 💰 Pricing

You pay per listing saved. A run that finds no listings costs nothing, and there are no subscriptions. The default run of 20 listings is a small, quick test. Free plan runs are limited to 25 listings per run, 3 runs per day, and a short wait between runs.

### ⭐ Enjoying Brazil Car Scraper: Carros Usados e Novos, FIPE Gap and Alerts?

<table width="100%" style="display:table;width:100%">
<tr>
<td style="padding:20px 24px 14px;background:#FDEEEE;border:1px solid #F6C9CB;border-left:5px solid #D81F26;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">Hunting for below-FIPE cars by hand is worth a quick rating.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other dealers, appraisers and car brokers find this Actor. Your feedback also tells us which filters to add next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#D81F26;border:1px solid #F6C9CB;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/webmotors-vehicles-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ❓ FAQ

#### Como encontrar carros abaixo da tabela FIPE na Webmotors?

Switch on "Only listings priced below FIPE", or set "Maximum price as % of FIPE" to 92 for at least 8 percent under the table. Sort by lowest price and read `fipePercent` and `fipeDeltaPercent` in each row. Combine it with make, year and state filters to keep the list focused.

#### Como monitorar preços de carros usados na Webmotors?

Type a monitor name, for example `corolla-sp`, set your filters, raise "Max listings" so the whole search is read, and put the run on an Apify schedule. The first run saves every match as a baseline. Later runs label listings PRICE_DROP, PRICE_RISE, NEW or REMOVED. Switch on "Only save changes" for a short alert list.

#### Does it need a Webmotors account?

No. The Actor reads the public search results. It never asks for a login, password, cookie or API key, and it never contacts a seller.

#### Does it return seller phone numbers?

No. Phone numbers are not part of the public listing data, so they are not collected. You get the dealer name, address and ZIP code of businesses, the seller type, the WhatsApp and delivery flags, and city and state for private sellers.

#### How many listings can I collect in one run?

Up to 50,000. Webmotors serves about 10,000 results per search, so the Actor splits larger searches into price bands automatically when "Max listings" is above 9,900. Free plan runs are capped at 25.

#### Is the FIPE price itself included?

The site shows each listing's price as a percent of the FIPE table value, not the FIPE amount. The Actor returns that percent, the gap to 100 and a below-FIPE flag, and leaves the field out when the listing has no figure.

#### When is a listing marked REMOVED?

Only after the whole search was read in two runs in a row without the listing. Runs cut short by the listing limit, a per-seller cap or an error never report removals.

#### Can I send alerts to Slack, email or a spreadsheet?

Yes. Apify integrations and webhooks can forward each finished run to Slack, email, Google Sheets, Zapier, Make or your own endpoint, so a scheduled monitor becomes an alert without any code.

### 🔗 Other actors

- [Standvirtual Scraper: Used Cars Portugal, Prices & Mileage Data](https://apify.com/getascraper/standvirtual-cars-scraper) ↗ - Used car listings in Portugal, in Portuguese.
- [Leilão de Imóveis Brasil Scraper: Preços e Descontos por Banco](https://apify.com/getascraper/leilaoimovel-scraper) ↗ - Brazilian auction properties with bank discounts.
- [Auto.ru Scraper: Парсер Авто.ру with Price & Delisting Alerts](https://apify.com/getascraper/autoru-scraper) ↗ - Russian used cars with price-drop and delisting alerts.
- [Kleinanzeigen Cars Scraper: German Used Cars with Dealer Data](https://apify.com/getascraper/kleinanzeigen-cars-scraper) ↗ - German used cars with dealer details.
- [Carsales.com.au Cars Scraper: find used cars by price and year](https://apify.com/getascraper/carsales-au-cars-scraper) ↗ - Australian used car listings.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/webmotors-vehicles-scraper/changelog.md

# Actor input Schema

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

Optional. Paste search pages copied from webmotors.com.br (for example a page you filtered by hand). Each page is read with its own filters. Leave empty to use the filters below.

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

Search cars or motorcycles.

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

Used (seminovos), brand new (0 km) or both.

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

Brands to include, for example Toyota, Honda, Volkswagen. Several makes are searched together. Names are not case sensitive.

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

Models to include, for example Corolla, Yaris. With exactly one make the site filters by model; with several makes the models are matched on the listing title.

## `version` (type: `string`):

Exact version text as Webmotors shows it, for example "2.0 VVT-IE FLEX XEI DIRECT SHIFT". Needs exactly one make and one model.

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

Keep only listings whose title, description or highlights contain at least one of these words, for example "único dono" or "revisões".

## `excludeKeywords` (type: `array`):

Drop listings whose title, description or highlights contain any of these words, for example "sinistro" or "repasse".

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

Search one or more Brazilian states. Each state is searched separately and results are merged.

## `cities` (type: `array`):

Cities written as city, then the two-letter state, for example "Campinas, SP" or "Curitiba, PR". When set, cities replace the state list.

## `minPrice` (type: `number`):

Lowest asking price in Brazilian reais.

## `maxPrice` (type: `number`):

Highest asking price in Brazilian reais.

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

Oldest model year to include, for example 2018.

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

Newest model year to include, for example 2024.

## `minMileage` (type: `integer`):

Lowest odometer reading.

## `maxMileage` (type: `integer`):

Highest odometer reading, for example 60000.

## `belowFipeOnly` (type: `boolean`):

Keep only listings Webmotors flags as priced under the FIPE reference table ("Super Preço").

## `maxFipePercent` (type: `integer`):

Keep listings whose price is at most this percent of the FIPE value Webmotors shows, for example 92 for at least 8 percent under FIPE. Listings without a FIPE figure are dropped.

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

Gearbox types to include.

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

Fuels to include. When exactly one fuel is chosen every row also carries it as "fuelType".

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

Body styles to include.

## `colors` (type: `array`):

Exterior colours to include.

## `doors` (type: `array`):

Number of doors to include.

## `drivetrains` (type: `array`):

Which wheels are driven.

## `plateEndings` (type: `array`):

Groups of license plate endings (useful for circulation restriction rules).

## `minHorsepower` (type: `integer`):

Lowest engine power in cv.

## `maxHorsepower` (type: `integer`):

Highest engine power in cv.

## `minEngineLiters` (type: `number`):

Smallest engine displacement in liters for cars, for example 1.0.

## `maxEngineLiters` (type: `number`):

Largest engine displacement in liters for cars, for example 2.0.

## `minEngineCc` (type: `integer`):

Smallest engine displacement in cubic centimeters (motorcycles).

## `maxEngineCc` (type: `integer`):

Largest engine displacement in cubic centimeters (motorcycles).

## `armored` (type: `string`):

Include armored vehicles or not.

## `auctionHistory` (type: `string`):

Filter by whether the vehicle passed through an auction.

## `equipment` (type: `array`):

Equipment the vehicle must have. When you pick several, every one must be present.

## `highlights` (type: `array`):

Seller-declared highlights. Listings matching at least one are kept.

## `lifestyles` (type: `array`):

Webmotors use-case collections such as family cars or first car.

## `sellerTypes` (type: `array`):

Who is selling: franchised dealer, independent store or private person.

## `sellerIds` (type: `array`):

Webmotors seller IDs (the "sellerId" field of earlier results) to read one dealer's full stock. Each ID is searched separately.

## `maxPerSeller` (type: `integer`):

Keep at most this many listings from each seller, so one big dealer does not fill the whole result.

## `opportunities` (type: `array`):

Keep listings where the seller offers these. When you pick several, all are required.

## `onlyWithPhotos` (type: `boolean`):

Skip listings that have no photos.

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

Order of results. Relevance is the order Webmotors shows by default.

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

Maximum number of listings to save. Searches with more than 10,000 matches are split into price bands automatically when this is above 9,900. Free plan runs are capped at 25.

## `includeAllPhotos` (type: `boolean`):

Add the full list of photo links to every row. The main photo link is always included.

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

Give a name to turn the run into a monitor. Each run compares with the previous run of the same name and labels listings NEW, PRICE_DROP, PRICE_RISE, UPDATED, UNCHANGED or REMOVED, with price history. Use the same filters and a high "Max listings" on a schedule.

## `onlyChanges` (type: `boolean`):

With a monitor name set, save only new, changed and removed listings and skip unchanged ones.

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

Optional. By default the actor connects directly and switches to Brazilian residential proxy by itself if Webmotors refuses the connection. Set your own proxy only if you need to.

## Actor input object example

```json
{
  "startUrls": [],
  "vehicleType": "cars",
  "condition": "any",
  "makes": [],
  "models": [],
  "keywords": [],
  "excludeKeywords": [],
  "states": [],
  "cities": [],
  "belowFipeOnly": false,
  "transmissions": [],
  "fuels": [],
  "bodyTypes": [],
  "colors": [],
  "doors": [],
  "drivetrains": [],
  "plateEndings": [],
  "armored": "any",
  "auctionHistory": "any",
  "equipment": [],
  "highlights": [],
  "lifestyles": [],
  "sellerTypes": [],
  "sellerIds": [],
  "opportunities": [],
  "onlyWithPhotos": false,
  "sortBy": "relevance",
  "maxItems": 20,
  "includeAllPhotos": false,
  "onlyChanges": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (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 = {
    "startUrls": [],
    "vehicleType": "cars",
    "condition": "any",
    "makes": [],
    "models": [],
    "keywords": [],
    "excludeKeywords": [],
    "states": [],
    "cities": [],
    "belowFipeOnly": false,
    "transmissions": [],
    "fuels": [],
    "bodyTypes": [],
    "colors": [],
    "doors": [],
    "drivetrains": [],
    "plateEndings": [],
    "armored": "any",
    "auctionHistory": "any",
    "equipment": [],
    "highlights": [],
    "lifestyles": [],
    "sellerTypes": [],
    "sellerIds": [],
    "opportunities": [],
    "onlyWithPhotos": false,
    "sortBy": "relevance",
    "maxItems": 20,
    "includeAllPhotos": false,
    "onlyChanges": false,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/webmotors-vehicles-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 = {
    "startUrls": [],
    "vehicleType": "cars",
    "condition": "any",
    "makes": [],
    "models": [],
    "keywords": [],
    "excludeKeywords": [],
    "states": [],
    "cities": [],
    "belowFipeOnly": False,
    "transmissions": [],
    "fuels": [],
    "bodyTypes": [],
    "colors": [],
    "doors": [],
    "drivetrains": [],
    "plateEndings": [],
    "armored": "any",
    "auctionHistory": "any",
    "equipment": [],
    "highlights": [],
    "lifestyles": [],
    "sellerTypes": [],
    "sellerIds": [],
    "opportunities": [],
    "onlyWithPhotos": False,
    "sortBy": "relevance",
    "maxItems": 20,
    "includeAllPhotos": False,
    "onlyChanges": False,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/webmotors-vehicles-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 '{
  "startUrls": [],
  "vehicleType": "cars",
  "condition": "any",
  "makes": [],
  "models": [],
  "keywords": [],
  "excludeKeywords": [],
  "states": [],
  "cities": [],
  "belowFipeOnly": false,
  "transmissions": [],
  "fuels": [],
  "bodyTypes": [],
  "colors": [],
  "doors": [],
  "drivetrains": [],
  "plateEndings": [],
  "armored": "any",
  "auctionHistory": "any",
  "equipment": [],
  "highlights": [],
  "lifestyles": [],
  "sellerTypes": [],
  "sellerIds": [],
  "opportunities": [],
  "onlyWithPhotos": false,
  "sortBy": "relevance",
  "maxItems": 20,
  "includeAllPhotos": false,
  "onlyChanges": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call getascraper/webmotors-vehicles-scraper --silent --output-dataset

```

## MCP server setup

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