Nimbryxo Studio

Use AutoScout24 Car Search Across 9 European Markets with Python

Search AutoScout24 car listings across nine European countries by make, price, mileage, fuel type and body type, or fetch full detail records for specific listing URLs.

1. Choose the data you need

Review the published README for supported collection modes, examples, and limits. The recipe below uses the current published input definition.

2. Prepare a source-based input

This JSON contains published prefills and required-field defaults. Review every value for your task before running it; it is not a promise of successful collection.

{
  "country": "de",
  "includeDetails": false,
  "includeSellerProfile": false,
  "make": "BMW",
  "maxItems": 3,
  "mode": "searchCars",
  "powerUnit": "kw",
  "vatDeductibleOnly": false
}

Download input.example.json and save your reviewed copy as input.json.

FieldTypeRequiredDescription
modestringrequiredWhat to do: search by filters, fetch listing URLs, replay search URLs, read dealer inventory, or resolve listing IDs.
makestringoptionalCar brand/manufacturer to filter by (e.g. BMW, Mercedes-Benz, Volkswagen, Audi, Toyota).
modelstringoptionalModel name to filter (e.g. 3 Series, Golf, A4). Leave empty for all models.
searchQuerystringoptionalFree-text keyword applied to the search (e.g. panoramic, quattro).
yearFromintegeroptionalMinimum first registration year (1900-2026).
yearTointegeroptionalMaximum first registration year (1900-2026).
priceFromintegeroptionalMinimum price in the selected market's currency (EUR everywhere except Switzerland, which uses CHF).
priceTointegeroptionalMaximum price in the selected market's currency.
mileageMaxintegeroptionalMaximum mileage in kilometres.
fuelTypestringoptionalFuel type filter. 'hybrid' matches all hybrid and plug-in hybrid listings.
transmissionstringoptionalTransmission type filter.
countrystringoptionalMarket to search. 'all' loops the 8 HTML markets plus Switzerland. '.com' is URL-only and is not part of 'all'.
conditionstringoptionalVehicle condition. N=new, U=used, J=young used, O=oldtimer, D=demonstrator, S=other. Sent as `offer`, never `ustate`.
bodyTypestringoptionalVehicle body type filter.
vehicleTypestringoptionalVehicle category. HTML sends `atype` (C/B/N/X) and uses `/lst-moto`, `/lst-caravan` or `/lst-transporter` for motorcycles, campers and utility vehicles; Switzerland sends the plural `vehicleCategories` field with car/motorcycle/camper/utility/truck.
drivetrainstringoptionalDrivetrain filter (HTML `dtrain`, CH equivalent).
bodyColorstringoptionalExterior colour filter.
interiorColorstringoptionalInterior colour filter.
upholsterystringoptionalInterior upholstery filter.
equipmentarrayoptionalAutoScout24 equipment taxonomy IDs passed as `eq` (HTML) or `equipmentSearchAttributes` (CH).
emissionStandardstringoptionalEmission standard code 1-11 (HTML `emclass`).
previousOwnersMaxstringoptionalMaximum previous owners (HTML `prevownersid`).
listedWithinDaysstringoptionalOnly listings created within this many days (HTML `adage`).
powerFromintegeroptionalMinimum engine power in the unit set by Power Unit. HP is converted to kW before the request.
powerTointegeroptionalMaximum engine power in the unit set by Power Unit. HP is converted to kW before the request.
powerUnitstringoptionalUnit for Power From / Power To. Bounds are always sent to AutoScout24 in kW.
doorsFromintegeroptionalMinimum number of doors.
doorsTointegeroptionalMaximum number of doors.
seatsFromintegeroptionalMinimum number of seats.
seatsTointegeroptionalMaximum number of seats.
rangeFromKmintegeroptionalMinimum electric range. CH applies it server-side; HTML applies it when a detail record carries a range.
engineSizeFromCcintegeroptionalMinimum engine displacement in cc (HTML `ccmfrom`, CH `cubicCapacityFrom`).
engineSizeToCcintegeroptionalMaximum engine displacement in cc (HTML `ccmto`, CH `cubicCapacityTo`).
vatDeductibleOnlybooleanoptionalOnly VAT-deductible listings (HTML `vatded=true`). CH has no equivalent filter.
damagedListingsstringoptionalWhether to exclude, include, or return only damaged listings.
zipCodestringoptionalPostal code for the radius filter (HTML `zip`; CH geo lookup).
radiusKmstringoptionalRadius around the ZIP/postal code.
sellerTypestringoptionalFilter by dealer or private seller.
sortBystringoptionalResult ordering. `distance` requires zipCode; `power` and `make` are not exposed because they are unreliable or empty.
sortOrderstringoptionalAscending or descending.
startPageintegeroptionalFirst result page (1-based, 200 listings per page).
endPageintegeroptionalLast result page (inclusive). Clamped to the server's maximum page.
listingUrlsarrayoptionalAutoScout24 detail URLs (absolute or market-relative) to fetch details for.
searchUrlsarrayoptionalAutoScout24 search URLs. Their filters are parsed and replayed; page/size/tracking params are dropped. A user-supplied `cy` on a `.com` URL is preserved because it selects the real country feed there; `/lst-moto` paths switch to motorcycles.
dealerUrlsarrayoptionalAutoScout24 dealer/stock URLs. The actor reads the dealer page and, when possible, follows its stock search.
dealerIdsarrayoptionalHTML dealer customer IDs (cid) or Swiss seller IDs. Used by dealerInventory.
listingIdsarrayoptionalUUIDs, Swiss numeric IDs, or full listing URLs.
includeDetailsbooleanoptionalFetch each listing's detail page (or CH detail + equipment) to fill body, colour, doors, seats, equipment, history, VAT, seller, GPS, price evaluation, view/favourite counters, mileage-history URL, Carfax (with partner-integration fallback) and created date. Failures keep the search card.
includeSellerProfilebooleanoptionalFetch the dealer/seller profile once per seller from `dealerInfoPage` for website, email, VAT/UID, phones, address, contact name, opening hours, imprint, ratings and up to 10 reviews. No extra request is made when this option is off; failures do not drop the listing.
maxItemsintegeroptionalMaximum listings to return. Values above the 4,000/query ceiling use year/price slicing; the hard maximum is 10,000. Prefill uses 3 so scheduled checks stay fast.

