mobile.de Scraper - Cars, Prices, Dealers & Vehicle Data avatar

mobile.de Scraper - Cars, Prices, Dealers & Vehicle Data

Pricing

from $1.60 / 1,000 vehicle listings

Go to Apify Store
mobile.de Scraper - Cars, Prices, Dealers & Vehicle Data

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

Abot API

Maintained by Community

Actor stats

1

Bookmarked

19

Total users

4

Monthly active users

16 days ago

Last modified

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 320 or a whole series like 3er), 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)

FieldExample
id, url, title"398217655", mobile.de link, "Audi A4"
make, model, category"Audi", "A4", "Kombi"
price, priceFormatted, currency28900, "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, transmission140, 190, "DIESEL", "AUTOMATIC_GEAR"
color, doors, seats"Schwarz", "4/5", 5
previousOwners, huDate, netWeightKg1, "06/2027", 1540
accidentFree, highlightstrue, ["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, sponsored4.7, 312, "regular", "eyecatcher", "topInCategory" or "topOfPage", false

Added by Fetch full vehicle detail

FieldExample
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, damageConditionfalse, true, "Gebrauchtfahrzeug, Unfallfrei"
cubicCapacityCcm, cylinders, fuelTankLiters, engineType1968, 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, priceRangesCar; price bands by rating, e.g. Very good price: 11.400 € - 14.800 €
sellerScore, sellerActiveRatingCount, sellerRecommendPercentage, sellerVehicleAsDescribedPercentage, sellerReviewPageUrl, sellerIconUrldealer sub-scores (total, responseTime, friendliness, advice), rating count, percentages, review page and logo
description, features, images, attributesseller text, equipment list, full gallery, full spec table
dealerReviewsnewest 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

  1. Pick a mode: search (build a query from filters) or url (paste your own mobile.de search or listing links).
  2. 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.
  3. 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.
  4. 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 ApifyClient
client = 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:

  1. The first run returns every matching listing, marked changeType: "NEW".
  2. Later runs return only listings that are NEW, UPDATED (with changedFields, e.g. ["price"]) or REAPPEARED. Listings that did not change are skipped and not billed. Each row also carries firstSeenAt and lastSeenAt.
  3. 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.
  4. 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.

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 typeExampleWhat happens
Searchsuchen.mobile.de/fahrzeuge/search.html?...&ms=3500&s=Car&vc=CarRead from page 1 and paged forward.
Search, later start pagesame link with &pageNumber=2Reading starts at that page.
Search, filtered and sortedsearch link with ft=, sb=, od= (older fuels, sb, od forms also work)Filters and sort order are kept.
Other vehicle classsearch link with vc=Motorbike&s=MotorbikeRead like any search.
Vehicle detail.../fahrzeuge/details.html?id=460410691One record, read from the detail page.
Detail with search parametersdetail link followed by &searchId=... and search parameters (not in the examples)Same as a plain detail link.
Make or model page.../auto/audi-a4.htmlConverted 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=VanUpTo7500Scraped like any other search link (the site may show it under a different class, for example Truck).
Legacy vehicle link.../auto-inserat/x/459673664.htmlRead as the vehicle detail page with that id.
Marketing landing pagewww.mobile.de/lp/bmw-3er-angebote/Converted to the make and model search, because the landing page itself lists no vehicles.
New-style search linkwww.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 hostm.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

ParameterTypeDefaultDescription
modestringsearchsearch (build a query from filters) or url (use your own links).
urlsarraytwelve 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.
vehicleClassstringCarVehicle category (search mode only).
makestringnoneManufacturer name as it appears on mobile.de. Left blank searches all makes; an unknown name stops the run with a message.
modelstringnoneModel (320, X5, Golf) or whole series (3er) for the chosen make. An unknown model stops the run and lists valid series.
conditionstring`` (any)New, used, employee car, classic, demo, or pre-registered.
fuelsarray[] (any)Multi-select fuel types.
bodyTypesarray[]Multi-select body types, combined with the single bodyType when both are set.
transmissionsarray[]Multi-select gearbox types, combined with the single transmission when both are set.
modelsarray[]`Make
transmissionstring`` (any)Gearbox type used as a search filter.
bodyTypestring`` (any)Body shape, used together with a Car vehicle class.
countrystringDECountry the listings are offered in.
zipcodestringnonePostal code or town (e.g. 10115 or MΓΌnchen), used with Radius. An unknown location stops the run with a message.
radiusKmintegernoneRadius around the location (up to 1000 km), rounded up to the nearest radius mobile.de offers.
priceFromintegernoneLower bound for price (EUR).
priceTointegernoneUpper bound for price (EUR).
yearFromintegernoneOldest first-registration year.
yearTointegernoneNewest first-registration year.
mileageFromintegernoneLower bound for mileage (km).
mileageTointegernoneUpper bound for mileage (km).
powerFromKwintegernoneLower bound for engine power (kW).
powerToKwintegernoneUpper bound for engine power (kW).
excludeDamagedbooleantrueHide vehicles flagged as damaged.
onlyDamagedbooleanfalseShow only vehicles flagged as damaged (overrides the option above).
exteriorColorsarray[] (any)Multi-select exterior colours.
sellerTypestring`` (any)Dealer, private seller, or company vehicle.
priceRatingsarray[] (any)Only listings mobile.de rates as very good, good, or fair price.
onlineSinceDaysstring`` (any)Only listings published in the last 1, 3, 7 or 14 days.
vatReclaimablebooleanfalseOnly listings with VAT shown on the invoice.
minSeatsintegernoneMinimum number of seats.
doorsstring`` (any)2/3, 4/5 or 6/7 doors.
maxPreviousOwnersintegernoneUp to this many previous owners (1-4).
driveTypestring`` (any)All-wheel, front-wheel or rear-wheel drive.
emissionClassstring`` (any)Minimum emission standard (Euro 1 to Euro 7).
minSellerRatingintegernoneOnly sellers rated at least this many stars (3-5).
keywordstringnoneOnly listings whose description contains this text.
sortBystringRELEVANCEResult order: relevance, price, first registration, mileage, or listing date (newest or oldest).
resumeFromRunIdstringnoneRun ID or dataset ID of an interrupted collection; listings already in that dataset are skipped and not charged again.
incrementalModebooleanfalseReturn only NEW / UPDATED / REAPPEARED listings since the last run of the same search.
stateKeystringnoneOptional name for an incremental monitoring campaign.
emitUnchangedbooleanfalseAlso return unchanged listings (billed).
emitExpiredbooleanfalseAlso return listings no longer found, after a complete scan (billed).
ignoreFieldsForChangesarray[]Extra field names that should not count as a change.
fetchDetailsbooleanfalsePull the specification table, equipment list, description and full image gallery from each listing's detail page.
reviewLimitinteger0 (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.
includeSponsoredbooleanfalseInclude mobile.de's paid top placements.
maxListingsinteger20Stop after this many listings across the whole run. 0 means no limit.
maxPagesinteger0Optional 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.
proxyConfigurationobjectnone in the schema (prefill: residential group, country DE); the actor applies this same setting at runtime if the field is left outConnection settings. Only the country is used; connections always route through the residential proxy group.
mcpConnectorsarraynoneOptional connectors (Notion, Linear, Airtable, Apify) that receive a short summary of each returned listing after the run.
notionParentPageUrlstringnoneNotion page under which listing pages are created; needed only for the Notion connector.
maxNotifyListingsinteger50Cap 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.

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.