# Mobile.de Scraper: Cars, Prices, Dealers & Phones (`axlymxp/mobile-de-scraper`) Actor

Export mobile.de vehicle listings: price, specs, location, dealer name, address and phone. Search by URL, filters or plain words, all vehicle types, no 2,000-result limit. Optional full details: description, equipment, AI summary, dealer VAT imprint. Pay only for results.

- **URL**: https://apify.com/axlymxp/mobile-de-scraper.md
- **Developed by:** [axly](https://apify.com/axlymxp) (community)
- **Categories:** E-commerce, Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 dataset items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Mobile.de Scraper: Cars, Prices, Dealers & Phones

Export vehicle listings from **mobile.de**, Germany's largest vehicle marketplace (about 1.6 million cars plus
motorbikes, motorhomes, vans, trucks, trailers, e-bikes and machinery), as clean JSON, CSV or Excel rows.

- **Search the way you want:** paste mobile.de search URLs, describe the car in plain words
  ("BMW 3er Kombi Diesel ab 2019 unter 20000 Euro"), or use the filters (make, model, price, year, mileage, power, fuel,
  gearbox, body type, condition, seller type, country, radius around a point).
- **No 2,000-result ceiling:** mobile.de only lets you page through 2,000 results per search. Bigger searches are split
  automatically, so "all Porsche cars" returns every listing, not the first 2,000.
- **Dealer contacts in every row:** dealer name, address, phone numbers and rating come with the listing, with no
  extra cost per contact.
- **Optional full details:** description, full equipment list, mobile.de's AI summary of the listing, KBA type codes,
  WLTP range and the dealer's legal imprint (company, address, VAT id).
- **Fast and stable:** no browser and no proxy needed.

### What you get

