mobile.de Car Listings Scraper - Prices & Specs, No login avatar

mobile.de Car Listings Scraper - Prices & Specs, No login

Pricing

from $1.19 / 1,000 saved listings

Go to Apify Store
mobile.de Car Listings Scraper - Prices & Specs, No login

mobile.de Car Listings Scraper - Prices & Specs, No login

mobile.de scraper for car listings in Germany. Search by make, model, price, year and mileage or paste a search link. Each row has price, mileage, year, fuel, gearbox, power, photos and seller type. No mobile.de login needed. Only-new mode for schedules.

Pricing

from $1.19 / 1,000 saved listings

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Scrape car listings from mobile.de, Germany's biggest car market. Search by make, model, price, first registration year and mileage, or paste mobile.de search links. Each car becomes one row with price, mileage, fuel, gearbox, power, location, dealer and photos.

It is for car dealers, importers, analysts and anyone who watches car prices. The smallest run is make BMW, model 3er and 10 listings. It takes a few seconds and needs no login or API key.

mobile.de Car Listings Scraper: search input to car listing rows

Table of contents

What it does

The Actor reads mobile.de car search results, the same results you see on suchen.mobile.de. It saves one Dataset row per listing. You can search with simple filters (make, model, price, year, mileage, condition, seller) or paste up to 20 search links from your browser. Then you can use every filter that mobile.de has.

mobile.de shows at most 2,000 results for one search. When a search has more, the Actor splits it into price ranges and reads each range. So one run can return up to 10,000 listings.

With Only new listings, the Actor remembers which listings it already saved. The next run of the same search returns only the listings it did not see before. Use this with a schedule to watch the market.

Good fit

  • Track prices of one model, for example all BMW 3 Series cars under €30,000.
  • Collect dealer stock with mileage, power and photos for a price study.
  • Get new listings for a search every hour or every day.

Not a fit / limits

  • Cars only. Motorbikes, vans and trucks are not supported.
  • No seller phone numbers or emails. Private sellers' names are never collected. Phone numbers and emails typed into descriptions and titles are removed (common German and international formats).
  • At most 10,000 listings per run. Listings without a price are skipped when a big search is split into price ranges.
  • Data is what mobile.de shows at the time of the run. Prices and stock change often.

What data you get

  • Listing: listingId, url, title, make, model, body type, onlineSince.
  • Price: price and currency, net price, negotiable flag, mobile.de price rating.
  • Car: firstRegistration, year, mileageKm, fuel, gearbox, powerKw / powerHp, engine size, colour, doors, seats, KBA codes.
  • Seller: sellerType, dealer name, ID and rating, location (country, zip, city).
  • Photos: images (1024 px links) and imageCount.
  • With includeDetails: all photos, the seller description, the equipment list and all technical data.

Quick start

  1. Open the Input tab.
  2. Keep the prefill: Make BMW, Model 3er, Maximum listings 10.
  3. Click Start.
  4. Open the Output tab and look at the Car listings table.

Expected result: 10 rows of BMW 3 Series cars, newest listings first, with price, mileageKm, firstRegistration and a link to each listing.

Input

Input fields

FieldPlain nameTypeRequiredDefault / prefillAllowed valuesEffectExample
makeMakestringnoprefill BMWmobile.de make name; VW, Mercedes also worklimits to one brand; empty = all makesVolkswagen
modelModelstringnoprefill 3ermodel or series of that make3er / 3 Series = all 316, 318, 320 …; 320 = one modelGolf
priceMinPrice from (EUR)integernonone0–10,000,000minimum asking price5000
priceMaxPrice to (EUR)integernonone0–10,000,000maximum asking price, inclusive30000
yearFromFirst registration fromintegernonone1900–2100earliest year of first registration2019
yearToFirst registration tointegernonone1900–2100latest year of first registration2023
mileageMaxMaximum mileage (km)integernonone0–2,000,000only cars with at most this many km100000
conditionConditionstringnoanyany, used, newnew, used or bothused
sellerTypeSellerstringnoanyany, dealer, privatedealers, private sellers or bothdealer
searchUrlsSearch linksarray of stringsnoemptyup to 20 suchen.mobile.de linksuses the link filters instead of the fields abovesee example
sortSort orderstringnoauto: newest first for filters, links keep their own orderauto, newest, price_asc, price_desc, mileage_asc, year_desc, relevanceorder of resultsprice_asc
maxItemsMaximum listingsintegernodefault 100, prefill 101–10,000stops after this many listings in total500
includeDetailsInclude listing detailsbooleannofalsetrue / falseopens each listing page: all photos, description, equipment, all technical datatrue
onlyNewOnly new listingsbooleannofalsetrue / falsereturns only listings not saved by earlier runs of the same searchtrue
stateKeyMonitoring namestringnoemptyletters, digits, -, _; up to 60name of the Only new listings historybmw-3er-watch

