← Blog

Cars

AutoScout24 Scraper: Used Car Prices, Price History and Alerts

Scrape AutoScout24 in 9 countries: listings, full price history, market price ratings and alerts for new cars, price drops and sold cars, with API code.

Epic Scrapers

AutoScout24 is the largest used car marketplace in Europe, with about 2.2 million vehicles across its EU sites and a separate Swiss platform on top. For dealers, flippers and analysts it holds the best public used car price data on the continent. The problem is access: AutoScout24 shows at most 4,000 results per search, there’s no public API for listing data, and the most valuable numbers (past prices, the market price estimate, how many people saved a car) aren’t in any export.

The AutoScout24 Scraper solves all three. It turns any search, dealer page or set of filters into a dataset, splits big searches automatically to get past the 4,000 cap, and adds AutoScout24’s own price history and market price to every listing. It also has a monitoring mode that sends you only new listings, price changes and sold cars.

What data you get from AutoScout24

Every row is one vehicle listing with 80+ fields. The ones that matter most:

Group Fields
Vehicle make, model, version, mileageKm, firstRegistration, fuel, transmission, powerHp, bodyType, previousOwners, hadAccident, hasFullServiceHistory, equipment
Price price, currency, priceNet, isVatDeductible, isPriceNegotiable
Market marketPrice, priceRating, priceVsMarketPercent, fairPriceMin, fairPriceMax
History priceHistory, originalPrice, totalPriceDrop, priceChangesCount, createdAt, daysOnMarket
Demand favoritesCount, interestLevel
Seller sellerType, sellerName, sellerPhones, dealerRating, dealerWebsite
Location country, postalCode, city, latitude, longitude

Two groups set this apart from a plain listing export.

Price history from the first run. AutoScout24 keeps every price a listing has had, and the scraper reads that history on the first scrape. You don’t need to watch a car for weeks to know it has dropped three times.

AutoScout24’s market price. marketPrice is AutoScout24’s estimate for comparable cars, priceRating is its label (top_price, good_price, fair_price, higher_price, high_price), and priceVsMarketPercent tells you how far the asking price sits above or below the market. Sorting by that one field is the fastest way to find underpriced cars.

Covered countries are Germany, Austria, Belgium, Spain, France, Italy, Luxembourg, the Netherlands (DE, AT, BE, ES, FR, IT, LU, NL) and Switzerland (CH). Switzerland runs on a separate platform: prices are in CHF and it doesn’t publish price history, market price or favourites, so those fields stay empty for Swiss rows.

How to scrape AutoScout24 without code

  1. Open the AutoScout24 Scraper and click Try for free.
  2. Either paste URLs into AutoScout24 URLs (startUrls), or leave that empty and use the filters (make, model, countries, priceMax and so on).
  3. Set Max listings per search (maxItems). Use 50 for a test; 0 means every listing, with automatic splitting past 4,000.
  4. Click Start and export from the Output tab. The dataset has views for Overview, Deals & price history, Monitoring changes and Sellers & contacts.

Option A: paste a search URL

Set filters and sort on any AutoScout24 site, then copy the URL. The scraper keeps them all:

{
    "startUrls": [{ "url": "https://www.autoscout24.de/lst/bmw/3er?fregfrom=2018&priceto=30000&sort=age&desc=1" }],
    "maxItems": 50
}

Dealer pages (/haendler/..., /dealerinfo/...) return the dealer’s whole stock, and single listing pages (/angebote/..., /offers/...) work too.

Option B: use the built-in filters

Without URLs, you can search across several countries in one run. This pulls every Volkswagen Golf listed in Germany, all 29,000+ of them:

{
    "make": "Volkswagen",
    "model": "Golf",
    "countries": ["DE"],
    "maxItems": 0
}

Other filters: vehicleType (car, motorbike, van, caravan), yearMin / yearMax, mileageMax, fuelTypes (such as diesel, electric, hybrid_gasoline), gearbox (automatic, manual, semi_automatic), condition, sellerType (dealer, private) and postalCode with radiusKm. Results can be sorted with sort: newest, price_asc, price_desc, mileage_asc, year_desc, power_desc, standard, or keep to use the URL’s own sort.

To keep rows small for spreadsheets or AI tools, set compact to true (about 25 core fields) and descriptionMaxLength to something like 300.

Sample output

A trimmed row with its price history:

{
    "id": "e8045477-b1dc-4c40-866d-235451553990",
    "title": "BMW 116 d TÜV/Xenon/Klimaaut/Alu/8-fach bereift",
    "make": "BMW",
    "model": "116",
    "price": 1000,
    "currency": "EUR",
    "marketPrice": 2500,
    "priceVsMarketPercent": -60,
    "fairPriceMin": 2501,
    "fairPriceMax": 2900,
    "originalPrice": 1200,
    "totalPriceDrop": 200,
    "priceChangesCount": 3,
    "priceHistory": [
        { "date": "2026-09-30T12:29:25.183Z", "price": 1200 },
        { "date": "2026-09-30T12:32:13.474Z", "price": 1150 },
        { "date": "2026-10-02T08:28:00.672Z", "price": 1100 },
        { "date": "2026-10-02T11:22:45.922Z", "price": 1000 }
    ],
    "mileageKm": 327000,
    "firstRegistration": "2011-03",
    "fuel": "Diesel",
    "powerHp": 116,
    "country": "DE",
    "city": "Triptis",
    "sellerType": "dealer",
    "daysOnMarket": 2,
    "interestLevel": "none",
    "scrapedAt": "2026-10-02T13:20:41.317Z"
}

