Mobile.de Scraper — Vehicle Inventory Monitor avatar

Mobile.de Scraper — Vehicle Inventory Monitor

Pricing

from $1.80 / 1,000 vehicle listing returneds

Go to Apify Store
Mobile.de Scraper — Vehicle Inventory Monitor

Mobile.de Scraper — Vehicle Inventory Monitor

Scrape public Mobile.de vehicle listings from search or listing URLs. Get prices, mileage, specs, sellers, images, and monitored inventory price changes.

Pricing

from $1.80 / 1,000 vehicle listing returneds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

Share

Extract Mobile.de vehicle listings from filtered public URLs or an authorized Mobile.de Search API account, then monitor the same search for new listings and price changes. It is designed for automotive dealers, exporters, fleet buyers, and market-research teams that need a clean, structured record rather than a browser tab full of ads.

What it returns

Each dataset item is one public vehicle listing. Core fields stay stable across concise and detailed runs so a spreadsheet, warehouse, or AI agent can process every item consistently.

Field groupIncluded fields
VehiclelistingId, listingUrl, title, make, model, firstRegistration, mileageKm, fuelType, transmission, powerKw, bodyType
PricepriceEur, currency, changeType, previousPriceEur
Seller and placelocation, postalCode, sellerName, sellerType, plus a public phone only when detailed output exposes one
Media and detailsimageUrls; detailed output can also include description and equipment
TraceabilitysourceSearchUrl, scrapedAt, and non-fatal parseWarnings

changeType is unknown unless a monitoring key is supplied. With a monitoring key, an item is marked new, price_changed, or unchanged against the last successful run using that same key.

When to use it

Use this actor when you have a Mobile.de search link that already expresses the make, model, region, price, year, mileage, seller type, or fuel filters you need. It is suited to inventory exports, regional price benchmarking, competitor dealer monitoring, and short scheduled reports.

Do not use it for private Mobile.de account data, login-only actions, finance approval, vehicle-history reports, VIN decoding, or removed-listing detection. The actor only returns public page data. For a broader lead-generation workflow, pair the resulting dealer names with a separate public-business contact enrichment actor.

Input

dataSource defaults to browser, which uses a public Mobile.de search or listing URL. The actor does not silently switch modes when a public page is blocked.

Use officialApi only when the actor owner has a Mobile.de Search API account that is authorized for this use case and downstream data handling. It accepts only https://services.mobile.de/search-api/search?... and https://services.mobile.de/search-api/ad/{ad-id} URLs. Configure MOBILE_DE_API_USERNAME and MOBILE_DE_API_PASSWORD as owner-controlled environment secrets; never place credentials in actor input. The API response is requested as Mobile.de's documented JSON format, and direct-ad API calls enrich search results when includeDetails is enabled.

startUrls is required. In browser mode, paste a Mobile.de vehicle search or a direct public listing URL. Build the desired filters on Mobile.de first, copy the resulting URL, and keep the URL in the input. This deliberately avoids recreating Mobile.de's large and frequently changing filter vocabulary inside the actor.

maxResults caps the number of dataset rows and listing events. It defaults to 25 and is limited to 500. A cap is applied before every billable listing write.

includeDetails defaults to true. It opens each result's public detail page for richer description, equipment, images, and seller fields. Set it to false for a faster core listing export.

responseFormat defaults to concise, which limits media to the primary image and omits long descriptions and equipment. Choose detailed when those public fields are useful downstream. Core vehicle, price, seller, and monitoring fields remain available in both formats.

For scheduled monitoring, set a stable monitoringKey such as berlin-bmw-inventory. Reuse the same key and search URL on later runs. Set changesOnly to true only after an initial baseline run to return new or price-changed listings rather than the full current result set.

Example input

{
"startUrls": [
{
"url": "https://suchen.mobile.de/auto/gebrauchtwagen.html"
}
],
"maxResults": 25,
"includeDetails": true,
"responseFormat": "concise",
"monitoringKey": "berlin-bmw-inventory",
"changesOnly": false,
"proxyCountry": "DE"
}

Official API input

This mode is available only after the actor owner configures authorized credentials and confirms the Mobile.de agreement permits the intended data use. It does not use residential proxies.

{
"dataSource": "officialApi",
"startUrls": [
{
"url": "https://services.mobile.de/search-api/search?classification=refdata/classes/Car&country=DE"
}
],
"maxResults": 25,
"includeDetails": true,
"responseFormat": "concise"
}

