# mobile.de API scraper — Germany's largest vehicle marketplace: search cars, motorbikes, vans and trucks with make/model, price, year, mileage, power, fuel, gearbox, body, seller type, damage, VAT, price rating and radius filters, and read the full listing: price and net price, mobile.de price rating, every attribute, features, images and dealer. No account, no browser.

> Search mobile.de listings. Filters narrow the result exactly as on mobile.de. Sponsored rows are kept in mobile.de's order and flagged (placement: top_ad stays on top under any sort, eyecatcher is a paid highlight at its organic position, page1_ad is mobile.de's sponsored block on page 1). price is the gross consumer price; financing is a monthly example and never the price; a 1 EUR negotiable price is flagged price_is_symbolic. total_results is mobile.de's own count.
> ReefAPI engine `mobile-de` · 4 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/mobile-de/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http, `Authorization: Bearer <key>`) and your assistant can call these actions directly.

## Endpoints

### POST /mobile-de/v1/search — 1 credit
Search mobile.de listings. Filters narrow the result exactly as on mobile.de. Sponsored rows are kept in mobile.de's order and flagged (placement: top_ad stays on top under any sort, eyecatcher is a paid highlight at its organic position, page1_ad is mobile.de's sponsored block on page 1). price is the gross consumer price; financing is a monthly example and never the price; a 1 EUR negotiable price is flagged price_is_symbolic. total_results is mobile.de's own count.

**Parameters:**
- `vehicle_type` (enum, optional, default "car") — Which mobile.de vehicle class to search. car by default. [one of: car, motorbike, van, truck]
- `query` (string, optional) — Free text, as typed into mobile.de's search box (model names, trims).
- `make` (string, optional) — Make name (BMW, Volkswagen, Mercedes-Benz) or mobile.de make id (3500 = BMW). The makes action lists both.
- `model` (string, optional) — Model name or id for the make (cars only; the models action lists them, including whole series such as '3er Reihe'). Requires make.
- `price_min` (number, optional) — Lowest gross price, EUR.
- `price_max` (number, optional) — Highest gross price, EUR.
- `year_min` (integer, optional) — Earliest year of first registration.
- `year_max` (integer, optional) — Latest year of first registration.
- `mileage_min` (integer, optional) — Lowest mileage, km.
- `mileage_max` (integer, optional) — Highest mileage, km.
- `power_kw_min` (integer, optional) — Lowest power, kW.
- `power_kw_max` (integer, optional) — Highest power, kW.
- `fuel` (enum, optional) — Fuel type. [one of: petrol, diesel, electric, hybrid_petrol, hybrid_diesel, lpg, cng, hydrogen, ethanol, other]
- `transmission` (enum, optional) — Gearbox. [one of: automatic, semi_automatic, manual]
- `body_type` (enum, optional) — Body type. Cars: suv, cabrio, estate, van, sports_car, small_car, saloon, other. Motorbikes: see allowed values. Not available for vans and trucks. [one of: suv, cabrio, estate, van, sports_car, small_car, saloon, other, chopper_cruiser, dirt_bike, enduro, sidecar, lightweight, moped, motorcycle, naked_bike, pocket_bike, quad, rally_cross, racing, roadster, scooter, sports_touring, super_moto, tourer, trike, sport]
- `seller_type` (enum, optional) — Who sells. [one of: dealer, private, company]
- `condition` (enum, optional) — New or used vehicles. [one of: new, used]
- `damaged` (enum, optional) — Damaged vehicles are included when omitted, as on mobile.de. [one of: exclude, only]
- `vat_deductible` (boolean, optional) — Only vehicles sold with deductible VAT (a net price is published).
- `price_rating` (enum, optional) — Only listings mobile.de rates at this price level. [one of: very_good, good, reasonable, increased, high]
- `latitude` (number, optional) — Search centre latitude (with longitude).
- `longitude` (number, optional) — Search centre longitude (with latitude).
- `radius_km` (integer, optional) — Radius around latitude/longitude. 50 when a centre is given without it. [one of: 10, 20, 50, 100, 200, 500]
- `sort` (enum, optional) — Order. Omitted: mobile.de's relevance order. Sponsored top ads stay first under every order. [one of: relevance, price_asc, price_desc, mileage_asc, mileage_desc, year_desc, year_asc, oldest_listing]
- `page` (integer, optional, default 1) — Result page.
- `page_size` (integer, optional, default 20) — Organic listings per page (10, 20, 50 or 100). A sponsored top ad can come on top of that count. [one of: 10, 20, 50, 100]
- `language` (enum, optional, default "de") — Language of every text label (fuel, transmission, seller type, attribute labels, price display). Numbers and ids are identical in every language. [one of: de, en, fr, it, es, pl, nl, ro, ru, tr, cs]
- `include_pii` (boolean, optional, default false) — Return phone numbers, messenger links and private sellers' exact location. Off by default.