priceRating is null when AutoScout24 doesn’t rate a price, for example when there aren’t enough comparable cars.

AutoScout24 price alerts: new cars, price drops and sold cars

Monitoring mode turns the scraper into an alert system. Set sort to newest, turn on onlyNewOrChanged, and give the monitor a name in monitorKey:

{
    "startUrls": [{ "url": "https://www.autoscout24.de/lst/bmw/3er?zip=80331&zipr=50" }],
    "sort": "newest",
    "maxItems": 200,
    "onlyNewOrChanged": true,
    "monitorKey": "bmw-3er-munich"
}

The first run learns the current listings. Every later run reads only the newest pages until it hits cars it has already seen, re-checks older ones, and saves just the changes, each with a changeType:

changeType Meaning
new Appeared since the last run
price_drop / price_increase With previousPrice, priceChange and priceChangePercent
removed Taken down, usually sold, with the last known price
reappeared A removed listing back online

It also catches reposts: when a seller deletes a car and lists it again under a new ID to reset its days on market, the new row gets isRepost: true and repostOfId. Turn on skipReposts if you only want genuinely new cars. You pay only for saved change rows; re-checks of unchanged listings are free.

Save the input as a task, schedule it every 10 minutes (*/10 * * * *) for hot searches or daily for a dealer’s stock, and add a Slack, email or webhook integration. Since the dataset only holds changes, every message is news. The same alert pattern is covered for fashion resale in our Vinted new listing alerts guide.

Use the AutoScout24 API from your code

The run-sync endpoint starts a run and returns the dataset in one call:

curl -X POST "https://api.apify.com/v2/acts/epicscrapers~autoscout24-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"countries": ["FR", "BE"], "fuelTypes": ["electric"], "sort": "price_asc", "maxItems": 100, "compact": true}'

In JavaScript with apify-client, finding private-seller cars priced well under market:

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const run = await client.actor('epicscrapers/autoscout24-scraper').call({
    countries: ['DE', 'AT'],
    sellerType: 'private',
    priceMax: 15000,
    sort: 'newest',
    maxItems: 1000,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();

const deals = items
    .filter((car) => car.priceVsMarketPercent !== null && car.priceVsMarketPercent <= -15)
    .sort((a, b) => a.priceVsMarketPercent - b.priceVsMarketPercent);

for (const car of deals.slice(0, 20)) {
    console.log(car.priceVsMarketPercent, car.price, car.mileageKm, car.title, car.url);
}

Use cases

Car flippers and traders. Filter to priceRating = top_price or sort by priceVsMarketPercent, then check totalPriceDrop and daysOnMarket to find motivated sellers. Run it on a 10-minute schedule so you see underpriced cars before anyone else.

Dealers. Monitor a competitor’s dealer page daily. removed rows tell you what they sold, daysOnMarket on those rows how fast, and price_drop rows how aggressively they reprice.

Used car price data for Europe. Without the 4,000 cap you can pull a whole model across countries and compare median price and marketPrice by firstRegistrationYear. Cross-border buyers can include CH to compare against Switzerland in CHF.

Valuation and analytics. Price history, mileage, equipment and AutoScout24’s own fair-price band make a solid training set for a valuation model or a pricing dashboard.

Lead generation. Dealer names, ratings, websites and phone numbers are in sellerName, dealerRating, dealerWebsite and sellerPhones.

Private sellers also list cars on German classifieds; see our Kleinanzeigen scraper guide for that side of the market.

FAQ

Is there an official AutoScout24 API?

AutoScout24 offers interfaces for dealers to upload and manage their own stock, not a public API for searching listings or reading market prices. The scraper needs no account, API key or cookies.

How does it get past the 4,000-result limit?

It counts results per price range (and per mileage range where needed) and splits the search into parts of at most 4,000, which add up to the full total. The run’s SUMMARY record shows the split.

Where does the price history come from?

From AutoScout24 itself, which stores every price a listing has had. On autoscout24.ch only the previous price is available.

The scraper collects listing data AutoScout24 shows publicly. Seller names and phone numbers can be personal data, so use them lawfully under GDPR and respect AutoScout24’s terms. This isn’t legal advice.

How much does it cost?

Pay per listing saved, with no subscription and platform usage included. In monitoring mode you pay only for change rows. See the Pricing tab for current rates.

Get started

Paste the AutoScout24 search you check most often into the AutoScout24 Scraper, run it with maxItems at 50, and sort the result by priceVsMarketPercent. If you like what you see, switch on onlyNewOrChanged, put it on a schedule, and let the alerts come to you. More details are on the actor page.