Empty input {} returns the 100 newest car listings of all makes. A model needs a make. An unknown make or model stops the run with an error and close names to try. It does not return an empty list.

Interacting settings

WhenInput AInput BEffective behaviorCost/result effect
You give search linkssearchUrlsmake, model, price, year, mileage, condition, sellerlinks win; the filter fields are ignorednone
Several linkssearchUrlsmaxItemslinks share maxItems evenly; what a small search does not use goes to the next link; the same link twice is read onceduplicate listings are saved and charged once
Links and sortsearchUrlssortauto (default) keeps each link's own sort; any other value replaces it for all linksnone
Big searchmore than 2,000 resultsmaxItems above 2,000search is split into price ranges; rows come in price-range orderlistings without a price are skipped
MonitoringonlyNewsortwith newest first, reading stops at the first page with no new listings; other orders stop after 5 such pages in a rownewest first reads the fewest pages
MonitoringonlyNewstateKeyempty = one history per search (changes when you change filters); set a name to keep the history when you tweak filtersnone
DetailsincludeDetailsmaxItemsone extra page per listingslower (about 3.5 s per 40 listings); same price per listing

Input examples

Model search with filters

{
"make": "BMW",
"model": "3er",
"priceMax": 30000,
"yearFrom": 2019,
"mileageMax": 100000,
"sellerType": "dealer",
"maxItems": 200
}

Expected behavior: reads dealer BMW 3 Series cars from 2019 or newer, up to €30,000 and 100,000 km, newest first. Expected output: up to 200 rows with price, year, mileageKm, dealerName, url.

{
"searchUrls": ["https://suchen.mobile.de/fahrzeuge/search.html?dam=false&s=Car&vc=Car&ms=3500%3B%3B21%3B&sb=doc&od=down"],
"onlyNew": true,
"stateKey": "bmw-3er-watch",
"maxItems": 500
}

Expected behavior: the first run saves the newest 500 listings and remembers them. Later runs save only listings that appeared since then. Expected output: new rows only; an unchanged market gives 0 rows and status NO_RESULTS. Cost note: you pay the run start and the new listings only.

Output example

{
"listingId": "452795179",
"url": "https://suchen.mobile.de/auto-inserat/bmw-320d-limousine-m-sport-head-up-ahk-navi-kamera-forchheim/452795179.html",
"title": "BMW 320d Limousine M Sport Head-Up+AHK+Navi+Kamera",
"make": "BMW",
"model": "320",
"category": "Saloon",
"price": 38474,
"currency": "EUR",
"priceNet": 32331.09,
"priceRating": "GOOD_PRICE",
"firstRegistration": "2025-06",
"year": 2025,
"mileageKm": 10635,
"fuel": "Diesel",
"gearbox": "Automatic",
"powerKw": 140,
"powerHp": 190,
"sellerType": "dealer",
"dealerName": "Autohaus Wormser GmbH Forchheim",
"location": { "countryCode": "DE", "zip": "91301", "city": "Forchheim", "street": null },
"onlineSince": "2026-04-11T06:04",
"images": ["https://img.classistatic.de/api/v1/mo-prod/images/73/7354600d-5620-4994-93b6-84d54d6c2608?rule=mo-1024"],
"imageCount": 34,
"description": null,
"source": "mobile.de",
"fetchedAt": "2026-10-15T10:26:57.791Z"
}

This is one trimmed row from the prefill run (BMW, 3er, 10 listings). Some fields are left out to keep it short.

Output fields

Results go to the default Dataset (Car listings table). A run summary goes to the key-value store record RUN_SUMMARY.

