Scrape mobile.de — Germany's largest car marketplace (1.4M+ listings). Every result carries full specs plus dealer phone and GPS location; filter by exact make/model or zip radius; track new, price-changed and delisted cars across runs. Export to JSON or CSV.
All notable changes to mobile.de Car Scraper are documented here.
0.2.19 — 2026-05-24
Changed: runs with no search source (no query, make, or startUrls) now exit gracefully with a clear status message instead of failing. The run completes as SUCCEEDED with 0 items and the status message guides the user to provide one of the required inputs.
Updated: input schema description now explicitly lists the three search sources and notes that at least one is required.
0.2.5 — 2026-04-25 (later)
Added: WhatsApp Cloud API notifications (whatsappAccessToken + whatsappPhoneNumberId + whatsappTo).
Added: Generic JSON webhook (webhookUrl + optional webhookHeaders) — universal hook for n8n / Make / Zapier / custom backends. Receives { metadata, items } per run.
Added: USD + GBP price conversion (priceConvertedUsd, priceConvertedGbp) via Frankfurter ECB rates — fetched once per run, fail-soft to null on error.
Refactor: incremental price + repost tracking moved to a mobile.de-local module (src/priceTracker.ts) with separate KV side-states (prices__<key>, repostState__<key>) so the shared incrementalState.ts stays canonical across the workspace.
Tests: 332 passing across 14 suites.
0.2.0 — 2026-04-25
Major release: doubles output coverage, fixes silent filter failures, adds full feature parity with our adzuna/wellfound baseline.
Filter correctness (P0):
Fixed: fuelType: ELECTRIC previously produced an unmatched URL parameter — now correctly maps to mobile.de's ELECTRICITY. Same fix for PLUG_IN_HYBRID → HYBRID_PLUGIN, HYDROGEN → HYDROGENIUM, SEMI_AUTOMATIC_GEAR → SEMIAUTOMATIC_GEAR, and 6 of 9 body-type values (KOMBI → EstateCar, KLEINWAGEN → SmallCar, COUPE → SportsCar, GELAENDEWAGEN → OffRoad, LIMOUSINE → Limousine, VAN → Van). Listings now actually match the requested filter.
Changed: sort order now uses mobile.de's canonical sb/od URL params (was sr numeric values that mobile.de ignored).
Added: descriptionMaxLength input — truncate descriptions for AI-pipeline use.
Fixed: make/model parsing now uses JSON-LD BreadcrumbList from detail pages (was naive title-split that broke on "Land Rover", "Alfa Romeo", "Mercedes-Benz"). SERP fallback handles these multi-word makes locally.
Added: contentHash output field (SHA-256 hash of content-identifying fields).
Output normalization (P2):
Added: fuelType, transmission, bodyType, condition, color, priceRating now emit canonical English enums (e.g. ELECTRIC, AUTOMATIC, SEDAN, NEW, WHITE, GOOD).
Added: *Raw siblings preserve the original German values (fuelTypeRaw: "Elektro").
Added: firstRegistrationDate field (ISO YYYY-MM-01) alongside the legacy firstRegistration (MM/YYYY).
Added: yearOfManufacture derived from registration.
Added: accidentFree boolean derived from condition raw text.
Multi-select filters (P2):
Changed: fuelType, transmission, bodyType, condition now accept arrays for multi-select. Single-string values still work.
Added: emitUnchanged and emitExpired inputs (the README example finally works).
Added: priceChange (UP / DOWN) and priceChangeAmount fields on incremental runs — the same price-direction signal azzouzana charges $0.25/run for, included in our base $0.001/result.
Post-fetch filters (P2):
Added: includeKeywords / excludeKeywords keyword DSL with field scoping (title / subtitle / description / features).
Note: prior CHANGELOG claimed descriptionHtml, descriptionMarkdown, contentHash were added — they were declared in the type but never populated. Properly delivered in 0.2.0 (above).
[0.1.0] - 2026-03-21
Initial release.
29 SERP-only output fields
Keyword + make/model + start-URL inputs
Price, mileage, year, power, location-radius range filters
Condition, fuel type, transmission, body type, seller type single-select enums