# Scraping AutoScout24: How to Extract Car Listings Without Getting Blocked > Source: https://scrape.do/blog/autoscout24-scraping/ Published: 2025-02-06 · Updated: 2025-02-06 · Authors: Onur Mese · Categories: Scraping Use Cases As of **February 2025**, AutoScout24 hosts **over 150,000 car listings** and partners with **43,000+ dealerships**, making it one of the most valuable platforms for vehicle pricing and market analysis in Europe. Whether you're tracking **price trends, comparing offers, or analyzing dealership data**, scraping AutoScout24 can unlock **huge business opportunities**. And **if you’ve tried scraping AutoScout24**, you’ve probably hit a wall. The site actively prevents automated data collection using **Akamai bot protection and IP-based restrictions**, making traditional scraping techniques ineffective. That doesn’t mean it’s impossible. With the right approach, **you can bypass these roadblocks and access the data you need without getting blocked**. In this guide, we’ll break down **why AutoScout24 is difficult to scrape, what protections it uses, and how to extract car listings efficiently using Scrape.do**. [Access full code here ⚙](https://github.com/scrape-do/scrapedo-scrapers/tree/main/autoscout24-scraper) ## Why Scraping AutoScout24 Is Difficult AutoScout24 has implemented **multiple layers of security** to prevent automated data extraction. These protections make traditional scraping techniques unreliable and often result in blocked requests. ### 1\. Akamai Bot Protection AutoScout24 relies on **Akamai’s bot detection system**, which is designed to identify and block scrapers before they can access valuable data. * It uses **browser fingerprinting** to detect non-human requests. * **JavaScript challenges** verify if a page is being accessed by a real user. * **Behavior tracking** monitors scrolling, mouse movements, and interactions. If your scraper doesn’t mimic real user behavior, it will likely be blocked within a few requests. ### 2\. IP-Based Restrictions AutoScout24 tracks IP addresses to detect suspicious activity and enforce geo-restrictions. * Requests from **datacenter proxies** are often blocked immediately. * **High-frequency requests** from the same IP trigger rate limits. * Some listings are **region-locked**, meaning certain data is only accessible from specific countries. These security measures make it difficult to scrape AutoScout24 using **basic requests or simple proxy rotation**. ## How Scrape.do Bypasses These Challenges Scrape.do is designed to handle **Akamai bot detection, IP tracking, and geo-restrictions**, allowing uninterrupted access to AutoScout24’s listings. ### Akamai Bypass AutoScout24’s **bot protection relies on browser fingerprinting, behavior tracking, and JavaScript challenges**. Scrape.do automatically handles these by: ✅ **Executing JavaScript** to pass browser verification.
✅ **Mimicking real user behavior** by rotating headers, cookies, and TLS fingerprints.
✅ **Preventing detection** by dynamically adjusting request timing and patterns. ### Geo-Targeted IPs AutoScout24 enforces **region-based access** and blocks requests from datacenter proxies. Scrape.do ensures access by: ✅ **Routing requests through Switzerland-based residential and ISP proxies.**
✅ **Maintaining session persistence** to avoid tracking inconsistencies.
✅ **Bypassing rate limits** with smart request pacing. With these optimizations, Scrape.do ensures smooth, **unblocked access to AutoScout24’s data** even at scale. ## Extracting Data from AutoScout24 Without Getting Blocked Now that we have bypassed AutoScout24’s protections, we’ll extract the **car name and price** from a real listing. ### Prerequisites Before making any requests, install the necessary dependencies if you haven’t already. We’ll be using `requests` to send HTTP requests and `BeautifulSoup` to parse the HTML. Install them using: ```bash pip install requests beautifulsoup4 ``` You’ll also need an **API key from Scrape.do**, which you can get by [signing up at Scrape.do](https://dashboard.scrape.do/sign-up) **for free**. Next, we need a target page to scrape. For this guide, we'll be working with a listing for the perhaps most classic sportscar, Porsche 911 Coupé 3.8 Turbo PDK. ![extract car prices from autoscout24](/uploads/blog/autoscout24-porsche-data-extraction_hu0e205d71c0fdd0630e09c7b2146a6238_451519_1200x0_resize_q80_h2_box_3.webp) ### Sending a Request and Verifying Access First, we’ll send a request through Scrape.do to ensure we can access the page without getting blocked. If successful, we should receive a **200 OK** response, confirming that we’ve bypassed AutoScout24’s protections. ```python import requests import urllib.parse # Our token provided by Scrape.do token = "" # Target AutoScout24 listing URL target_url = urllib.parse.quote_plus("https://www.autoscout24.ch/de/d/porsche-911-coupe-38-turbo-pdk-12188643") # Optional parameters render = "true" geo_code = "ch" # Scrape.do API endpoint url = f"https://api.scrape.do/?token={token}&url={target_url}&geoCode={geo_code}&render={render}" # Send the request response = requests.request("GET", url) # Print response status print(response) ``` **Expected Output:** ```yaml ``` If the request is successful, we can move on to extracting the **car name**. 💡 If you're not getting **200 OK**, try adding `&super=true` paramater to the end of your Scrape.do API call, which will enable residential and mobile proxies that can usually bypass any WAF with ease but will cost more credits. ### Extracting the Car Name Now that we have confirmed access to the page, we can extract the **car name** from the listing. The product name is stored inside an `

