Webmotors Car Listings Scraper (Brazil) avatar

Webmotors Car Listings Scraper (Brazil)

Pricing

from $1.75 / 1,000 listing scrapeds

Go to Apify Store
Webmotors Car Listings Scraper (Brazil)

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

Superslow Sloth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

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

FieldNotes
searchUrlsOptional. 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, modelOptional. As written in Webmotors' URL: toyota, land-rover, mercedes-benz; corolla, corolla-cross, hilux-sw4. A model needs its make.
state, cityOptional. 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, maxPriceOptional, whole reais.
minYear, maxYearOptional, model year.
minKm, maxKmOptional, kilometres. maxKm of 0 returns new cars only.
sellerTypeany (default), dealership (Concessionária), store (Loja) or individual (Pessoa Física).
maxItemsCars to read per search (default 100, up to 10,000 - the most Webmotors serves for one search).
sortbest-match (Webmotors' relevance order, default), price-asc, price-desc, year-newest, km-low.
proxyConfigurationApify 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"
}
FieldNotes
search, positionThe 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, urlWebmotors' id, stable for the life of the ad, and the ad's page in the site's own link form.
title, make, model, versionAs Webmotors prints them, in capitals. model is the family (COROLLA CROSS), version the trim line.
conditionused or new (a 0 km car sold by a dealer).
year_manufacture, year_modelA 2025 car can carry model year 2026.
kmOdometer in kilometres. 0 on a new car.
price_brlAsking 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_percentThe 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, promotionWebmotors' "good deal" badge, and the name of the seller promotion attached to the ad.
transmission, body_type, color, doors, engine_litres, horsepower, traction, armoredSpecification as Webmotors prints it. Null when the ad did not carry it (power and engine size are often missing on older cars).
attributesThe ad's badges (Aceita troca, IPVA pago, Único dono). Empty when it lists none.
seller_type, seller_categorydealer or individual, and Webmotors' ad category: Concessionária, Loja or Pessoa Física.
seller_id, seller_name, neighborhoodThe 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_nameWhere the car is. state is the two-letter code.
photo_count, image_urlPhotos 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-asc or price-desc when 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-newest and all 0 km new cars for km-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.