Tony Wang6 Min. LesezeitGebrauchtwagen-Anzeigen scrapen in 2026 (API & Python)
Gebrauchtwagen-Anzeigen 2026 bei CarMax, Autotrader und Cars.com scrapen — Preis-, Laufleistungs- und Dealer-Daten — per DIY, No-Code oder API.
Am schnellsten scrapst du Gebrauchtwagen-Anzeigen 2026, indem du eine strukturierte API aufrufst, die normalisiertes JSON von den großen Seiten liefert — statt für jede einzelne ihrer JavaScript-lastigen Inventarseiten einen eigenen Parser zu bauen und zu pflegen. CarMax, Autotrader und Cars.com sind die drei größten Gebrauchtwagen-Marktplätze in den USA, keiner hat eine offene Self-Service-API, und jeder verteidigt seine Seiten mit echter Anti-Bot-Infrastruktur. Dieser Guide zeigt dir alle drei Ansätze für alle drei Seiten: was jeder liefert, wo DIY scheitert und die rechtlichen Grundlagen.
Warum gebrauchte Autoanzeigen scrapen?
Fahrzeug-Anzeigendaten von CarMax, Autotrader und Cars.com treiben an:
- Pricing-Intelligence — nachverfolgen, wie sich der Angebotspreis eines Modells mit Laufleistung, Ausstattung und Markt bewegt, und unterpreiste Angebote erkennen.
- Inventar- & Marktforschung — messen, wie viele Fahrzeuge einer Marke/eines Modells auf dem Markt sind und wo.
- Deal-Finding-Tools — ein „gute Deals markieren"-Feature bauen, mit denselben Pricing-Signalen, die die Seiten selbst berechnen.
- Dealer-Analytics — den Inventar-Umschlag, die Pricing-Strategie und das Rating eines Autohauses über die Zeit verfolgen.
- Wertverlust- & Nachfrage-Modellierung — Anzeigendaten über Seiten hinweg kombinieren, um zu modellieren, wie sich der Fahrzeugwert mit Alter und Laufleistung entwickelt.
Ist es legal, gebrauchte Autoanzeigen zu scrapen?
Option 1: DIY in Python (und warum das scheitert)
Alle drei Seiten rendern ihre Anzeigen aus clientseitigem JSON statt aus reinem HTML, deshalb muss ein DIY-Scraper die zugrunde liegende API erreichen, die jede Seite aufruft:
import requests
# Cars.com renders from a public GraphQL endpoint
resp = requests.post(
"https://graph.cars.com/graphql/api",
json={"query": "...", "variables": {"stockType": "used", "zip": "78701"}},
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
Es funktioniert in der Demo und geht dann kaputt:
- Die AGB sind eindeutig. Autotraders Bedingungen nennen „robots, screen scrapers, or spiders" direkt beim Namen — das ist kein Grenzfall.
- Echtes Anti-Bot am Edge. Eine einfache, unauthentifizierte Anfrage an CarMax wird blockiert, bevor sie überhaupt die Seite erreicht (der Edge lieferte bei der Recherche zu diesem Guide auf einen ganz normalen
robots.txt-Abruf ein Akamai-artiges „Access Denied"), und Cars.com stellt bei derselben Anfrage eine Cloudflare-Challenge davor. Naiverequests-Calls werden schnell geblockt; ein browserbasierter Scraper braucht laufende Pflege, sobald sich diese Abwehrmechanismen ändern. - Drei verschiedene Backends, drei verschiedene Formen. CarMax betreibt seine Mobile-API auf Azure Front Door mit
stock_numberals Primärschlüssel; Autotrader verschachteltmake/model/trimals Objekte mit separatencode/name-Feldern und liefert Neu- und Gebrauchtinventar aus einem Endpoint; Cars.com betreibt eine öffentliche GraphQL-API mit einer UUIDlisting_idals Schlüssel. Es gibt kein gemeinsames Schema — du schreibst und pflegst drei Parser, nicht einen. - Keine offizielle Drittanbieter-API. Echte Inventar-Feeds laufen über Dealer/DMS-Integrationen (vAuto, HomeNet) via FTP/CSV oder Partner-APIs — vorbehalten lizenzierten Autohäusern, nicht verfügbar für einen Drittanbieter-Entwickler, der ein Price-Intelligence-Produkt baut.
Option 2: No-Code-Tools
Für jede Seite gibt es einzeln Marketplace-Scraper-Actors, die sich für einmalige Abzüge eignen, aber für eine Cross-Site-Sicht landest du wieder bei drei getrennten Tools mit drei getrennten Schemas, und sie erben dieselbe Anti-Bot-Fragilität wie DIY.
Option 3: Eine strukturierte Gebrauchtwagen-API
Für einen wiederholbaren Cross-Site-Workflow liefern die CarMax-, Autotrader- und Cars.com-Scraping-APIs jeweils normalisiertes JSON, ohne dass du Seiten parsen oder Edge-Abwehr pflegen musst. Suche CarMax nach Marke und Preisspanne:
curl "https://api.crawlora.net/api/v1/carmax/search?make=Toyota&max_price=25000&zip=78701" \
-H "x-api-key: $CRAWLORA_API_KEY"
Hol dir in Python das Detail für alle drei — jede Suche liefert die id, die du für ihren eigenen Detail-Call brauchst:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1"
carmax_hits = requests.get(f"{base}/carmax/search", headers=h, params={"make": "Toyota", "max_price": 25000}).json()["data"]["vehicles"]
carmax_detail = requests.get(f"{base}/carmax/vehicle/{carmax_hits[0]['stock_number']}", headers=h).json()["data"]
autotrader_hits = requests.get(f"{base}/autotrader/search", headers=h, params={"make": "Toyota", "zip": "78701"}).json()["data"]["vehicles"]
autotrader_detail = requests.get(f"{base}/autotrader/vehicle/{autotrader_hits[0]['id']}", headers=h).json()["data"]
carsdotcom_hits = requests.get(f"{base}/carsdotcom/search", headers=h, params={"zip": "78701", "stock_type": "used"}).json()["data"]["vehicles"]
carsdotcom_detail = requests.get(f"{base}/carsdotcom/vehicle/{carsdotcom_hits[0]['listing_id']}", headers=h).json()["data"]
Eine CarMax-Search-Response ist normalisiertes JSON (echte Felder — sieh dir die docs an):
{
"code": 200,
"msg": "OK",
"data": {
"total_count": 91136,
"vehicles": [
{
"stock_number": 28187774,
"vin": "1FMJK1K89REA27006",
"year": 2024,
"make": "Ford",
"model": "Expedition Max",
"mileage": 41406,
"price_info": { "price": 45998, "is_price_reduced": true, "previous_price": 46998 },
"store": { "id": 7124, "name": "Canoga Park" },
"prior_uses": ["Leased Vehicle", "Rental"],
"url": "https://www.carmax.com/car/28187774"
}
]
}
}
CarMax' Vehicle-Detail ergänzt history (Unfall- und Besitzeranzahl) und warranties; Autotraders Detail trägt vehicle_history_flags (z. B. NO_SALVAGE_TITLE, NO_ACCIDENTS_REPORTED) sowie msrp/sale_price für Neuwagen-Inventar; Cars.coms Detail ist von den dreien am pricing-fokussiertesten — es liefert ein berechnetes deal_rating:
{
"deal_rating": {
"rating": "fair",
"good_price_min": 17591,
"good_price_max": 19566,
"predicted_price": 17950,
"predicted_price_difference": -4042
}
}
Speichere eine Zeile pro Anzeige und Seite, mit VIN als Schlüssel, wo vorhanden (das einzige Feld, das über alle drei direkt vergleichbar ist), und führe das Ganze nach Zeitplan erneut aus, um Preisänderungen und neues Inventar zu verfolgen.
Was du sammeln kannst
Öffentliche Anzeigendaten pro Seite: Suchergebnisse (Baujahr, Marke, Modell, Ausstattung, Laufleistung, Preis, Außen-/Innenfarbe, Getriebe, Kraftstoffart, Dealer/Store); vollständiges Vehicle-Detail (Specs, Features, Garantien, wo CarMax sie listet, deal_rating bei Cars.com, vehicle_history_flags bei Autotrader); CarMax-Store-Standorte und „Shop by brand"-Taxonomie; sowie Autotrader-Dealer-Profile (Name, Rating, Adresse, aktuelle Inventar-Anzahl). Nur öffentliche Anzeigen-Fakten — kein vollständiger Vehicle-History-Report.
Grenzen und typische Herausforderungen
- Kein gemeinsames Schema über die Seiten hinweg. Normalisiere beim Einlesen — matche über VIN, wo verfügbar, da stock numbers und listing ids seitenspezifisch sind.
- Echtes Anti-Bot bei allen drei. Rechne bei naiven Requests mit Challenges auf Edge-Ebene (Akamai-Klasse bei CarMax, Cloudflare bei Cars.com).
- Bei Autotrader sind Neu- und Gebrauchtwagen gemischt. Filtere über
listing_type/condition, wenn du nur Gebrauchtinventar willst. - Preise und Inventar drehen sich schnell. Ein Autohaus verkauft oder repreist ein Auto in Tagen, nicht Monaten — hol die Daten nach Zeitplan erneut, statt einem Snapshot zu vertrauen.
- Nur öffentliche Daten. Das sind Daten von der Anzeigenseite, kein kostenpflichtiger Vehicle-History-Report, und kein Weg, um an persönliche Kontaktdaten von Dealer oder Käufer zu kommen.
Wo das eingesetzt wird
- Pricing-Intelligence — den Angebotspreis gegen Laufleistung und Ausstattung verfolgen und unterpreiste Anzeigen markieren, mit demselben
deal_rating-artigen Signal, das Cars.com liefert. - Marktforschung — Inventar-Tiefe und Umschlag nach Marke, Modell und Region messen.
- Dealer-Analytics — die Preisgestaltung und das Inventar eines bestimmten Autohauses über die Zeit beobachten.
Sources
Leg los mit dem Sammeln
Probier es zuerst kostenlos aus: jage eine beliebige öffentliche URL durch den Free Web Scraper oder prüfe mit dem Anti-Bot Checker, ob eine Seite Bots blockiert — ohne Anmeldung.
Teste die Search-Endpoints im Playground, sieh dir das Schema in den API docs an und wirf einen Blick aufs pricing. Für die andere Seite der Transaktion behandelt how to scrape job postings dasselbe Problem — „keine Self-Service-API, pro Anbieter integrieren" — für einen völlig anderen Markt. Für Real Estates Version desselben Portal-für-Portal-Musters siehe how to scrape real estate listings. Siehe auch how to choose a web scraping API und is web scraping legal.
Häufig gestellte Fragen
Haben CarMax, Autotrader und Cars.com offizielle APIs?
Keiner der drei hat eine offene Self-Service-API. Echte Inventar-Feeds laufen über Dealer/DMS-Partnerschaften (vAuto, HomeNet) via FTP/CSV oder Partner-APIs, vorbehalten lizenzierten Autohäusern — nicht verfügbar für einen Drittanbieter-Entwickler. Eine strukturierte API ist der praktikable Weg für Cross-Site-Preis- und Inventarforschung.
Ist es legal, Gebrauchtwagen-Anzeigen zu scrapen?
Anzeigen-Fakten (Baujahr, Marke, Modell, Preis, Laufleistung, VIN) sind nicht urheberrechtlich geschützt, aber die Bedingungen jeder Seite schränken automatisierten Zugriff ein — Autotraders Bedingungen nennen ausdrücklich robots, screen scrapers und spiders. Bleib bei öffentlichen Anzeigen-Fakten, halte dich an Rate-Limits und versuch nie, über eine Anzeigenseite einen vollständigen, kostenpflichtigen Vehicle-History-Report zu ziehen. Keine Rechtsberatung.
Wie vergleiche ich den Preis einer Anzeige über mehrere Seiten hinweg?
Matche über VIN — das ist das einzige Feld, das über CarMax, Autotrader und Cars.com hinweg direkt vergleichbar ist, da stock numbers und listing ids seitenspezifisch sind. Durchsuche jede Seite, löse die VIN aus den Ergebnissen auf und joine dann darüber.
Welche Seite sagt mir, ob eine Anzeige ein guter Deal ist?
Cars.com liefert im Vehicle-Detail ein berechnetes deal_rating (fair/good/great), mit einem predicted_price und einer good_price_min/max-Spanne, die du direkt nutzen kannst. CarMax und Autotrader berechnen das nicht, aber du kannst dasselbe Signal selbst aus Preis-vs-Laufleistung-vs-Ausstattung über ihre Anzeigen bauen.
Kann ich das komplette Inventar eines Dealers bekommen?
Bei zweien der drei, ja. Autotraders /autotrader/dealer/{id} liefert das Dealer-Profil plus eine erste Seite des aktuellen Inventars; CarMax' /carmax/stores und /carmax/store/{id} liefern physische Store-Standorte. Cars.coms Suche akzeptiert statt eines direkten Dealer-Lookups einen zip/radius-Filter.
Sind Vehicle-History-Reports wie Carfax enthalten?
Nein. Das liefert nur, was die Anzeigenseite jeder Seite selbst öffentlich zeigt — Unfall-/Besitzeranzahl und Prior-use-Flags, wo die Seite sie selbst ausweist (CarMax' history-Objekt, Autotraders vehicle_history_flags) — keinen vollständigen Carfax- oder AutoCheck-Report, die separat lizenzierte, kostenpflichtige Produkte sind.
Sind Neuwagen-Anzeigen enthalten?
Autotrader mischt Neu- und Gebrauchtinventar in einem Search-Endpoint — filtere über listing_type oder condition, wenn du nur Gebrauchtwagen willst. CarMax' und Cars.coms Gebrauchtinventar in den Endpoints dieses Guides ist by design nur gebraucht.