| Field | Example |
| --- | --- |
| `title`, `make`, `model`, `subTitle` | "BMW 320d Touring", "BMW", "320" |
| `price`, `currency`, `priceType`, `priceRating` | 23890, "EUR", "FIXED", "GOOD_PRICE" (mobile.de's rating: VERY_GOOD_PRICE … HIGH_PRICE) |
| `firstRegistration`, `mileage`, `power`, `fuel`, `transmission` | "11/2022", "110.477 km", "140 kW (190 PS)", "Diesel", "Automatik" |
| `cubicCapacity`, `color`, `doors`, `seats`, `emissionClass`, `previousOwners`, `inspectionDue` | "1.995 cm³", "Schwarz", "4/5", "5", "Euro6d", "1", "11/2026" |
| `electric`, `batteryCapacity`, `batteryCertificate`, `wltpRange` | true, "82 kWh", true, "338 km" |
| `kbaHsn`, `kbaTsn`, `vat`, `edition` | "0005", "DAQ", "19,00% MwSt.", "German edition" |
| `country`, `zip`, `city`, `latitude`, `longitude` | "DE", "92637", "Weiden", 49.67, 12.16 |
| `sellerType`, `sellerId`, `sellerName`, `sellerAddress`, `sellerPhones`, `sellerRating`, `sellerRatingCount` | "DEALER", 1234567, "Autoland Weiden e.K.", "…", \["+49 (0)961 3819681"], 4.9, 207 |
| `images`, `numImages` | 1024 px image URLs |
| `highlights`, `badges`, `deliveryOption`, `certificationSeal`, `isNewListing`, `hasDamage`, `readyToDrive` | \["Finanzierung", "Lieferung"], … |
| `created`, `renewed`, `modified` | ISO-8601 timestamps |
| With **Include full details**: `description`, `features`, `aiSummary`, `dealerSku`, `isConditionNew`, `sellerImprint` | equipment list, AI summary, legal imprint with VAT id |
| `url`, `id`, `source`, `scrapedAt` | listing link, mobile.de id, which search produced the row |

The **Dealer contacts** view in the dataset shows dealer name, address, phones and rating side by side.

### Use cases

- **Dealers, traders and exporters:** source inventory by make, model, price and year; watch new listings daily.
- **Price intelligence:** track asking prices, mileage and mobile.de's own price rating per model and region.
- **Lead generation for automotive services:** build dealer lists with phone, address, rating and inventory size
  (financing, insurance, logistics, detailing, software for dealers).
- **Market research:** EV share, battery capacity and range, age and mileage distributions, regional supply.
- **Data for AI and apps:** feed a car-search assistant or a valuation model with fresh structured listings.

### Input

| Field | What it does |
| --- | --- |
| **mobile.de URLs** | Search result URLs (set filters on suchen.mobile.de and copy the address) and/or single listing URLs |
| **Search in plain words** | e.g. "electric SUV with long range" or "Wohnmobil mit 4 Schlafplätzen"; mobile.de's AI search turns it into filters |
| **Vehicle type** | Car, Motorbike, Motorhome, E-bike, Van, Truck, Semi-trailer truck, Semi-trailer, Trailer, Bus, Agricultural, Construction, Forklift |
| **Make / Model** | names as on mobile.de, e.g. "BMW" + "320", or a series like "3er Reihe" |
| **Keyword** | free text such as "gti" or "standheizung" |
| **Price, first registration, mileage, power** | from/to ranges |
| **Fuel, gearbox, body type** | one or more values |
| **Condition, seller, exclude damaged, country** | used/new, dealers/private, … |
| **Near latitude/longitude + radius** | listings within N km of a point |
| **Dealer IDs** | the full inventory of given dealers (`sellerId` from earlier results) |
| **Sort by** | relevance, newest, price, mileage, first registration |
| **Max results** | across all searches; 0 = no limit |
| **Include full details** | adds description, equipment, AI summary, imprint (one extra request per listing) |
| **Include private sellers' phone numbers** | off by default; see the FAQ |

#### Example input

```json
{
    "make": "BMW",
    "model": "3er Reihe",
    "bodyTypes": ["EstateCar"],
    "fuelTypes": ["DIESEL"],
    "yearMin": 2019,
    "priceMax": 25000,
    "sellerType": "DEALER",
    "sort": "newest",
    "maxItems": 500
}
```

or simply:

```json
{
    "startUrls": [{"url": "https://suchen.mobile.de/fahrzeuge/search.html?dam=0&isSearchRequest=true&ms=3500%3B20%3B%3B&s=Car&vc=Car"}],
    "maxItems": 100
}
```

#### Example output row

```json
{
    "id": 366035967,
    "url": "https://suchen.mobile.de/auto-inserat/bmw-318-baureihe-3-touring-318i-weiden/366035967.html",
    "title": "BMW 318 Baureihe 3 Touring 318i",
    "make": "BMW",
    "model": "318",
    "price": 1650.0,
    "currency": "EUR",
    "priceType": "FIXED",
    "priceRating": "NO_RATING",
    "firstRegistration": "08/2002",
    "mileage": "157.000 km",
    "power": "105 kW (143 PS)",
    "fuel": "Benzin",
    "transmission": "Schaltgetriebe",
    "zip": "92637",
    "city": "Weiden",
    "sellerType": "DEALER",
    "sellerName": "Autoland Weiden e.K.",
    "sellerPhones": ["+49 (0)163 7421577", "+49 (0)961 3819681"],
    "sellerRating": 4.9,
    "sellerRatingCount": 207,
    "renewed": "2023-04-25T22:11:15Z",
    "source": "filters",
    "scrapedAt": "2026-10-05T10:47:38Z"
}
```

Labels such as fuel and gearbox come in German, as shown on mobile.de.

### Scheduling and integrations

Schedule the actor (for example daily with **Sort by: Newest**) in Apify Schedules, then send the results to Google
Sheets, Slack, a webhook, Make, Zapier or your database with Apify integrations. Each run returns a standard dataset
you can download as JSON, CSV, Excel or XML, or read through the Apify API.

### Use with AI assistants (MCP)

The actor works as a tool in Apify's MCP server, so Claude, ChatGPT and other MCP clients can call it directly:
"find diesel BMW estates from 2019 under 25,000 euros near Hamburg and list the dealer phones".

### FAQ

**How many listings can I get?** As many as match. mobile.de pages through at most 2,000 results per search; when a
search has more and your limit is above 2,000, the actor splits it into price bands (and makes, if needed) and merges
them without duplicates. Those split runs come out price-sorted per band.

**Do I need a proxy?** No. Leave the proxy setting empty.

**Why are private sellers' phone numbers empty?** Dealer numbers are business contacts and are always included.
Private sellers' numbers are personal data, so they are off by default. Turn on **Include private sellers' phone
numbers** only if you have a lawful basis (GDPR) to process them.

**Is the data live?** Yes, every run reads mobile.de at that moment. `renewed` tells you when the seller last updated
or bumped the listing.

**What does "Include full details" add?** The full description, the equipment list, mobile.de's AI summary, KBA type
codes, WLTP range, dealer stock number and the dealer's legal imprint. It needs one extra request per listing, so runs
are slower.

**Is scraping mobile.de legal?** The actor collects publicly visible listing data. You are responsible for how you use
it, including data-protection rules for any personal data and mobile.de's terms.

**Something broke?** Open an issue on the actor page with your input; failures are also reported to the developer
automatically.

# Actor input Schema

## `startUrls` (type: `array`):

Search result URLs from suchen.mobile.de (set your filters on the website and copy the address) and/or listing URLs (e.g. https://suchen.mobile.de/auto-inserat/.../46976330099360.html).

## `searchText` (type: `string`):

Describe the vehicle in German or English, e.g. "BMW 3er Kombi Diesel ab 2019 unter 20000 Euro" or "electric SUV with long range". mobile.de's AI search turns it into filters.

## `vehicleType` (type: `string`):

Category used by the filters, plain-word search and dealer inventories. Search URLs keep their own category.

## `make` (type: `string`):

Brand as written on mobile.de, e.g. BMW, Volkswagen, Mercedes-Benz, Porsche.

## `model` (type: `string`):

Model or model series as written on mobile.de, e.g. 320, Golf, 911er Reihe, 3er Reihe. Needs Make.

## `keyword` (type: `string`):

Free keyword matched against the listing, e.g. golf, gti, standheizung.

## `priceMin` (type: `integer`):

Minimum price in euros.

## `priceMax` (type: `integer`):

Maximum price in euros.

## `yearMin` (type: `integer`):

e.g. 2018

## `yearMax` (type: `integer`):

e.g. 2023

## `mileageMin` (type: `integer`):

Minimum mileage in km.

## `mileageMax` (type: `integer`):

Maximum mileage in km.

## `powerKwMin` (type: `integer`):

Minimum engine power in kW (1 kW = 1.36 PS).

## `powerKwMax` (type: `integer`):

Maximum engine power in kW.

## `fuelTypes` (type: `array`):

One or more fuel types.

## `transmissions` (type: `array`):

One or more gearbox types.

## `bodyTypes` (type: `array`):

One or more car body types.

## `condition` (type: `string`):

New or used vehicles.

## `sellerType` (type: `string`):

Dealers or private sellers.

## `excludeDamaged` (type: `boolean`):

Skip listings marked as damaged.

## `country` (type: `string`):

Two-letter country code, e.g. DE, AT, IT, NL, BE, FR.

## `latitude` (type: `string`):

Search around a point: latitude, e.g. 52.52 (Berlin). Use with Longitude and Radius.

## `longitude` (type: `string`):

Longitude, e.g. 13.40.

## `radiusKm` (type: `integer`):

Distance from the point.

## `dealerIds` (type: `array`):

mobile.de seller ids (the sellerId field in results) whose whole inventory you want.

## `sort` (type: `string`):

Order of results. Queries with more than 2,000 results and a limit above 2,000 are split by price band, so they come out price-sorted per band.

## `maxItems` (type: `integer`):

Maximum number of listings to return across all searches. 0 = no limit (mobile.de shows at most 2,000 per search; the actor splits bigger searches automatically).

## `includeDetails` (type: `boolean`):

Also fetch each listing's description, equipment list, mobile.de AI summary, KBA type codes, WLTP range and the dealer's legal imprint (address, VAT id). One extra request per listing, so slower; charged as an extra event per listing.

## `includePrivateSellerPhones` (type: `boolean`):

Dealer phone numbers are always included. Private sellers' numbers are personal data; turn this on only if you have a lawful basis to process them.

## `proxyConfiguration` (type: `object`):

Not needed: the actor works without a proxy. Use one only if your runs get blocked.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://suchen.mobile.de/fahrzeuge/search.html?dam=0&isSearchRequest=true&ms=3500%3B20%3B%3B&s=Car&vc=Car"
    }
  ],
  "vehicleType": "Car",
  "condition": "ANY",
  "sellerType": "ANY",
  "excludeDamaged": false,
  "radiusKm": 50,
  "sort": "relevance",
  "maxItems": 100,
  "includeDetails": false,
  "includePrivateSellerPhones": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://suchen.mobile.de/fahrzeuge/search.html?dam=0&isSearchRequest=true&ms=3500%3B20%3B%3B&s=Car&vc=Car"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("axlymxp/mobile-de-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://suchen.mobile.de/fahrzeuge/search.html?dam=0&isSearchRequest=true&ms=3500%3B20%3B%3B&s=Car&vc=Car" }],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("axlymxp/mobile-de-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://suchen.mobile.de/fahrzeuge/search.html?dam=0&isSearchRequest=true&ms=3500%3B20%3B%3B&s=Car&vc=Car"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call axlymxp/mobile-de-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,axlymxp/mobile-de-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/sJTQWNpYWUcEadqE5/builds/WOTQIynmh4Rfn0b4a/openapi.json
