{
  "openapi": "3.0.1",
  "info": {
    "title": "mobile.de Car & Vehicle Scraper - Listings, Prices, Dealers",
    "description": "Seven mobile.de scrapers in one - no login, no browser, no captcha. Search Germany's largest vehicle marketplace with 130 filters, read full vehicle pages, pull a dealer's whole stock, and get the legal imprint behind any listing. Every listing carries mobile.de's own price rating.",
    "version": "0.0",
    "x-build-id": "QFLruHHhq90oj1mKK"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fanndev~mobile-de-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fanndev-mobile-de-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/fanndev~mobile-de-scraper/runs": {
      "post": {
        "operationId": "runs-sync-fanndev-mobile-de-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/fanndev~mobile-de-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-fanndev-mobile-de-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "What to scrape",
            "enum": [
              "search",
              "detail",
              "dealer_inventory",
              "dealer_contact",
              "similar_ads",
              "market_count",
              "reference_data"
            ],
            "type": "string",
            "description": "search = vehicle listings for a filter set or a pasted mobile.de search URL. detail = the full vehicle page for an ad, including the seller's description text and the complete equipment list. dealer_inventory = every vehicle one seller currently has online. dealer_contact = a seller's legal imprint (company, street address, phone, Handelsregister and VAT numbers), which on mobile.de is only reachable through one of their ads. similar_ads = mobile.de's own 'similar vehicles' set for an ad. market_count = result counts only, one request per filter set, for sizing a market without pulling listings. reference_data = the make and model id tree plus every filter's allowed values, which is what you need to turn 'BMW 3 Series' into the ids the search filters take.",
            "default": "search"
          },
          "searchUrls": {
            "title": "mobile.de search URLs",
            "type": "array",
            "description": "Paste mobile.de search result URLs to scrape them as-is. Used by the search and market_count modes, and takes precedence over the filter fields below. IMPORTANT: mobile.de honours only its short filter codes (vc, ms, p, ml, fr, ...). A URL built on the legacy makeModelVariant1.makeId= parameters, and the pretty /s/auto/<make>/ links the site shows in the address bar, both return every car on the site rather than the ones you filtered for. mobile.de gives no error when this happens, so the actor compares what it sent against the filters the API echoes back and writes a droppedFilters warning into the run log and the search_summary record. SEO landing pages such as /auto/bmw-3er-reihe.html do filter correctly, but ignore any extra parameters you add to them.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "vehicleCategory": {
            "title": "Vehicle category",
            "enum": [
              "Car",
              "Motorbike",
              "Motorhome",
              "EBike",
              "VanUpTo7500",
              "TruckOver7500",
              "SemiTrailerTruck",
              "SemiTrailer",
              "Trailer",
              "Bus",
              "ConstructionMachine",
              "AgriculturalVehicle",
              "ForkliftTruck"
            ],
            "type": "string",
            "description": "Which mobile.de marketplace to search. mobile.de does not reject an unknown category - it quietly searches Cars instead and returns the full car count - so the actor validates this value before sending it.",
            "default": "Car"
          },
          "makeId": {
            "title": "Make ID",
            "type": "string",
            "description": "mobile.de's numeric id for the manufacturer, for example 3500 for BMW, 1900 for Audi, 25200 for Volkswagen. Run the reference_data mode once to get the full list with names. Names are not accepted here because mobile.de's search API only takes ids."
          },
          "modelId": {
            "title": "Model ID",
            "type": "string",
            "description": "mobile.de's numeric id for a SINGLE model, such as 116 or 318 - not for a whole series. Only unique within a make, so it must be given together with Make ID. Leave empty to search every model of the make. Use Model Group ID instead when you want a whole series. Run the reference_data mode to get both, already paired with the exact filter value to use."
          },
          "modelGroupId": {
            "title": "Model Group ID (series)",
            "type": "string",
            "description": "mobile.de's numeric id for a whole series, such as 21 for the BMW 3 Series or 20 for the 1 Series. This is a SEPARATE field from Model ID and the two are not interchangeable: mobile.de keeps series and single models in one number space but reads them from different slots, so putting a series id in Model ID silently returns a different model's cars with no error at all. Give one or the other, never both. The reference_data mode marks which is which."
          },
          "searchQuery": {
            "title": "Free-text search",
            "type": "string",
            "description": "Free-text search across listing titles and descriptions, for example 'Golf GTI Clubsport'. Combines with the other filters."
          },
          "priceMin": {
            "title": "Minimum price (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Gross consumer price floor in euros. Leave empty for no floor."
          },
          "priceMax": {
            "title": "Maximum price (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Gross consumer price ceiling in euros. Leave empty for no ceiling. Price bands are also the most practical way to slice a query that is larger than mobile.de's ~2,000-row depth ceiling."
          },
          "mileageMin": {
            "title": "Minimum mileage (km)",
            "minimum": 0,
            "type": "integer",
            "description": "Odometer floor in kilometres."
          },
          "mileageMax": {
            "title": "Maximum mileage (km)",
            "minimum": 0,
            "type": "integer",
            "description": "Odometer ceiling in kilometres."
          },
          "firstRegistrationMin": {
            "title": "First registration from (year)",
            "minimum": 1900,
            "type": "integer",
            "description": "Earliest year of first registration, for example 2018."
          },
          "firstRegistrationMax": {
            "title": "First registration to (year)",
            "minimum": 1900,
            "type": "integer",
            "description": "Latest year of first registration."
          },
          "powerMin": {
            "title": "Minimum power (kW)",
            "minimum": 0,
            "type": "integer",
            "description": "Engine power floor in kilowatts, not PS. 100 kW is roughly 136 PS."
          },
          "powerMax": {
            "title": "Maximum power (kW)",
            "minimum": 0,
            "type": "integer",
            "description": "Engine power ceiling in kilowatts, not PS."
          },
          "fuelType": {
            "title": "Fuel type",
            "enum": [
              "PETROL",
              "DIESEL",
              "ELECTRICITY",
              "HYBRID",
              "HYBRID_PLUGIN",
              "LPG",
              "CNG",
              "HYDROGENIUM",
              "ETHANOL",
              "OTHER"
            ],
            "type": "string",
            "description": "Restrict to one fuel type. The reference_data mode lists every value mobile.de accepts for the chosen vehicle category."
          },
          "transmission": {
            "title": "Transmission",
            "enum": [
              "MANUAL_GEAR",
              "AUTOMATIC_GEAR",
              "SEMIAUTOMATIC_GEAR"
            ],
            "type": "string",
            "description": "Restrict to manual, automatic or semi-automatic gearboxes."
          },
          "condition": {
            "title": "Vehicle condition",
            "enum": [
              "NEW",
              "USED"
            ],
            "type": "string",
            "description": "New vehicles, used vehicles, or leave empty for both."
          },
          "sellerType": {
            "title": "Seller type",
            "enum": [
              "dealer",
              "private"
            ],
            "type": "string",
            "description": "Restrict to commercial dealers or to private sellers. Leave empty for both."
          },
          "includeDamaged": {
            "title": "Include damaged vehicles",
            "type": "boolean",
            "description": "Turn off to exclude vehicles listed as damaged or unrepaired. mobile.de includes them by default in a plain search, though its own SEO landing pages exclude them.",
            "default": true
          },
          "country": {
            "title": "Seller country",
            "type": "string",
            "description": "Two-letter country code of the seller, for example DE, AT, NL, IT. Leave empty for all countries."
          },
          "zipCode": {
            "title": "Postcode",
            "type": "string",
            "description": "German postcode to search around. Only has an effect together with Radius."
          },
          "radiusKm": {
            "title": "Radius (km)",
            "minimum": 0,
            "type": "integer",
            "description": "Search radius in kilometres around the postcode. Postcode plus radius is a good way to slice a query that is too large for mobile.de's ~2,000-row depth ceiling."
          },
          "maxDaysOnline": {
            "title": "Listed within the last N days",
            "minimum": 0,
            "type": "integer",
            "description": "Only vehicles first published within this many days. Set to 1 to poll for new listings."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "price",
              "mileage",
              "firstRegistration",
              "power",
              "age"
            ],
            "type": "string",
            "description": "How mobile.de orders the results. Sorting changes which ~2,000 listings are reachable on a query larger than the depth ceiling, so 'Listing age' plus descending is the right choice for monitoring new stock."
          },
          "sortDescending": {
            "title": "Sort descending",
            "type": "boolean",
            "description": "Reverse the sort order. Combine with 'Listing age' to put the newest listings first.",
            "default": false
          },
          "adIds": {
            "title": "Ad IDs",
            "type": "array",
            "description": "mobile.de ad ids for the detail, dealer_contact and similar_ads modes, for example 446326880. The numeric id at the end of any mobile.de vehicle URL.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "adUrls": {
            "title": "Ad URLs",
            "type": "array",
            "description": "Full mobile.de vehicle URLs, as an alternative to Ad IDs, for the detail, dealer_contact and similar_ads modes. Both /fahrzeuge/details.html?id=... and /auto-inserat/<slug>/<id>.html forms are accepted.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "sellerIds": {
            "title": "Seller IDs",
            "type": "array",
            "description": "mobile.de numeric seller ids for the dealer_inventory mode. Every listing record this actor produces carries the seller's id in data.sellerId, so a search run feeds this field directly.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Maximum records",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many records across the whole run. Leave empty to take everything the query can reach. Note that mobile.de caps any single query at roughly 2,000 listings no matter how many matches it reports."
          },
          "pageSize": {
            "title": "Listings per request",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many listings to pull per HTTP request, up to 200. The default of 200 is the efficient setting: mobile.de honours it, so a full 2,000-listing query costs 10 requests instead of 100.",
            "default": 200
          },
          "language": {
            "title": "Language",
            "enum": [
              "de",
              "en",
              "fr",
              "it",
              "es",
              "nl",
              "pl"
            ],
            "type": "string",
            "description": "Language for mobile.de's localised labels (price text, equipment names, condition wording). The underlying vehicle data is the same either way.",
            "default": "de"
          },
          "requestDelaySecs": {
            "title": "Delay between requests (seconds)",
            "type": "string",
            "description": "Pause between HTTP requests. The default 0.4s was comfortable during recon - mobile.de never rate-limited this API - but raise it for very long runs.",
            "default": "0.4"
          },
          "maxRetries": {
            "title": "Max retries",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many times to retry a failed request before writing a diagnostic row and moving on. Retries use exponential backoff.",
            "default": 4
          },
          "timeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 300,
            "type": "integer",
            "description": "Per-request timeout.",
            "default": 45
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. mobile.de gates on the TLS fingerprint rather than on the IP address, so this actor works without a proxy. A RESIDENTIAL proxy with country DE is still the safer setting for long runs, and makes prices and regional availability match what a German buyer sees.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}