Skip to main content

Mobile.de API Reference

Complete API documentation for extracting German automotive data from Mobile.de. All endpoints, parameters, response formats, and code examples.

API Overview
  • Base URL: https://api.carapis.com/v1/parsers/mobile.de
  • Authentication: Bearer token in Authorization header
  • Response Format: JSON
  • Rate Limits: Vary by plan (100-2000 requests/minute)
  • Success Rate: 99.9% with advanced anti-detection technology

🔐 Authentication

All API requests require authentication using your API key:

// JavaScript
const headers = {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
};
# Python
headers = {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
# cURL
curl -H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
https://api.carapis.com/v1/parsers/mobile.de/search

📡 Endpoints

Search Vehicles

POST /search

Search for vehicles on Mobile.de with various filters and parameters.

Request Parameters

Search Parameters
ParameterTypeRequiredDescriptionExample
querystringYesSearch term (brand, model, etc.)"BMW 3er"
max_pricenumberNoMaximum price in EUR50000
min_pricenumberNoMinimum price in EUR20000
locationstringNoGerman city or region"Berlin"
fuel_typestringNoFuel type filter"diesel"
transmissionstringNoTransmission type"automatic"
year_fromnumberNoMinimum year2020
year_tonumberNoMaximum year2023
mileage_maxnumberNoMaximum mileage in km100000
mileage_minnumberNoMinimum mileage in km10000
limitnumberNoNumber of results (max 100)50
offsetnumberNoPagination offset0
sort_bystringNoSort field"price", "year", "mileage"
sort_orderstringNoSort direction"asc", "desc"

Fuel Type Options

Available Fuel Types
ValueDescriptionGerman Term
dieselDiesel fuelDiesel
petrolPetrol/GasolineBenzin
electricElectric vehiclesElektro
hybridHybrid vehiclesHybrid
plug_in_hybridPlug-in hybridPlug-in Hybrid
lpgLiquefied petroleum gasLPG
cngCompressed natural gasCNG

Transmission Options

Transmission Types
ValueDescriptionGerman Term
automaticAutomatic transmissionAutomatik
manualManual transmissionSchaltgetriebe
semi_automaticSemi-automaticHalbautomatik

Sort Options

Sorting Options
FieldDescriptionExample
priceSort by price{"sort_by": "price", "sort_order": "asc"}
yearSort by year{"sort_by": "year", "sort_order": "desc"}
mileageSort by mileage{"sort_by": "mileage", "sort_order": "asc"}
date_addedSort by listing date{"sort_by": "date_added", "sort_order": "desc"}

Request Example

const searchRequest = {
query: 'BMW 3er',
max_price: 50000,
location: 'Berlin',
fuel_type: 'diesel',
transmission: 'automatic',
year_from: 2020,
limit: 20,
sort_by: 'price',
sort_order: 'asc',
};

Response Format

{
"success": true,
"data": {
"listings": [
{
"id": "123456789",
"title": "BMW 320d xDrive M Sport",
"price": {
"amount": 45000,
"currency": "EUR",
"formatted": "45.000 €",
"negotiable": false
},
"specifications": {
"year": 2021,
"mileage": 35000,
"fuel_type": "Diesel",
"transmission": "Automatic",
"engine_size": "2.0L",
"power": "190 hp",
"torque": "400 Nm",
"emission_class": "Euro 6d",
"co2_emissions": 120,
"fuel_consumption": "4.5L/100km",
"doors": 4,
"seats": 5,
"color": "Alpine White",
"body_type": "Sedan"
},
"location": {
"city": "Berlin",
"state": "Berlin",
"country": "Germany",
"postal_code": "10115",
"coordinates": {
"lat": 52.52,
"lng": 13.405
}
},
"seller": {
"name": "BMW Premium Selection",
"type": "dealer",
"rating": 4.8,
"reviews_count": 125,
"certified": true,
"contact": {
"phone": "+49 30 12345678",
"email": "info@bmw-premium.de"
}
},
"features": ["Navigation System", "Leather Seats", "LED Headlights", "Parking Sensors", "Bluetooth Connectivity"],
"images": ["https://example.com/image1.jpg", "https://example.com/image2.jpg"],
"url": "https://www.mobile.de/...",
"extracted_at": "2024-01-15T10:30:00Z",
"last_updated": "2024-01-15T10:30:00Z"
}
],
"total_count": 1250,
"search_metadata": {
"query": "BMW 3er",
"filters_applied": {
"max_price": 50000,
"location": "Berlin",
"fuel_type": "diesel"
},
"pagination": {
"limit": 20,
"offset": 0,
"has_more": true
}
}
}
}

Get Vehicle Details

GET /vehicle/\{id\}

Get detailed information about a specific vehicle by its ID.

Path Parameters

ParameterTypeRequiredDescription
idstringYesVehicle ID from search results

Request Example

const vehicleId = '123456789';
const response = await axios.get(`https://api.carapis.com/v1/parsers/mobile.de/vehicle/$\{vehicleId\}`, {
headers: {
Authorization: `Bearer $\{API_KEY\}`,
'Content-Type': 'application/json',
},
});

Response Format

{
"success": true,
"data": {
"vehicle": {
"id": "123456789",
"title": "BMW 320d xDrive M Sport",
"description": "Well-maintained BMW 320d with full service history...",
"price": {
"amount": 45000,
"currency": "EUR",
"formatted": "45.000 €",
"negotiable": false,
"price_history": [
{
"date": "2024-01-01",
"price": 47000
},
{
"date": "2024-01-15",
"price": 45000
}
]
},
"specifications": {
"year": 2021,
"mileage": 35000,
"fuel_type": "Diesel",
"transmission": "Automatic",
"engine_size": "2.0L",
"power": "190 hp",
"torque": "400 Nm",
"emission_class": "Euro 6d",
"co2_emissions": 120,
"fuel_consumption": "4.5L/100km",
"doors": 4,
"seats": 5,
"color": "Alpine White",
"body_type": "Sedan",
"vin": "WBA8E9G50JNT12345",
"registration_date": "2021-03-15",
"next_inspection": "2025-03-15"
},
"vehicle_history": {
"owners": 2,
"accident_free": true,
"service_history": "Complete",
"warranty": "Extended warranty until 2026",
"import_history": "German vehicle"
},
"location": {
"city": "Berlin",
"state": "Berlin",
"country": "Germany",
"postal_code": "10115",
"coordinates": {
"lat": 52.52,
"lng": 13.405
}
},
"seller": {
"name": "BMW Premium Selection",
"type": "dealer",
"rating": 4.8,
"reviews_count": 125,
"certified": true,
"contact": {
"phone": "+49 30 12345678",
"email": "info@bmw-premium.de",
"website": "https://www.bmw-premium.de"
},
"address": {
"street": "Unter den Linden 1",
"city": "Berlin",
"postal_code": "10115",
"country": "Germany"
},
"business_hours": {
"monday": "09:00-18:00",
"tuesday": "09:00-18:00",
"wednesday": "09:00-18:00",
"thursday": "09:00-18:00",
"friday": "09:00-18:00",
"saturday": "09:00-16:00",
"sunday": "Closed"
}
},
"features": ["Navigation System", "Leather Seats", "LED Headlights", "Parking Sensors", "Bluetooth Connectivity", "Apple CarPlay", "Android Auto", "Heated Seats", "Cruise Control", "Lane Departure Warning"],
"images": [
{
"url": "https://example.com/image1.jpg",
"alt": "Front view",
"primary": true
},
{
"url": "https://example.com/image2.jpg",
"alt": "Interior view",
"primary": false
}
],
"url": "https://www.mobile.de/...",
"extracted_at": "2024-01-15T10:30:00Z",
"last_updated": "2024-01-15T10:30:00Z"
}
}
}

Get Market Statistics

GET /statistics

Get market statistics and trends for the German automotive market.

Query Parameters

ParameterTypeRequiredDescriptionExample
brandstringNoFilter by brand"BMW"
modelstringNoFilter by model"3er"
locationstringNoFilter by location"Berlin"
periodstringNoTime period"30d", "90d", "1y"

Request Example

const response = await axios.get('https://api.carapis.com/v1/parsers/mobile.de/statistics', {
params: {
brand: 'BMW',
model: '3er',
location: 'Berlin',
period: '90d',
},
headers: {
Authorization: `Bearer $\{API_KEY\}`,
'Content-Type': 'application/json',
},
});

Response Format

{
"success": true,
"data": {
"statistics": {
"total_listings": 1250,
"average_price": 42000,
"price_range": {
"min": 25000,
"max": 75000,
"median": 41000
},
"price_trends": [
{
"date": "2024-01-01",
"average_price": 42500,
"listings_count": 1200
},
{
"date": "2024-01-15",
"average_price": 42000,
"listings_count": 1250
}
],
"brand_distribution": [
{
"brand": "BMW",
"count": 450,
"percentage": 36
},
{
"brand": "Mercedes",
"count": 380,
"percentage": 30.4
}
],
"fuel_type_distribution": [
{
"fuel_type": "Diesel",
"count": 750,
"percentage": 60
},
{
"fuel_type": "Petrol",
"count": 375,
"percentage": 30
}
],
"year_distribution": [
{
"year": 2021,
"count": 400,
"percentage": 32
},
{
"year": 2020,
"count": 350,
"percentage": 28
}
]
}
}
}

⚠️ Error Handling

Error Response Format

{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Please wait before retrying.",
"details": {
"limit": 100,
"reset_time": "2024-01-15T11:00:00Z"
}
}
}