3. Start an Actor run

Set APIFY_TOKEN in your environment. Python 3.10 or newer is sufficient; this recipe uses no third-party packages.

Execution may incur charges. Review current pricing on Apify. The request asks for a 120-second timeout and a charge limit; these settings are subject to Apify’s pricing and do not guarantee an all-inclusive spending cap.

import json
import os
import urllib.request

# Save the schema-derived example as input.json; review and edit it first.
with open("input.json", encoding="utf-8") as stream:
    actor_input = json.load(stream)

token = os.environ["APIFY_TOKEN"]
request = urllib.request.Request(
    "https://api.apify.com/v2/acts/1K4YT3j4kaybWbN6D/runs?timeout=120&maxTotalChargeUsd=0.50",
    data=json.dumps(actor_input).encode("utf-8"),
    headers={"Authorization": "Bearer " + token, "Content-Type": "application/json"},
    method="POST",
)
# This starts a potentially billable run. Do not automatically retry this POST.
with urllib.request.urlopen(request, timeout=40) as response:
    run = json.load(response)["data"]
print("Run ID:", run["id"])
print("Status:", run["status"])
# Inspect and download results in Apify Console once the run succeeds.

4. Inspect the actual results

Open the run in Apify Console and wait for a successful completion. Use the published output schema to locate results and the dataset schema to understand declared views. Missing or optional record fields must not be treated as guaranteed values.

Car listings from AutoScout24 with identity, vehicle, price, consumption, location, dealer profile (email, VAT/UID, reviews, address, opening hours), EV/charging, engagement counters, media, equipment/history, and enrichment metadata. Fields that the source does not publish are omitted; CHF prices use priceAmount + priceCurrency=CHF and all other markets use EUR.

Questions before you run

Which inputs are required?

The published required fields are mode

What does this guide verify?

The fields, prefills, and schema links are rendered from the published build. This is a usage recipe, not a paid live extraction test. Source availability and collection results can vary.

What if the run request times out?

Check Apify Console before retrying. The first request may already have created a run. Do not automatically repeat a run-creation POST.

Generated from source build 7pM4ZAf08ybOi0aeF and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.