` tag, making it easy to locate and extract using `BeautifulSoup`. ```python from bs4 import BeautifulSoup import requests import urllib.parse # Our token provided by Scrape.do token = "" # Target AutoScout24 listing URL target_url = urllib.parse.quote_plus("https://www.autoscout24.ch/de/d/porsche-911-coupe-38-turbo-pdk-12188643") # Optional parameters render = "true" geo_code = "ch" # Scrape.do API endpoint url = f"https://api.scrape.do/?token={token}&url={target_url}&geoCode={geo_code}&render={render}" # Send the request response = requests.request("GET", url) # Parse the response using BeautifulSoup soup = BeautifulSoup(response.text, "html.parser") # Extract car name title = soup.find("h1").text.strip() print("Car Name:", title) ``` **Expected Output:** ```yaml Car Name: PORSCHE 911 Coupé 3.8 Turbo PDK ``` By targeting the **first `

` tag**, we efficiently extract the car model name without needing to specify class attributes. ### Extracting the Car Price With the **car name** successfully extracted, the next step is to retrieve the **listing price,** which is the most important information on this page. Initially, I've attempted to locate the price using a specific `

` tag with a predefined class. However, AutoScout24 dynamically assigns class names, which can change over time, making class-based extraction unreliable. Instead, I've taken a **more flexible approach** by searching for the price text directly. Since all car prices on AutoScout24 include **"CHF" followed by a number**, we can use **regular expressions (re module)** to locate and extract it anywhere in the page content. ```python from bs4 import BeautifulSoup import requests import urllib.parse import re # Our token provided by Scrape.do token = "" # Target AutoScout24 listing URL target_url = urllib.parse.quote_plus("https://www.autoscout24.ch/de/d/porsche-911-coupe-38-turbo-pdk-12188643") # Optional parameters render = "true" geo_code = "ch" # Scrape.do API endpoint url = f"https://api.scrape.do/?token={token}&url={target_url}&geoCode={geo_code}&render={render}" # Send the request response = requests.request("GET", url) # Parse the response using BeautifulSoup soup = BeautifulSoup(response.text, "html.parser") # Extract car name title = soup.find("h1").text.strip() # Search for the first occurrence of "CHF" followed by a number match = re.search(r"CHF\s([\d'.,]+)", soup.get_text()) # Extract and clean the price if found price = match.group(0).replace("\xa0", " ") if match else "Price not found" print("Car Name:", title) print("Car Price:", price) ``` ***Why does this work?*** ✅ **Avoids dependency on class names** that might change dynamically.
✅ **Searches the entire page text**, ensuring the price is found even if the structure varies.
✅ **Uses regular expressions (`re`)** to precisely extract numbers that follow "CHF". *And here's the expected output:* ```yaml Car Name: PORSCHE 911 Coupé 3.8 Turbo PDK Car Price: CHF 106,890.- ``` This approach ensures that **even if AutoScout24 updates its HTML structure, the price extraction will continue working reliably**. ## Conclusion Scraping AutoScout24 is difficult due to **Akamai bot protection and dynamic HTML structures**, which block traditional scrapers and make extracting data unreliable. We successfully extracted the **car name and price** by bypassing these obstacles with Scrape.do. Instead of relying on unstable class names, we used **regular expressions** to locate the price anywhere on the page, ensuring a more flexible and robust approach. If you need to scrape AutoScout24 without getting blocked, **Scrape.do makes it simple**. [Get **1000 free API calls** and start now.](https://scrape.do) 🚀