Common Error Codes

Error Codes
CodeHTTP StatusDescriptionSolution
INVALID_API_KEY401Invalid or expired API keyCheck your API key in the dashboard
RATE_LIMIT_EXCEEDED429Rate limit exceededImplement rate limiting and retry logic
INVALID_PARAMETERS400Invalid request parametersCheck parameter values and formats
PARSER_UNAVAILABLE503Parser temporarily unavailableRetry after a few minutes
QUOTA_EXCEEDED402Monthly quota exceededUpgrade your plan or wait for reset
GEOGRAPHIC_RESTRICTION403Geographic restrictionContact support for assistance

📊 Rate Limits

Rate Limits by Plan
PlanRequests per MinuteMonthly QuotaConcurrent Requests
Starter10050,0005
Professional500250,00020
Enterprise20001,000,000100

Rate Limit Headers

// Check rate limit headers
const response = await axios.post('/search', data, headers);

console.log('Remaining requests:', response.headers['x-ratelimit-remaining']);
console.log('Reset time:', response.headers['x-ratelimit-reset']);
console.log('Limit:', response.headers['x-ratelimit-limit']);

🔧 Code Examples

Complete JavaScript Example

const axios = require('axios');

class MobileDeAPI {
constructor(apiKey) {
this.apiKey = apiKey;
this.baseURL = 'https://api.carapis.com/v1/parsers/mobile.de';
this.headers = {
Authorization: `Bearer $\{apiKey\}`,
'Content-Type': 'application/json',
};
}

async searchVehicles(params) {
try {
const response = await axios.post(`${this.baseURL}/search`, params, { headers: this.headers });
return response.data;
} catch (error) {
this.handleError(error);
}
}

async getVehicleDetails(vehicleId) {
try {
const response = await axios.get(`${this.baseURL}/vehicle/$\{vehicleId\}`, { headers: this.headers });
return response.data;
} catch (error) {
this.handleError(error);
}
}

async getMarketStatistics(params = {}) {
try {
const response = await axios.get(`${this.baseURL}/statistics`, {
params,
headers: this.headers,
});
return response.data;
} catch (error) {
this.handleError(error);
}
}

handleError(error) {
if (error.response?.status === 429) {
console.log('Rate limit exceeded. Please wait before retrying.');
} else if (error.response?.status === 401) {
console.log('Invalid API key. Please check your credentials.');
} else {
console.log('API Error:', error.response?.data || error.message);
}
throw error;
}
}