FieldMeaningTypeCan be empty?Example
listingIdmobile.de listing IDstringno452795179
urllink to the listingstringnohttps://suchen.mobile.de/auto-inserat/…/452795179.html
titlelisting titlestringnoBMW 320d Limousine M Sport …
make, modelmake and model as on mobile.destringyesBMW, 320
subTitleshort text under the titlestringyesd Limousine M Sport …
categorybody typestringyesSaloon, Estate Car
priceasking price, grossnumberyes (no price shown)38474
currencyprice currencystringyes, when price is nullEUR
priceNetprice without VAT (dealers with VAT)numberyes32331.09
priceNegotiableprice is negotiablebooleanyestrue
priceRatingmobile.de price ratingstringyesVERY_GOOD_PRICE, GOOD_PRICE, REASONABLE_PRICE, INCREASED_PRICE, HIGH_PRICE
firstRegistrationfirst registration, YYYY-MMstringyes (new cars)2025-06
yearyear of first registrationintegeryes2025
mileageKmmileage in kmintegeryes10635
fuelfuel typestringyesDiesel
gearboxgearboxstringyesAutomatic
powerKw, powerHpengine powerintegeryes140, 190
engineCcengine size in ccmintegeryes1995
colorexterior colourstringyesWhite
doors, seatsdoors and seatsstring, integeryes4/5, 5
sellerTypedealer or privatestringyesdealer
sellerId, dealerNamedealer ID and name (dealers only)stringyes (private sellers)454462, Autohaus …
dealerRating, dealerReviewCountdealer rating on mobile.denumberyes4.6, 7
locationcountryCode, zip, city; street for dealers with detailsobjectparts can be null{"countryCode":"DE","zip":"91301","city":"Forchheim","street":null}
kbaHsn, kbaTsnGerman type approval codesstringyes0005, CTX
onlineSincewhen the listing went online (German time)stringyes2026-04-11T06:04
imagesphoto links, 1024 px; one photo, or all with detailsarraycan be []["https://img.classistatic.de/…?rule=mo-1024"]
imageCountnumber of photos in the listingintegeryes34
vehicleConditionused or new (details only)stringyesused
descriptionseller text without phones and emails (details only)stringyes—
featuresequipment list (details only)arrayyeslist of equipment names
attributesall technical data as text (details only)objectyes{"Fuel": "Petrol, E10-enabled"}
searchUrlthe search this row came fromstringnohttps://suchen.mobile.de/fahrzeuge/search.html?…
sourcealways mobile.destringnomobile.de
fetchedAtwhen the row was read (UTC)stringno2026-10-15T10:26:57.791Z

null means mobile.de does not show this value for the listing. It never means zero. For example, new cars have no firstRegistration and no mileageKm. Fields marked "details only" are null unless includeDetails is on.

Output entities and surfaces

SituationWhereResult shapeWhat to do
Normal runDataset + RUN_SUMMARYone row per listing; status COMPLETEopen, export or use the fields
No matching carsRUN_SUMMARY, empty Datasetstatus NO_RESULTS, run succeedscheck filters; with onlyNew it means nothing new
Stopped earlyDataset + RUN_SUMMARYsaved rows; status PARTIAL with reason CHARGE_LIMIT or TIME_LIMITraise the cost limit or timeout, or lower maxItems
Source errorRUN_SUMMARYstatus ERROR (or PARTIAL with saved rows); run fails with the reasonrun again later
Wrong inputRUN_SUMMARYstatus INVALID_INPUT; run fails with suggestionsfix make, model or link

RUN_SUMMARY also shows each search with totalAvailable (how many cars mobile.de has for it), pages read, rows saved, skipped repeats and warnings.

Pricing

Pricing unit

You pay per saved listing, plus a small fee when a run starts:

EventWhenPrice
Actor startonce per run (one per GB of memory; default 256 MB = one)$0.005
Saved listingone row in the DatasetFree plan $1.40, Bronze $1.33, Silver $1.26, Gold and higher $1.19 per 1,000

includeDetails costs the same per listing. Listings skipped by onlyNew and duplicate listings are not charged. A run with no matching cars, or a monitoring run with nothing new, costs only the $0.005 start. Platform usage is included in these prices.

If you set a maximum cost per run, the Actor stops before it goes over it. The rows saved until then stay, and the summary says PARTIAL / CHARGE_LIMIT.

Cost examples

Prices on the Free plan:

ScenarioInput scopeListingsChargeStop behavior
PrefillBMW 3er, 1010$0.019stops at maxItems
Small studyone model, 100100$0.145stops at maxItems
Big studyone make, 1,0001,000$1.405stops at maxItems
Maximumall Audi, 10,000 (split by price)10,000$14.005about 3 minutes
No matchesBMW 3er under €1000$0.005NO_RESULTS
Watch, nothing newonlyNew rerun, newest first0$0.005stops at the first page with nothing new

Use cases

