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
Parameter | Type | Required | Description | Example |
---|---|---|---|---|
query | string | Yes | Search term (brand, model, etc.) | "BMW 3er" |
max_price | number | No | Maximum price in EUR | 50000 |
min_price | number | No | Minimum price in EUR | 20000 |
location | string | No | German city or region | "Berlin" |
fuel_type | string | No | Fuel type filter | "diesel" |
transmission | string | No | Transmission type | "automatic" |
year_from | number | No | Minimum year | 2020 |
year_to | number | No | Maximum year | 2023 |
mileage_max | number | No | Maximum mileage in km | 100000 |
mileage_min | number | No | Minimum mileage in km | 10000 |
limit | number | No | Number of results (max 100) | 50 |
offset | number | No | Pagination offset | 0 |
sort_by | string | No | Sort field | "price", "year", "mileage" |
sort_order | string | No | Sort direction | "asc", "desc" |
Fuel Type Options
Available Fuel Types
Value | Description | German Term |
---|---|---|
diesel | Diesel fuel | Diesel |
petrol | Petrol/Gasoline | Benzin |
electric | Electric vehicles | Elektro |
hybrid | Hybrid vehicles | Hybrid |
plug_in_hybrid | Plug-in hybrid | Plug-in Hybrid |
lpg | Liquefied petroleum gas | LPG |
cng | Compressed natural gas | CNG |
Transmission Options
Transmission Types
Value | Description | German Term |
---|---|---|
automatic | Automatic transmission | Automatik |
manual | Manual transmission | Schaltgetriebe |
semi_automatic | Semi-automatic | Halbautomatik |
Sort Options
Sorting Options
Field | Description | Example |
---|---|---|
price | Sort by price | {"sort_by": "price", "sort_order": "asc"} |
year | Sort by year | {"sort_by": "year", "sort_order": "desc"} |
mileage | Sort by mileage | {"sort_by": "mileage", "sort_order": "asc"} |
date_added | Sort 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
Parameter | Type | Required | Description |
---|---|---|---|
id | string | Yes | Vehicle 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
Parameter | Type | Required | Description | Example |
---|---|---|---|---|
brand | string | No | Filter by brand | "BMW" |
model | string | No | Filter by model | "3er" |
location | string | No | Filter by location | "Berlin" |
period | string | No | Time 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
Code | HTTP Status | Description | Solution |
---|---|---|---|
INVALID_API_KEY | 401 | Invalid or expired API key | Check your API key in the dashboard |
RATE_LIMIT_EXCEEDED | 429 | Rate limit exceeded | Implement rate limiting and retry logic |
INVALID_PARAMETERS | 400 | Invalid request parameters | Check parameter values and formats |
PARSER_UNAVAILABLE | 503 | Parser temporarily unavailable | Retry after a few minutes |
QUOTA_EXCEEDED | 402 | Monthly quota exceeded | Upgrade your plan or wait for reset |
GEOGRAPHIC_RESTRICTION | 403 | Geographic restriction | Contact support for assistance |
📊 Rate Limits
Rate Limits by Plan
Plan | Requests per Minute | Monthly Quota | Concurrent Requests |
---|---|---|---|
Starter | 100 | 50,000 | 5 |
Professional | 500 | 250,000 | 20 |
Enterprise | 2000 | 1,000,000 | 100 |
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?
- Quick Start Guide - Get started in 5 minutes
- Market Analysis - German market insights
- Features Overview - Advanced capabilities
- FAQ - Common questions and answers
Need Help?
- Support - Technical assistance
- Community - Connect with other users
- Examples - See live examples
- Documentation - Complete documentation
Ready to extract German automotive data? Start with the Mobile.de API today and unlock comprehensive market intelligence for your business.