Example output

{
"listingId": "1001",
"listingUrl": "https://suchen.mobile.de/fahrzeuge/details.html?id=1001",
"title": "BMW 320d Touring",
"make": "BMW",
"model": "320d Touring",
"priceEur": 23490,
"currency": "EUR",
"firstRegistration": "03/2021",
"mileageKm": 71200,
"fuelType": "Diesel",
"transmission": "Automatic",
"powerKw": 140,
"location": "10115 Berlin",
"sellerName": "Example Autohaus GmbH",
"imageUrls": ["https://images.example.test/car.jpg"],
"changeType": "price_changed",
"previousPriceEur": 24990,
"sourceSearchUrl": "https://suchen.mobile.de/auto/gebrauchtwagen.html",
"scrapedAt": "2026-07-14T12:00:00.000Z",
"parseWarnings": []
}

API examples

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('khadinakbar/mobile-de-scraper').call({
startUrls: [{ url: 'https://suchen.mobile.de/auto/gebrauchtwagen.html' }],
maxResults: 25,
monitoringKey: 'berlin-bmw-inventory',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python:

from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("khadinakbar/mobile-de-scraper").call(run_input={
"startUrls": [{"url": "https://suchen.mobile.de/auto/gebrauchtwagen.html"}],
"maxResults": 25,
"includeDetails": True,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items

Pricing

This actor uses Pay per event + usage. Event charges are shown before work begins; Apify compute and browser-mode residential proxy usage are additional. Official API provider charges, if any, require an authorized owner agreement and are not exposed in actor input.

EventPriceWhen charged
Actor start$0.00005Once per GB of configured actor memory (default 4 GB: $0.00020)
Vehicle listing returned$0.0018For each validated row written to the dataset
Vehicle details enriched$0.0009Only after a requested detail page was fetched successfully

A 25-result concise run has at most $0.04505 in event charges. A 25-result detailed run has at most $0.06755 in event charges, plus Apify platform usage. Valid empty searches and invalid inputs do not create listing events.

Reliability and limits

Mobile.de uses anti-bot controls. Browser mode uses Camoufox with a consistent German residential browser session, low page pacing, and fresh sessions after a detected challenge. It checks the public Mobile.de homepage before collecting listings; if that canary is challenged, the run reports UPSTREAM_FAILED rather than silently returning an empty dataset. Official API mode is credential-gated, does not use the browser route, and returns CONFIG_ERROR rather than falling back if credentials are absent.

Every run writes OUTPUT and RUN_SUMMARY in the default key-value store. OUTPUT gives the stable outcome (COMPLETE, PARTIAL, VALID_EMPTY, INVALID_INPUT, UPSTREAM_FAILED, or CONFIG_ERROR); RUN_SUMMARY adds page, retry, warning, and event-count diagnostics. Useful results are retained as PARTIAL if one source or detail page fails. Dataset rows are Zod-validated before being persisted and billed.

The target's page markup and anti-bot behavior can change. If a URL returns a challenge, retry later with a smaller URL list. If a listing is present but a field is not public, its field is null rather than inferred.

Use this actor only for lawful collection and processing of public data. You are responsible for checking Mobile.de terms, applicable data-protection requirements, and any restrictions that apply to your country, use case, or downstream sharing. Do not use public seller data for unlawful profiling, spam, or contact outside a lawful basis.

FAQ

Why use a URL instead of separate make and model fields? Mobile.de has many interdependent regional and vehicle filters. A copied search URL preserves exactly the filter set you verified in the Mobile.de interface.

Why did I get no records? A valid search may genuinely have no matches, in which case the run ends as VALID_EMPTY. If the actor was challenged before a usable page was loaded, it ends as UPSTREAM_FAILED with a retry recommendation in RUN_SUMMARY.

Can I use the official API mode without an account? No. It requires an authorized Mobile.de Search API account configured by the actor owner, and the applicable agreement must permit the intended collection and downstream sharing.

Can I monitor removed listings? Not currently. changesOnly identifies new and price-changed listings visible in consecutive runs, but search result pagination and regional availability make disappearance unreliable as a removal signal.

Can an AI agent use this actor? Yes. Its concise default output, predictable cap, and declared dataset fields are designed for hosted Apify MCP and API consumers. Use a search or listing URL, not an unbounded free-text prompt.