Buyer jobInput pathOutput entityKey fieldsNext integration
Price study for a modelmake, model, yearFrom, mileageMaxcar listingprice, year, mileageKm, powerKwexport CSV / Excel
Watch new cars for a searchsearchUrls or filters + onlyNew, schedulenew car listinglistingId, url, price, onlineSincewebhook, Make, Zapier
Dealer stock listsellerType dealer, makecar listingdealerName, sellerId, location, imagesGoogle Sheets, API
Full car detailsany search + includeDetailscar listing with detailsdescription, features, attributes, imagesdatabase, AI agent

Scheduling and monitoring

  1. Set your search with the filters or a search link.
  2. Turn on Only new listings (onlyNew). Keep Sort order on newest first.
  3. Optional: set Monitoring name (stateKey), so the history stays when you change filters later.
  4. Create an Apify schedule, for example every hour.

The first run saves the newest listings up to maxItems and remembers them. Each next run saves only listings that the history does not have yet. The history keeps the last 20,000 listing IDs per search. A run with nothing new ends with status NO_RESULTS and costs only the $0.005 start.

A bumped listing (the seller moved an old listing to the top) counts as new if this history never saw it.

API, export and integrations

  • API: start the Actor with the Apify API and the input JSON above; read rows from the default Dataset.
  • Export: CSV, Excel, JSON, XML or HTML from the Dataset.
  • Scheduling: create a schedule with onlyNew on to get new cars every hour or every day.
  • Webhooks / no-code: send rows to Make, Zapier, n8n or Google Sheets when a run finishes.

Use with AI agents (MCP)

  • Apify MCP server URL with only this Actor: https://mcp.apify.com?tools=cliqtomedia/mobile-de-scraper.
  • Smallest useful input: {"make": "BMW", "model": "3er", "maxItems": 10}.
  • Key fields: price (EUR, gross), mileageKm, firstRegistration (YYYY-MM), powerKw, url (listing page).
  • A 10-listing run takes about 5 seconds and costs $0.019 on the Free plan. Up to 10,000 listings per run.

Limits and partial results

  • Cars only. Motorbikes, vans and trucks are not supported.
  • Up to 10,000 listings and 20 search links per run.
  • A run reads at most 40 result pages that save nothing (plus one more page for every two saved listings), or 10 after a switch to the backup connection. This keeps monitoring runs with no news short.
  • 10,000 listings took 176 seconds in our test. The default 300-second timeout is enough for most runs. With includeDetails, raise the timeout for big runs.
  • mobile.de shows at most 2,000 results per search. Bigger searches are split into price ranges; listings without a price are skipped then.
  • If you set a maximum cost per run, the run stops before it, keeps the saved rows and ends with PARTIAL / CHARGE_LIMIT.
  • If the run reaches its timeout, saved rows stay and the summary says PARTIAL / TIME_LIMIT.
  • If mobile.de fails after some rows, the rows stay, the summary says PARTIAL and the run is marked failed, so you can see it.

Troubleshooting

The run fails with "Unknown model"

Symptom: the run fails right away. Likely reason: mobile.de uses a different model name. Check: the error message lists close names. Action: use one of them, for example 3er or 3 Series for all BMW 3 Series cars, or 320 for one model.

Symptom: the summary has a warning "mobile.de ignored part of search link". Likely reason: a filter in the link is broken, so mobile.de dropped it. Action: set the filters again on suchen.mobile.de and copy the new link.

Only new listings returns an old car

Likely reason: the seller bumped the listing, so it moved to the top. The Actor did not save it before, so it counts as new.

The run fails with a source error

Likely reason: mobile.de did not answer or refused requests. The Actor switches to another connection once by itself. Action: run again later. Rows saved before the error stay in the Dataset.

FAQ

Do I need a mobile.de account or API key?

No. The Actor reads public search results. No login, cookies or API key.

Why do I get 0 rows?

mobile.de has no cars for your filters, or, with onlyNew, nothing new appeared. The summary says which. The run still succeeds. A source error is never shown as 0 rows; it fails the run.

Can I get the seller's phone number?

No. The Actor does not collect phone numbers or emails, and it removes phone numbers and emails typed into descriptions (common German and international formats; unusual spellings such as numbers written in words may stay). For private sellers it saves only the city and zip code shown in the listing.

How fresh is the data?

Each row is read live at the time shown in fetchedAt.

Can I move from another mobile.de scraper?

Yes, but field names differ. This Actor gives flat numbers: price, mileageKm, powerKw, and firstRegistration as YYYY-MM. Map your fields once.

Support

For a bug, question or feature request, open an issue on the Actor's Issues tab. Include the run ID, your input (without private data) and the summary message. Never send tokens or passwords.