DEV Community

Devil Scrapes
Devil Scrapes

Posted on

How to Scrape AutoScout24.de Car Listings (Germany) to JSON/CSV

Quick answer: AutoScout24.de publishes no public API. Use the AutoScout24 Germany Car Scraper on Apify to extract make, model, version, price in EUR, mileage, first registration, fuel type, transmission, power, body type, colour, dealer name and phone, geo-coordinates, and photos from any AutoScout24 search β€” no account needed. Results land in a clean JSON or CSV dataset within minutes.

Germany is the largest used-car market in the European Union by volume, and AutoScout24.de is where the bulk of that inventory lives. The platform carries hundreds of thousands of active listings from dealers and private sellers across every German postcode. If you need structured pricing data for the German market β€” for competitive intelligence, depreciation modelling, dealer lead generation, or cross-border arbitrage with Austria or Poland β€” AutoScout24 is the source. And it offers no public API.

Does AutoScout24.de have an API? πŸ”Ž

No. AutoScout24 does not offer a public data API. The platform serves its listing data through a Next.js frontend that embeds structured JSON in __NEXT_DATA__ script tags β€” a richer extraction target than raw HTML, but still behind active bot defences. AutoScout24 fingerprints TLS handshakes, monitors request rates, and returns degraded or blocked responses to traffic it identifies as non-browser.

We handle this. The Actor uses curl-cffi to impersonate real Chrome, Firefox, and Safari TLS handshakes β€” the site sees a browser, not Python. Every request routes through Apify's residential proxy pool, with a fresh session_id and exit IP on every block. Retries use exponential backoff with a 30-second cap and honour Retry-After headers. The __NEXT_DATA__ payload is parsed directly, giving structured data without fragile CSS selectors.

What data does the scraper return? πŸ“€

One row per listing, validated by the ResultRow Pydantic model before it touches your dataset. AutoScout24's data model is notably rich β€” it includes model version/trim, postal code, geo-coordinates, and dealer phone number:

{
  "listing_id": "a15406b4-db66-4cb0-8e5d-1b74d162144a",
  "listing_url": "https://www.autoscout24.de/angebote/opel-corsa-d-1-4-color-edition-einparkhilfe-export-benzin-weiss-cat_ma54mo1918-a15406b4-db66-4cb0-8e5d-1b74d162144a",
  "title": "Opel Corsa D 1.4 Color Edition Einparkhilfe EXPORT",
  "make": "Opel",
  "model": "Corsa",
  "version": "D 1.4 Color Edition Einparkhilfe EXPORT",
  "year": 2013,
  "price": 3490,
  "currency": "EUR",
  "mileage_km": 101125,
  "fuel_type": "Benzin",
  "transmission": "Schaltgetriebe",
  "engine_power_hp": 101,
  "engine_power_kw": 74,
  "engine_size_cc": 1398,
  "body_type": "Limousine",
  "color": "Weiß",
  "first_registration": "07/2013",
  "location": "Bad DΓΌrkheim",
  "postcode": "67098",
  "latitude": 49.46323,
  "longitude": 8.18632,
  "seller_type": "dealer",
  "seller_name": "Autohaus SchlΓ€fer GmbH",
  "seller_phone": "+49 (0)6322 - 943344",
  "photo_urls": [
    "https://prod.pictures.autoscout24.net/listing-images/a15406b4-..._...jpg/1280x960.webp"
  ],
  "description": null,
  "posted_date": "2026-06-01T12:21:47.636Z",
  "scraped_at": "2026-06-02T10:00:00+00:00"
}
Enter fullscreen mode Exit fullscreen mode

Full field list: listing_id, listing_url, title, make, model, version, year, price, currency, mileage_km, fuel_type, transmission, engine_power_hp, engine_power_kw, engine_size_cc, body_type, color, first_registration, location, postcode, latitude, longitude, seller_type, seller_name, seller_phone, photo_urls, description, posted_date, scraped_at.

Notable extras compared to other EU marketplaces: version captures the trim line (e.g. "D 1.4 Color Edition"), postcode gives German PLZ for postcode-level geographic analysis, and latitude/longitude (enrichment-only) enable map-based dealer clustering. seller_phone is available when the dealer publishes it β€” useful for building a German dealer directory.

Enable enrichDetails for full description, body type, colour, engine displacement, geo-coordinates, and full-resolution photos. Disable it to halve requests when the search-page fields are sufficient.

How to run it with Python 🐍

Install the Apify client:

pip install apify-client
Enter fullscreen mode Exit fullscreen mode