**Returns:** {vehicle_type, total_results, page, page_size, has_more, sort_applied, count, ad_slots_dropped, duplicates_dropped, filters_applied{}, listings[]{listing_id, url, title, short_title, sub_title, make, make_id, model, model_id, vehicle_type, category, price (gross EUR), currency, price_display, price_net, vat_rate, vat_deductible, price_before_reduction, price_negotiable, price_is_symbolic, price_rating{rating, label, thresholds[], no_rating_reason}, financing{monthly_installment, down_payment, term_months, ...} (never the price), first_registration (MM/YYYY), mileage_km, power_kw, power_hp, fuel, transmission, cubic_capacity_ccm, exterior_color, doors, seats, emission_class, previous_owners, condition_new, highlights[], deal, delivery, location{postcode, city, country, text}, seller{type dealer|private|company, seller_id, name (dealers), rating, rating_count, rating_scale, phone (include_pii)}, image, image_count, kba{hsn,tsn}, placement (organic|top_ad|eyecatcher|page1_ad), is_sponsored}}

**Example request body:**
```json
{
  "make": "3500"
}
```

### POST /mobile-de/v1/listing — 1 credit
The full mobile.de listing: gross price, net price and VAT rate when the dealer can issue a VAT invoice, the earlier price of a reduced listing, price type (fixed/negotiable), mobile.de's price rating with its band, condition and damage, first registration, mileage, power in kW and hp, fuel, gearbox, colours, every published attribute (label + value), the features list, highlights, description, all images, dates, and the seller: a dealer's name, address, rating, opening hours and homepage; a private seller's town only. A removed listing returns NOT_FOUND.

**Parameters:**
- `listing_id` (string, required) — The mobile.de ad id (every search row returns it) or a mobile.de listing url. Listings expire; take a fresh id from search.
- `language` (enum, optional, default "de") — Language of every text label (fuel, transmission, seller type, attribute labels, price display). Numbers and ids are identical in every language. [one of: de, en, fr, it, es, pl, nl, ro, ru, tr, cs]
- `include_pii` (boolean, optional, default false) — Return phone numbers, messenger links and private sellers' exact location. Off by default.

**Returns:** {listing{listing_id, url, title, make, model, vehicle_type, category, price, currency, price_display, price_type, price_negotiable, price_is_symbolic, price_net, vat_rate, vat_deductible, price_before_reduction, price_rating, deal, condition, condition_new, is_damaged, ready_to_drive, first_registration, mileage_km, power_kw, power_hp, fuel, transmission, cubic_capacity_ccm, exterior_color, manufacturer_color, interior, doors, seats, previous_owners, emission_class, general_inspection, dealer_vehicle_number, specs{}, attributes[{tag,label,value}], features[], highlights[], description, images[], image_count, kba, created_at, modified_at, renewed_at, seller{type, seller_id, name, street, postcode, city, country, latitude, longitude, rating, rating_count, rating_scale, recommendation_rate_pct, member_since, languages, homepage_url, opening_hours[], logo, phones (include_pii), phones_withheld}}}

### POST /mobile-de/v1/makes — 1 credit
Every make mobile.de offers for a vehicle class, with the make id the search action accepts.

**Parameters:**
- `vehicle_type` (enum, optional, default "car") — Which mobile.de vehicle class to search. car by default. [one of: car, motorbike, van, truck]

**Returns:** {vehicle_type, count, makes[{make_id, name}]}

### POST /mobile-de/v1/models — 1 credit
Every car model mobile.de lists for a make, including series groups (is_group true, e.g. '3er Reihe (Alle)'), with the model id the search action accepts. Cars only.

**Parameters:**
- `make` (string, required) — Make name or mobile.de make id.

**Returns:** {make, make_id, count, models[{model_id, name, group, is_group}]}

**Example request body:**
```json
{
  "make": "3500"
}
```

## More
- Try it live, no code: https://reefapi.com/playground?engine=mobile-de
- Human docs page: https://reefapi.com/docs/mobile-de
- Overview page: https://reefapi.com/mobile-de-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
