Webmotors Car Listings Scraper (Brazil)
Pricing
from $1.75 / 1,000 listing scrapeds
Webmotors Car Listings Scraper (Brazil)
Scrape Webmotors, Brazil's largest car marketplace: used and new cars by make, model, state or city with price in BRL, FIPE percent, year, kilometres, transmission, dealer or individual seller and location. Sort by price, year or mileage for inventory and price feeds.
Pricing
from $1.75 / 1,000 listing scrapeds
Rating
0.0
(0)
Developer
Superslow Sloth
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Scrape the cars listed on Webmotors, Brazil's largest car marketplace, new and used, by make, model, state or city, and get one flat row per car: the asking price in BRL, the price as a percentage of the FIPE reference table, model year, kilometres, transmission, body type, colour, whether the seller is a dealer or a private person, the dealership's name, the city and state, the link and the photo.
Built for a Brazilian used-car inventory and price feed: run it on a schedule for
the makes, models or states you track, keep the listing_ids you have seen, and diff the
dataset against last time. A listing_id that is new is a new listing; the same
listing_id with a lower price_brl is a price drop.
No account, no API key, no login, no browser.
Input
| Field | Notes |
|---|---|
searchUrls | Optional. Webmotors search pages, one per line, copied from the browser: https://www.webmotors.com.br/carros/estoque/toyota/corolla, /carros/sp-campinas, /carros/sp-sao-paulo/toyota. A query string's filters (price, year, kilometres) are kept. Use this or make/model/state/city. |
make, model | Optional. As written in Webmotors' URL: toyota, land-rover, mercedes-benz; corolla, corolla-cross, hilux-sw4. A model needs its make. |
state, city | Optional. A two-letter state code (SP) and a city inside it (campinas, sao-paulo, rio-de-janeiro; accents optional). A city needs its state. With none of the four filled, the whole of Webmotors is read. |
minPrice, maxPrice | Optional, whole reais. |
minYear, maxYear | Optional, model year. |
minKm, maxKm | Optional, kilometres. maxKm of 0 returns new cars only. |
sellerType | any (default), dealership (Concessionária), store (Loja) or individual (Pessoa Física). |
maxItems | Cars to read per search (default 100, up to 10,000 - the most Webmotors serves for one search). |
sort | best-match (Webmotors' relevance order, default), price-asc, price-desc, year-newest, km-low. |
proxyConfiguration | Apify datacenter proxy by default. Residential was less reliable: see "How it fetches". |
An unknown make, model, state or city fails the run at no charge instead of returning something else. Webmotors itself answers those with a 200 for a broader search (an unknown make is the whole market, an unknown city the whole state); the actor compares the page Webmotors says it served with the one you asked for and refuses to bill rows that are not the search you asked for.
Output
Prices are Brazilian reais as numbers. Example row (2026-10-20):
{"search": "/carros/estoque","position": 1,"listing_id": 78029164,"url": "https://www.webmotors.com.br/comprar/ford/f-150/5-0-v8-gasolina-cd-lariat-black-fx4-automatico/4-portas/2025-2025/78029164","title": "FORD F-150 5.0 V8 GASOLINA CD LARIAT BLACK FX4 AUTOMÁTICO","condition": "used","make": "FORD","model": "F-150","version": "5.0 V8 GASOLINA CD LARIAT BLACK FX4 AUTOMÁTICO","year_manufacture": 2025,"year_model": 2025,"km": 3000,"price_brl": 519900.0,"fipe_percent": 106,"good_deal": false,"promotion": null,"transmission": "Automática","body_type": "Picape","color": "Preto","doors": 4,"engine_litres": 5.0,"horsepower": 405,"traction": "Integral permanente","armored": false,"attributes": ["Aceita troca", "Único dono", "IPVA pago", "Licenciado", "Garantia de fábrica"],"seller_type": "dealer","seller_category": "Concessionária","seller_id": 55693,"seller_name": "Sonnervig Vila Guilherme","city": "São Paulo","state": "SP","state_name": "São Paulo","neighborhood": "Vila Guilherme","photo_count": 20,"image_url": "https://image.webmotors.com.br/_fotos/anunciousados/gigante/2026/202608/20260818/ford-f150-5.0-v8-gasolina-cd-lariat-black-fx4-automatico-wmimagem17475804762.jpg"}
| Field | Notes |
|---|---|
search, position | The Webmotors path the row came from (/carros/estoque/toyota/corolla) and the car's place in that search's result list (1 is first). |
listing_id, url | Webmotors' id, stable for the life of the ad, and the ad's page in the site's own link form. |
title, make, model, version | As Webmotors prints them, in capitals. model is the family (COROLLA CROSS), version the trim line. |
condition | used or new (a 0 km car sold by a dealer). |
year_manufacture, year_model | A 2025 car can carry model year 2026. |
km | Odometer in kilometres. 0 on a new car. |
price_brl | Asking price. Null when Webmotors sends none or 0. Webmotors holds some mistyped prices (a 2025 car listed at R$1.7 billion was in the data on 2026-10-20), so cap the read with maxPrice or filter on your side. |
fipe_percent | The asking price as a percentage of the FIPE reference price (100 = at FIPE, below 100 = cheaper). Webmotors does not document the field; the meaning is read from its values (old, cheap cars read well under 100). Null when not sent. |
good_deal, promotion | Webmotors' "good deal" badge, and the name of the seller promotion attached to the ad. |
transmission, body_type, color, doors, engine_litres, horsepower, traction, armored | Specification as Webmotors prints it. Null when the ad did not carry it (power and engine size are often missing on older cars). |
attributes | The ad's badges (Aceita troca, IPVA pago, Único dono). Empty when it lists none. |
seller_type, seller_category | dealer or individual, and Webmotors' ad category: Concessionária, Loja or Pessoa Física. |
seller_id, seller_name, neighborhood | The dealer's Webmotors id, trade name and neighbourhood. Always null for an individual: a private seller's id and name identify a person and are not published. |
city, state, state_name | Where the car is. state is the two-letter code. |
photo_count, image_url | Photos on the ad and the first one. Null image_url when the ad has no photo. |
Honest nulls
A field Webmotors did not send, or sent as 0 where 0 means "unknown" (price, FIPE,
power), is null, never 0. A car with no price is still returned, because the listing
exists.
Pricing
Pay per event:
- $0.002 per run (
actor-start), charged only after your input is validated, so a run that fails on bad input costs nothing. - $0.0021 per car row written (
listing-scraped), i.e. $2.10 per 1,000 cars. A row that is not written is not charged; a car Webmotors repeats is written and charged once.
Coverage - read this before you diff runs
- One search returns at most 10,000 cars, whatever its size. Webmotors holds far more than that in total, so a nation-wide read stops at 10,000 and the run log says so. To read more, split by make, model, state, city, seller type or price band, one search URL each.
- Relevance order and kilometres order repeat a few cars across page borders because
many cars tie on the sort key (measured 2026-10-20: 71 distinct of 72 on relevance,
62 of 72 on kilometres over three pages). The repeats are returned and charged once.
The price sorts had no repeats in the same test, so use
price-ascorprice-descwhen you want a clean sweep of a narrow search. - Sorting a very broad search is of limited use. Webmotors serves only the first
10,000 results of a sort, and across the whole country those are all model year 2027
for
year-newestand all 0 km new cars forkm-low(sampled at pages 1, 150, 300 and 417 on 2026-10-20). Narrow the search by make, model or state first. - There is no "recently listed" sort. Find new listings by diffing
listing_ids between runs. - Not offered. Motorcycles and trucks (other pages of Webmotors), version-level pages, and the other filters on the site (colour, body type, fuel, options).
How it fetches
The actor calls the JSON endpoint Webmotors' own search page uses, with a Chrome TLS
fingerprint (curl_cffi), 24 cars per request. Measured 2026-10-20: HTTP 200 from Apify
datacenter exits (12 of 12), no key or cookie needed. Residential exits were less
reliable (3 of 4 answered; the refusals were a CloudFront 403 and an Akamai "Access
Denied"), which is why the default is the datacenter proxy. Webmotors sits
behind PerimeterX: a refused request is a 403 with a small JSON body, and a 200 that is
not the search JSON (a challenge page) is treated the same way. The actor treats both,
429 and 5xx as the address being blocked, rotates to a fresh one and retries.
Things worth knowing, all measured:
- The walk ends on the data. Webmotors reports no page count. A search with fewer than 10,000 results ends on a short page and then an empty one. A search with more ends at page 417 (results 9,985 to 10,000), after which every page, however high, answers the same 10 cars: the first ten of page 1. The actor stops at the first page that brings no car it has not already seen.
- Unknown slugs do not 404. See the note under Input.
- Filters are checked. The price, year and kilometre bounds are echoed back by Webmotors; if the echo does not match the request the run fails at no charge. A filter name Webmotors does not know is ignored by Webmotors itself without a word, so only the filters listed under Input are offered as inputs.