mobile.de Scraper - Cars, Prices, Dealers & Vehicle Data
Pricing
from $1.60 / 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.60 / 1,000 vehicle listings
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
19
Total users
4
Monthly active users
16 days 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. An unrecognised make, model or location 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.
- 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.
- Only real results, and failures are loud. The "similar" cars mobile.de pads onto sparse searches are dropped, so an empty search returns an empty dataset. If the site cannot be read at all, the run stops with a clear status message instead of finishing silently empty.
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, title | "398217655", mobile.de link, "Audi A4" |
make, model, category | "Audi", "A4", "Kombi" |
price, priceFormatted, currency | 28900, "28.900 β¬", "EUR" |
priceRating, priceRatingLabel, vatDeductible | "GOOD_PRICE", "Good price" (mobile.de's market comparison), true when VAT can be shown on the invoice |
firstRegistration, mileageKm | "03/2020", 45000 |
powerKw, powerHp, fuel, transmission | 140, 190, "DIESEL", "AUTOMATIC_GEAR" |
color, doors, seats | "Schwarz", "4/5", 5 |
previousOwners, huDate, netWeightKg | 1, "06/2027", 1540 |
accidentFree, highlights | true, ["Sitzheizung", "Navigation"] |
city, zip, country, previewImage, numImages | "Muenchen", "80331", "DE", first image, 24 |
sellerName, sellerType, sellerId, sellerPhones | "Autohaus Beispiel GmbH", "DEALER" or "FSBO" (private), 1234567, ["+490000000000"] |
rating, reviewCount, listingType, sponsored | 4.7, 312, "regular", "eyecatcher", "topInCategory" or "topOfPage", false |
Added by Fetch full vehicle detail
| Field | Example |
|---|---|
subTitle, trimLine, modelRange, makeId, modelId, vehicleNumber | "Avant 40 TDI S line", "S line", "B9", 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, engineType | 1968, 4, 40, "Verbrennungsmotor" |
emissionClass, emissionsSticker, co2Emissions, fuelConsumption, energyConsumption | "Euro6d", "4 (GrΓΌn)", "132 g/km", "5,0 l/100km (kombiniert)", ... |
manufacturerColor, interior, climatisation, airbags, parkAssists, trailerLoadBrakedKg, trailerLoadUnbrakedKg | "Mythosschwarz", "Leder, Schwarz", ..., 1800, 750 |
lastServiceDate, lastServiceMileageKm, countryVersion, deliveryOption, deliveryRadius, deliveryPeriod | "06/2026", 42000, "Deutsche AusfΓΌhrung", "Lieferung mΓΆglich", "700 km", "1 Tag" |
sellerAddress, sellerZip, sellerLatitude, sellerLongitude, sellerWhatsApp, sellerLanguages, sellerSince, sellerHomepage | "BeispielstraΓe 1, DE-80331 Muenchen", "80331", 48.1, 11.5, "+490000000000", ["Deutsch", "English"], "2015-04-01", link |
sellerOpeningHours, sellerRecommendationRate, sellerAdRealityRate | [{"day": "Mo - Fr", "time": "08:00 Uhr - 18:00 Uhr"}], 92, 95 (percent) |
segment, priceRanges | Car; price bands by rating, e.g. Very good price: 11.400 β¬ - 14.800 β¬ |
sellerScore, sellerActiveRatingCount, sellerRecommendPercentage, sellerVehicleAsDescribedPercentage, sellerReviewPageUrl, sellerIconUrl | dealer sub-scores (total, responseTime, friendliness, advice), rating count, percentages, review page and logo |
description, features, images, attributes | seller text, equipment list, full gallery, full spec table |
dealerReviews | newest dealer reviews (reviewer, rating, date, text, sub-scores); see Dealer reviews per listing |
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: the seller-level aggregates and reviews (rating, reviewCount, sellerRecommendationRate, sellerAdRealityRate, sellerScore, sellerActiveRatingCount, sellerRecommendPercentage, sellerVehicleAsDescribedPercentage, priceRanges, dealerReviews), modifiedAt and renewedAt (dealer feed syncs, renewals) and listingType (the paid placement). Add your own with Ignore fields when detecting changes. Every other returned field (price, mileage, description, images, features, seller details) counts as a change; ignored fields are still returned in the output.
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.
URL mode: supported links
If you leave the URLs field untouched in URL mode, the actor scrapes the twelve example links below (one per link type, each resolving to a different target); use Maximum listings to cap the run. Replace them with your own links to scrape something specific.
| Link type | Example | What happens |
|---|---|---|
| Search | suchen.mobile.de/fahrzeuge/search.html?...&ms=3500&s=Car&vc=Car | Read from page 1 and paged forward. |
| Search, later start page | same link with &pageNumber=2 | Reading starts at that page. |
| Search, filtered and sorted | search link with ft=, sb=, od= (older fuels, sb, od forms also work) | Filters and sort order are kept. |
| Other vehicle class | search link with vc=Motorbike&s=Motorbike | Read like any search. |
| Vehicle detail | .../fahrzeuge/details.html?id=460410691 | One record, read from the detail page. |
| Detail with search parameters | detail link followed by &searchId=... and search parameters (not in the examples) | Same as a plain detail link. |
| Make or model page | .../auto/audi-a4.html | Converted to the matching search; a make or model the site does not list is reported in the log and counted as a failed read. |
| Fuel category page | .../auto/elektro.html (also hybrid, diesel, benzin, erdgas, autogas, wasserstoff) | Converted to a search with that fuel filter; any other category page is skipped with a warning. |
| Body-type page | .../auto/kombi.html (also cabrio, limousine, kleinwagen, sportwagen, suv, gelaendewagen, van and their longer forms such as cabrio-roadster) | Converted to a search with that body-type filter, the same as the Body types input; an unlisted body-type slug is skipped with a warning. |
| Vehicle class search | .../fahrzeuge/search.html?...&s=Van&vc=VanUpTo7500 | Scraped like any other search link (the site may show it under a different class, for example Truck). |
| Legacy vehicle link | .../auto-inserat/x/459673664.html | Read as the vehicle detail page with that id. |
| Marketing landing page | www.mobile.de/lp/bmw-3er-angebote/ | Converted to the make and model search, because the landing page itself lists no vehicles. |
| New-style search link | www.mobile.de/s/auto?... | Not supported and skipped with a warning; open the search on suchen.mobile.de and paste that search.html result link instead. |
| Mobile host | m.mobile.de/fahrzeuge/details.html?id=... | Treated as suchen.mobile.de. |
A link with a customerId= (dealer) filter is still read, but mobile.de ignores that filter, so the log warns that results are not limited to that dealer.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (build a query from filters) or url (use your own links). |
urls | array | twelve example links, one per link type (see "URL mode: supported links") | Your own mobile.de search or vehicle detail links (url mode). If you leave the field untouched in URL mode, the actor scrapes those twelve examples. |
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. |
bodyTypes | array | [] | Multi-select body types, combined with the single bodyType when both are set. |
transmissions | array | [] | Multi-select gearbox types, combined with the single transmission when both are set. |
models | array | [] | `Make |
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). |
resumeFromRunId | string | none | Run ID or dataset ID of an interrupted collection; listings already in that dataset are skipped and not charged again. |
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. |
reviewLimit | integer | 0 (the Console form pre-fills 20) | With Fetch full vehicle detail on, also return the newest dealer reviews per listing (0 to 100) in dealerReviews; 0 turns reviews off. Each started block of 10 reviews returned adds one detail-enrichment unit. |
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 | 0 | Optional per-search page cap; 0 leaves it to Maximum listings. The actor never walks more than 1000 pages per search, and 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 | Optional connectors (Notion, Linear, Airtable, Apify) that receive a short summary of each returned listing after the run. |
notionParentPageUrl | string | none | Notion page under which listing pages are created; needed only for the Notion connector. |
maxNotifyListings | integer | 50 | Cap on listings sent to each connector per run (1 to 1000). The dataset is not affected. |
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"],"dealerReviews": [{"reviewId": "4601425406", "reviewer": "Ralph", "rating": 3.3, "date": "2026-08-03", "text": "Sample review text.", "purchased": true, "friendliness": 4, "advice": 3, "responseTime": 3}]}
Send results into your apps (MCP connectors)
Optionally pick a connector in mcpConnectors (authorize it once under Apify Settings, Integrations). After the run, a short summary of each returned listing is sent to it, up to maxNotifyListings per connector. For Notion, set notionParentPageUrl to the parent page. The dataset is never changed by this export, and a failed export only logs a warning.
Plan Requirement
Residential proxies are required. mobile.de sits behind an edge filter that refuses datacenter addresses outright (an "Access Denied" page), so connections always route through Apify's residential proxy group; the exit country comes from Connection settings and defaults to Germany. A paid Apify plan with residential proxy access is therefore needed. On a plan without it the run logs "The selected connection is unavailable to this run. Apify free plans do not include residential proxies." and continues on a backup connection where some pages may still be unavailable; if that backup also cannot load the pages the run ends with "No results: residential proxies are unavailable on this run (Apify free plans do not include them)...". If the proxy refuses the account the run stops with "The proxy connection was refused for this account, so no page could be read.", and if every page request fails it stops with "Could not load any results page (the requests failed)... This is a connection problem, not an empty search." You can also supply your own proxy URLs.
Billing: you pay per record returned. Detail enrichment is 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. Dealer reviews (the Dealer reviews per listing input, default 0 so existing API, task and schedule callers see no change, the Console form pre-fills 20, at most 100, only with detail enrichment) add one more detail-enrichment unit per started block of 10 reviews actually returned on a row, charged after the row is saved; a row with no reviews, a skipped unchanged listing or a failed read adds nothing. Set it to 0 to turn reviews off. Check the Pricing tab for the 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, plus one detail-enrichment unit per started 10 dealer reviews delivered on a row (set Dealer reviews per listing to 0 to avoid it). 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 A lean, production-grade scraper for autoscout24.com. Point it at a search, get back... |
| π AutoTrader UK Scraper Pull structured vehicle listings from autotrader.co.uk at scale. Search by filters or use... | π Carsales.com.au Scraper Scrape structured vehicle listings from Carsales.com.au from $1 per 1K results. Built to... |
| π Autotrader US Scrape US car listings from Autotrader by make, model, ZIP, price, year, body style... | π·οΈ Kleinanzeigen.de Scraper Scrape Kleinanzeigen.de ads by keyword, category, location, price, seller type, or search... |
π Browse all abotapi scrapers
π¬ 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.