Pass a make/model filter, or paste any AutoScout24 search URL with your filters pre-applied:

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("DevilScrapes/autoscout24-germany-cars").call(
    run_input={
        "make": "volkswagen",
        "model": "golf",
        "maxResults": 100,
        "enrichDetails": True,
        "proxyConfiguration": {
            "useApifyProxy": True,
            "apifyProxyGroups": ["RESIDENTIAL"]
        }
    }
)

items = list(
    client.dataset(run["defaultDatasetId"]).iterate_items()
)

print(f"Scraped {len(items)} listings")
for item in items[:3]:
    print(
        item["make"], item["model"], item.get("version"),
        item["year"], item["price"], "EUR",
        item.get("mileage_km"), "km",
        item.get("seller_name")
    )
Enter fullscreen mode Exit fullscreen mode

For complex filters β€” price range, year band, fuel type, body type, radius from a city β€” build the search on autoscout24.de and paste the resulting URL into searchUrl instead of using the make/model shortcuts.

What can you build with German used-car data? πŸ’‘

Price analytics for the EU's largest market. Germany sets pricing benchmarks for the broader EU secondhand market. Tracking asking prices by make, model, year, and trim on AutoScout24.de gives you the most liquid price signal in continental Europe.

Dealer lead generation. seller_type == "dealer" combined with seller_name, seller_phone, location, and postcode gives you a structured directory of German car dealers, partitioned by geography. The latitude/longitude fields enable radius-based filtering in post-processing.

Depreciation modelling. Pair price, mileage_km, first_registration, and year for a model series (e.g. all Volkswagen Golf VII variants) to fit depreciation curves. AutoScout24's depth of inventory β€” particularly for German mainstream brands β€” makes curve-fitting statistically robust.

Cross-border arbitrage. Germany's large dealer network means well-specified cars are often priced lower there than in adjacent markets (Austria, Netherlands, Poland). Comparing AutoScout24.de prices against local equivalents β€” accounting for re-registration costs β€” is a standard workflow for professional car importers.

Inventory monitoring. Run the Actor daily filtered to a specific dealer (by seller_name or a dealer's profile URL as searchUrl). Diff listing_id sets between runs to catch new stock arrivals and price reductions.

How much does it cost? πŸ’°

Pay-Per-Event pricing β€” charges fire only when results land in your dataset:

Event Price
actor-start (once per run) $0.05
result-row (per listing) $0.002

1,000 listings costs $2.05 ($0.05 start + 1,000 Γ— $0.002). No results, no result-row charges. New Apify accounts receive $5 of free credit; no credit card required to start.

FAQ ❓

Is scraping AutoScout24.de legal?

The Actor accesses only data visible to any anonymous visitor without logging in. AutoScout24 has no public API, so web access is the only route. The legality of web scraping varies by jurisdiction; consult legal counsel before commercial use. See the Terms of Service notice on the Store listing.

AutoScout24 caps search results at ~400 pages β€” how do I get more data?

AutoScout24's own search UI caps any query at approximately 400 pages (roughly 8,000 results). To collect larger datasets, split your target into narrower filter slices β€” by year range, price band, body type, or German state (Bundesland) β€” and run the Actor once per slice.

What does detail enrichment add?

With enrichDetails: true, the Actor fetches each listing's detail page to add: description, body_type, color, engine_size_cc, latitude, longitude, and full-resolution photo_urls. Without enrichment you still get make, model, version, year, price, mileage, fuel, transmission, power, location, postcode, seller name, phone, and a photo from the search payload.

What if AutoScout24 blocks a request?

We rotate TLS fingerprints across Chrome, Firefox, and Safari profiles, rotate residential proxy exits, and retry with exponential backoff. If a page fails after 5 attempts, the run fails loudly with a clear status message β€” you see exactly what happened, not a silent empty dataset.

Are prices inclusive of VAT?

AutoScout24 displays the asking price as listed by the dealer or private seller. For dealer listings this is typically the gross (VAT-inclusive) price; for exports it may be marked as net. The version field often carries clues (e.g. "EXPORT" in the title). We return the price exactly as shown β€” no VAT adjustment.

Get started

The AutoScout24 Germany Car Scraper is live on the Apify Store. Try it free β€” $5 of Apify starter credit, no credit card, and results in minutes.

Store link: https://apify.com/DevilScrapes/autoscout24-germany-cars


Built by Devil Scrapes β€” a fleet of opinionated public-data Actors. Honest pricing, real engineering, zero fine print.

Further reading:

Top comments (0)