Mobile.de Scraper — Vehicle Inventory Monitor
Pricing
from $1.80 / 1,000 vehicle listing returneds
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
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
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 group | Included fields |
|---|---|
| Vehicle | listingId, listingUrl, title, make, model, firstRegistration, mileageKm, fuelType, transmission, powerKw, bodyType |
| Price | priceEur, currency, changeType, previousPriceEur |
| Seller and place | location, postalCode, sellerName, sellerType, plus a public phone only when detailed output exposes one |
| Media and details | imageUrls; detailed output can also include description and equipment |
| Traceability | sourceSearchUrl, 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 ApifyClientclient = 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.
| Event | Price | When charged |
|---|---|---|
| Actor start | $0.00005 | Once per GB of configured actor memory (default 4 GB: $0.00020) |
| Vehicle listing returned | $0.0018 | For each validated row written to the dataset |
| Vehicle details enriched | $0.0009 | Only 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.
Legal and responsible use
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.