mobile.de Scraper - Cars, Prices, Dealers & Vehicle Data
Pricing
from $1.50 / 1,000 vehicle listings
mobile.de Scraper - Cars, Prices, Dealers & Vehicle Data
Scrape mobile.de vehicle listings with 30+ fields including price, mileage, registration, power, fuel, transmission, location and dealer details. Optional enrichment adds descriptions, equipment, images and dealer profiles.
Pricing
from $1.50 / 1,000 vehicle listings
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
18
Total users
4
Monthly active users
7 hours ago
Last modified
Categories
Share
mobile.de Scraper: Car Listings, Prices & Seller Data
mobile.de Scraper turns mobile.de, Germany's largest vehicle marketplace, into a clean, structured data feed. Search by make and model, location and radius, price, year, mileage, power, colour, seller type, price rating and more, or paste your own mobile.de search and listing links. Every record carries price, vehicle facts, mobile.de's price rating and seller contact details, and you can switch on full detail enrichment for the complete specification table, equipment list, description and image gallery, then export to JSON, CSV or Excel, or pull the results straight into your app through the API.
Why This Scraper?
- Two ways to find listings. Build a search from filters, or paste your own mobile.de search or vehicle links and let the actor walk the pages forward.
- The widest filter set. Make and model (a single model like
320or a whole series like3er), postal code or town with radius, vehicle class, condition, fuel, transmission, body type, colour, seller type (dealer or private), price rating, listing age, VAT-reclaimable, seats, doors, previous owners, drive type, emission class, minimum seller rating, a description keyword, and price, year, mileage and power ranges. - Filters you can trust. Every filter is sent the way mobile.de currently expects it and was checked against the site's own result count. A make, model or location the site does not recognise stops the run with a clear message, instead of silently searching everything.
- Rich records without extra cost. Every search result already includes colour, doors, seats, previous owners, HU/TÜV date, accident-free flag, highlights, VAT status, mobile.de's price rating, seller type, seller id and seller phone numbers.
- Optional full detail enrichment. Switch on Fetch full vehicle detail for engine size, cylinders, emission class, CO₂ and consumption, equipment list, description, full gallery, listing dates, make/model ids, and the seller's address, coordinates, WhatsApp, languages, opening hours and rating breakdown. You pay only for the listings it enriches.
- Only real results. When a search has few or no matches, mobile.de pads the page with "similar" cars from other searches. Those are dropped, so an empty search returns an empty dataset, not unrelated cars.
- Incremental monitoring for scheduled runs. Turn on incremental mode and each run returns only what is NEW, UPDATED (with the changed fields named) or REAPPEARED since the last run, and optionally what EXPIRED. Unchanged listings are skipped and not billed.
- Sponsored placements under your control. Include mobile.de's paid top placements or filter them out, and see each listing's placement type.
- A refused run fails loudly. If the site cannot be read at all, the run stops with a clear status message instead of finishing with a silent, empty dataset.
Use Cases
- Dealer and inventory monitoring: track a make, model range or price band across mobile.de for pricing and stock research.
- Marketplace aggregation: pull structured German vehicle listings into your own search or comparison site.
- Lead generation for auto dealers: collect seller names, cities and ratings for outreach or competitive analysis.
- Pricing and valuation models: build a dataset of price against mileage, year and power for data science and appraisal work.
- Personal car shopping: run a saved mobile.de search URL and get every matching listing back as structured data.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
On every record (search results, no extra charge)
| Field | Example |
|---|---|
id / url | "398217655" / mobile.de link to the listing |
title / make / model | "Audi A4" / "Audi" / "A4" |
price / priceFormatted / currency | 28900 / "28.900 €" / "EUR" |
priceRating / priceRatingLabel | "GOOD_PRICE" / "Good price" (mobile.de's market comparison) |
vatDeductible | true when VAT can be shown on the invoice |
firstRegistration / mileageKm | "03/2020" / 45000 |
powerKw / powerHp / fuel / transmission | 140 / 190 / "DIESEL" / "AUTOMATIC_GEAR" |
category | "Kombi" |
color / doors / seats | "Schwarz" / "4/5" / 5 |
previousOwners / huDate / netWeightKg | 1 / "06/2027" / 1540 |
accidentFree / highlights | true / ["Sitzheizung", "Navigation"] |
city / zip / country | "Muenchen" / "80331" / "DE" |
sellerName / sellerType / sellerId | "Autohaus Beispiel GmbH" / "DEALER" or "FSBO" (private) / 1234567 |
sellerPhones | ["+490000000000"] |
rating / reviewCount | 4.7 / 312 |
listingType / sponsored | "regular", "eyecatcher", "topInCategory" or "topOfPage" / false |
previewImage / numImages | first image / 24 |
Added by Fetch full vehicle detail
| Field | Example |
|---|---|
subTitle / trimLine / modelRange | "Avant 40 TDI S line" / "S line" / "B9" |
makeId / modelId / vehicleNumber | 1900 / 9 / the dealer's stock number |
createdAt / modifiedAt / renewedAt | "2026-09-01T08:00:00Z" |
isNew / readyToDrive / damageCondition | false / true / "Gebrauchtfahrzeug, Unfallfrei" |
cubicCapacityCcm / cylinders / fuelTankLiters | 1968 / 4 / 40 |
emissionClass / emissionsSticker / co2Emissions | "Euro6d" / "4 (Grün)" / "132 g/km" |
fuelConsumption / energyConsumption / engineType | "5,0 l/100km (kombiniert)" / ... / "Verbrennungsmotor" |
manufacturerColor / interior / climatisation / airbags / parkAssists | "Mythosschwarz" / "Leder, Schwarz" / ... |
trailerLoadBrakedKg / trailerLoadUnbrakedKg | 1800 / 750 |
lastServiceDate / lastServiceMileageKm / countryVersion | "06/2026" / 42000 / "Deutsche Ausführung" |
deliveryOption / deliveryRadius / deliveryPeriod | "Lieferung möglich" / "700 km" / "1 Tag" |
sellerAddress / sellerZip / sellerLatitude / sellerLongitude | "Beispielstraße 1, DE-80331 Muenchen" / "80331" / 48.1 / 11.5 |
sellerWhatsApp / sellerLanguages / sellerSince | "+490000000000" / ["Deutsch", "English"] / "2015-04-01" |
sellerOpeningHours / sellerHomepage | [{"day": "Mo - Fr", "time": "08:00 Uhr - 18:00 Uhr"}] / link |
sellerRecommendationRate / sellerAdRealityRate | 92 / 95 (percent) |
description / features / images / attributes | seller text, equipment list, full gallery, full spec table |
Every record has the same set of keys; anything a listing does not show is null (or an empty list).
How to Use
- Pick a mode:
search(build a query from filters) orurl(paste your own mobile.de search or listing links). - For search mode, fill in vehicle class, make and the range filters you need. For url mode, paste one or more mobile.de search or vehicle detail links.
- Turn on Fetch full vehicle detail if you need the specification table, equipment list, description and full image gallery. Leave it off for fast, list-only runs.
- Set Maximum listings and Maximum pages per search to control run size and cost, then click Start.
Filtered search:
{"mode": "search","vehicleClass": "Car","make": "Audi","priceFrom": 10000,"priceTo": 40000,"yearFrom": 2018,"fuels": ["DIESEL"],"maxListings": 50}
Search with full detail enrichment:
{"mode": "search","vehicleClass": "Car","make": "BMW","fetchDetails": true,"maxListings": 20}
Postal code and radius, used vehicles only:
{"mode": "search","vehicleClass": "Car","zipcode": "10115","radiusKm": 50,"condition": "USED","transmission": "AUTOMATIC_GEAR","maxListings": 30}
Your own URLs:
{"mode": "url","urls": ["https://suchen.mobile.de/fahrzeuge/search.html?ms=3500%3B%3B%3B&vc=Car","https://suchen.mobile.de/fahrzeuge/details.html?id=398217655"],"maxPages": 5,"maxListings": 100}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/mobile-de-scraper").call(run_input={"mode": "search", "make": "Audi", "maxListings": 20})for listing in client.dataset(run["defaultDatasetId"]).iterate_items():print(listing["title"], listing["priceFormatted"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/mobile-de-scraper').call({ mode: 'search', make: 'Audi', maxListings: 20 });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Incremental monitoring (scheduled runs)
Schedule the same search daily or weekly with Incremental changes for scheduled runs on:
- The first run returns every matching listing, marked
changeType: "NEW". - Later runs return only listings that are
NEW,UPDATED(withchangedFields, e.g.["price"]) orREAPPEARED. Listings that did not change are skipped and not billed. Each row also carriesfirstSeenAtandlastSeenAt. - Turn on Emit expired listings to also get listings that disappeared, marked
EXPIRED. This is only decided when a run has read every result the site reports for each search (no page failed and no page or listing limit cut it short), so a temporary problem never marks live listings as gone. mobile.de shows at most 50 pages per search, so for very large searches narrow the filters to get expiry tracking. - Turn on Emit unchanged listings if you want the full snapshot every run (billed).
State is kept automatically per search setup (filters, URLs and options), so different searches never mix. Use State key to name a campaign or share state on purpose. Some fields never count as a change because they move without the car changing: seller-level ratings (rating, reviewCount, sellerRecommendationRate, sellerAdRealityRate), modifiedAt/renewedAt (dealer feed syncs, renewals) and listingType (the paid placement). Add your own with Ignore fields when detecting changes.
How search mode paginates
Search mode reads one page at a time, deduplicates listings by id, and keeps going until Maximum listings is reached, Maximum pages per search is reached, or two pages in a row come back with nothing new, whichever happens first. URL mode auto-paginates a pasted search link forward under the same rules; a pasted vehicle detail link is read once, on its own.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (build a query from filters) or url (use your own links). |
urls | array | none (prefill: ["https://suchen.mobile.de/auto/audi-a4.html"]) | Your own mobile.de search or vehicle detail links (url mode). |
vehicleClass | string | Car | Vehicle category (search mode only). |
make | string | none | Manufacturer name as it appears on mobile.de. Left blank searches all makes; an unknown name stops the run with a message. |
model | string | none | Model (320, X5, Golf) or whole series (3er) for the chosen make. An unknown model stops the run and lists valid series. |
condition | string | `` (any) | New, used, employee car, classic, demo, or pre-registered. |
fuels | array | [] (any) | Multi-select fuel types. |
transmission | string | `` (any) | Gearbox type used as a search filter. |
bodyType | string | `` (any) | Body shape, used together with a Car vehicle class. |
country | string | DE | Country the listings are offered in. |
zipcode | string | none | Postal code or town (e.g. 10115 or München), used with Radius. An unknown location stops the run with a message. |
radiusKm | integer | none | Radius around the location (up to 1000 km), rounded up to the nearest radius mobile.de offers. |
priceFrom | integer | none | Lower bound for price (EUR). |
priceTo | integer | none | Upper bound for price (EUR). |
yearFrom | integer | none | Oldest first-registration year. |
yearTo | integer | none | Newest first-registration year. |
mileageFrom | integer | none | Lower bound for mileage (km). |
mileageTo | integer | none | Upper bound for mileage (km). |
powerFromKw | integer | none | Lower bound for engine power (kW). |
powerToKw | integer | none | Upper bound for engine power (kW). |
excludeDamaged | boolean | true | Hide vehicles flagged as damaged. |
onlyDamaged | boolean | false | Show only vehicles flagged as damaged (overrides the option above). |
exteriorColors | array | [] (any) | Multi-select exterior colours. |
sellerType | string | `` (any) | Dealer, private seller, or company vehicle. |
priceRatings | array | [] (any) | Only listings mobile.de rates as very good, good, or fair price. |
onlineSinceDays | string | `` (any) | Only listings published in the last 1, 3, 7 or 14 days. |
vatReclaimable | boolean | false | Only listings with VAT shown on the invoice. |
minSeats | integer | none | Minimum number of seats. |
doors | string | `` (any) | 2/3, 4/5 or 6/7 doors. |
maxPreviousOwners | integer | none | Up to this many previous owners (1-4). |
driveType | string | `` (any) | All-wheel, front-wheel or rear-wheel drive. |
emissionClass | string | `` (any) | Minimum emission standard (Euro 1 to Euro 7). |
minSellerRating | integer | none | Only sellers rated at least this many stars (3-5). |
keyword | string | none | Only listings whose description contains this text. |
sortBy | string | RELEVANCE | Result order: relevance, price, first registration, mileage, or listing date (newest or oldest). |
incrementalMode | boolean | false | Return only NEW / UPDATED / REAPPEARED listings since the last run of the same search. |
stateKey | string | none | Optional name for an incremental monitoring campaign. |
emitUnchanged | boolean | false | Also return unchanged listings (billed). |
emitExpired | boolean | false | Also return listings no longer found, after a complete scan (billed). |
ignoreFieldsForChanges | array | [] | Extra field names that should not count as a change. |
fetchDetails | boolean | false | Pull the specification table, equipment list, description and full image gallery from each listing's detail page. |
includeSponsored | boolean | false | Include mobile.de's paid top placements. |
maxListings | integer | 20 | Stop after this many listings across the whole run. 0 means no limit. |
maxPages | integer | 1000 | Per-search page cap. The run also stops early once the site's own result list is exhausted. |
proxyConfiguration | object | none in the schema (prefill: residential group, country DE); the actor applies this same setting at runtime if the field is left out | Connection settings. Only the country is used; connections always route through the residential proxy group. |
mcpConnectors | array | none | Present in the input form but not currently wired to any export step in this actor; setting it has no effect. |
notionParentPageUrl | string | none | Present in the input form but not currently wired to any export step in this actor; setting it has no effect. |
maxNotifyListings | integer | 50 | Present in the input form but not currently wired to any export step in this actor; setting it has no effect. |
Output Example
Sample shape: values are illustrative placeholders, not from a live record. Detail-only fields are shown filled, as with Fetch full vehicle detail on.
{"id": "398217655","url": "https://suchen.mobile.de/fahrzeuge/details.html?id=398217655","title": "Audi A4","make": "Audi","model": "A4","subTitle": "Avant 40 TDI S line","category": "Kombi","price": 28900,"priceFormatted": "28.900 €","currency": "EUR","priceRating": "GOOD_PRICE","priceRatingLabel": "Good price","vatDeductible": true,"firstRegistration": "03/2020","mileageKm": 45000,"powerKw": 140,"powerHp": 190,"fuel": "DIESEL","transmission": "AUTOMATIC_GEAR","color": "Schwarz Metallic","doors": "4/5","seats": 5,"previousOwners": 1,"huDate": "06/2027","accidentFree": true,"highlights": ["Sitzheizung", "Navigation"],"cubicCapacityCcm": 1968,"emissionClass": "Euro6d","co2Emissions": "132 g/km","fuelConsumption": "5,0 l/100km (kombiniert)","createdAt": "2026-09-01T08:00:00Z","city": "Muenchen","zip": "80331","country": "DE","listingType": "regular","sponsored": false,"numImages": 24,"previewImage": "https://img.classistatic.de/api/v1/mo-prod/images/sample.jpg?rule=mo-1600","sellerName": "Autohaus Beispiel GmbH","sellerType": "DEALER","sellerId": 1234567,"sellerPhones": ["+490000000000"],"sellerAddress": "Beispielstraße 1, DE-80331 Muenchen","sellerLatitude": 48.1,"sellerLongitude": 11.5,"sellerSince": "2015-04-01","rating": 4.7,"reviewCount": 312,"sellerRecommendationRate": 92,"description": "Sample seller description text describing the vehicle's condition and history.","features": ["Navigation", "Sitzheizung", "Xenon-Scheinwerfer"]}
Plan Requirement
Connections for this actor always route through Apify's residential proxy group; the exit country comes from Connection settings and defaults to Germany. Detail enrichment is billed as an extra event per listing it successfully enriches, on top of the per-record price. This applies to every listing enriched with fetchDetails on, and to every vehicle detail link pasted directly in URL mode, which is always read from its detail page. Check the Pricing tab for current rates before a large run.
FAQ
How much does it cost?
You pay per record returned, plus one detail-enrichment charge per enriched listing: each listing fetchDetails succeeds on, and each vehicle detail link pasted directly in URL mode. The Pricing tab shows the current rates. Use Maximum listings to cap the cost of any run.
Is it legal to scrape mobile.de?
This actor collects only publicly available vehicle listing data. You are responsible for how you use it: follow mobile.de's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Listing facts (price, mileage, specifications) are generally data, but photos and dealer information may carry third-party rights.
How do Model and Location work?
Model accepts a single model (320, X5, Golf) or a whole series (3er); the actor looks up mobile.de's own model list for your make. Location accepts a postal code or a town and is looked up the same way mobile.de's search box does it, then combined with Radius. If either cannot be matched, the run stops and tells you, rather than quietly searching without it.
Which fields need Fetch full vehicle detail?
Price rating, colour, doors, seats, owners, HU date, transmission, category, seller type and phone numbers come with every search result. Engine and emission data, the equipment list, description, full gallery, listing dates and the seller's address, coordinates, opening hours and rating breakdown come from the detail page, so they need Fetch full vehicle detail (vehicle links pasted directly in URL mode are always read in full).
Why did my run fail instead of returning an empty dataset?
If the site refuses every request the actor tries, or if the run has no proxy access, or if url mode was chosen with no links, the run stops and reports why instead of finishing with zero items. A search that is simply empty (the reads worked, there were no matching cars) still finishes successfully with an empty dataset, without the "similar" cars mobile.de shows instead; only "nothing could be read" is treated as a failure. Try again, or pick a different proxy country.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, or pull results from the dataset through the API.
🔗 Want more car data?
Pair this actor with these related scrapers from the same team:
| 🚗 Cars.com Scraper Scrape cars.com listings by make, ZIP and radius. 90+ fields per car: price, MSRP... | 🚗 AutoScout24 Scraper From $0.8/1K. A lean, production-grade scraper for autoscout24.com. Point it at a search... |
| 🚗 AutoTrader UK Scraper Pull structured vehicle listings from autotrader.co.uk at scale. Search by filters or use... | 🚗 Autotrader US Scrape US car listings from Autotrader by make, model, ZIP, price, year, body style... |
| 🏷️ Kleinanzeigen.de Scraper From $1/1K. Scrape Kleinanzeigen.de ads by keyword, category, location, price, seller... | 🚗 Carsales.com.au Scraper Scrape structured vehicle listings from Carsales.com.au from $1 per 1K results. Built to... |
💬 Support
- 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.