// Usage
const api = new MobileDeAPI('YOUR_API_KEY');

// Search for vehicles
const searchResult = await api.searchVehicles({
query: 'BMW 3er',
max_price: 50000,
location: 'Berlin',
});

// Get vehicle details
const vehicleDetails = await api.getVehicleDetails('123456789');

// Get market statistics
const statistics = await api.getMarketStatistics({
brand: 'BMW',
location: 'Berlin',
});

Complete Python Example

import requests
import time
from typing import Dict, Optional

class MobileDeAPI:
def __init__(self, api_key: str):
self.api_key = api_key
self.base_url = 'https://api.carapis.com/v1/parsers/mobile.de'
self.headers = {
'Authorization': f'Bearer \{api_key\}',
'Content-Type': 'application/json'
}

def search_vehicles(self, params: Dict) -> Optional[Dict]:
try:
response = requests.post(
f'{self.base_url}/search',
json=params,
headers=self.headers
)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
self.handle_error(e)
return None

def get_vehicle_details(self, vehicle_id: str) -> Optional[Dict]:
try:
response = requests.get(
f'{self.base_url}/vehicle/\{vehicle_id\}',
headers=self.headers
)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
self.handle_error(e)
return None

def get_market_statistics(self, params: Dict = None) -> Optional[Dict]:
try:
response = requests.get(
f'{self.base_url}/statistics',
params=params or {},
headers=self.headers
)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
self.handle_error(e)
return None

def handle_error(self, error):
if hasattr(error, 'response'):
if error.response.status_code == 429:
print('Rate limit exceeded. Please wait before retrying.')
elif error.response.status_code == 401:
print('Invalid API key. Please check your credentials.')
else:
print(f'API Error: {error.response.text}')
else:
print(f'Request Error: \{error\}')

# Usage
api = MobileDeAPI('YOUR_API_KEY')

# Search for vehicles
search_result = api.search_vehicles({
'query': 'BMW 3er',
'max_price': 50000,
'location': 'Berlin'
})

# Get vehicle details
vehicle_details = api.get_vehicle_details('123456789')

# Get market statistics
statistics = api.get_market_statistics({
'brand': 'BMW',
'location': 'Berlin'
})

🚀 Next Steps

Ready to Integrate?
  1. Quick Start Guide - Get started in 5 minutes
  2. Market Analysis - German market insights
  3. Features Overview - Advanced capabilities
  4. FAQ - Common questions and answers
Need Help?

Ready to extract German automotive data? Start with the Mobile.de API today and unlock comprehensive market intelligence for your business.

Get Started Now →