<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Devil Scrapes</title>
    <description>The latest articles on DEV Community by Devil Scrapes (@devil_scrapes).</description>
    <link>https://dev.to/devil_scrapes</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3960872%2Ffa930ad0-5ebc-4ca7-b894-6bc6fb3e2b40.png</url>
      <title>DEV Community: Devil Scrapes</title>
      <link>https://dev.to/devil_scrapes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/devil_scrapes"/>
    <language>en</language>
    <item>
      <title>How to Scrape Mobile.bg Car Listings (Bulgaria) to JSON/CSV</title>
      <dc:creator>Devil Scrapes</dc:creator>
      <pubDate>Sat, 13 Jun 2026 10:33:11 +0000</pubDate>
      <link>https://dev.to/devil_scrapes/how-to-scrape-mobilebg-car-listings-bulgaria-to-jsoncsv-2aj1</link>
      <guid>https://dev.to/devil_scrapes/how-to-scrape-mobilebg-car-listings-bulgaria-to-jsoncsv-2aj1</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; Use the &lt;a href="https://apify.com/DevilScrapes/mobile-bg-bulgaria-cars" rel="noopener noreferrer"&gt;Mobile.bg Bulgaria Car Scraper&lt;/a&gt; on Apify. Paste a filtered Mobile.bg search URL (or leave it empty for the default cars-and-jeeps feed), set &lt;code&gt;maxResults&lt;/code&gt;, and the Actor returns structured rows — price in EUR and BGN, make, model, year, mileage, fuel, gearbox, engine power, body type, colour, and seller — as a JSON or CSV dataset. No API key needed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why scrape Mobile.bg?
&lt;/h2&gt;

&lt;p&gt;Mobile.bg is Bulgaria's largest used-car marketplace and the primary venue for Bulgarian used-car transactions. It carries tens of thousands of listings from private sellers and dealers, priced in both EUR and BGN (Bulgarian lev). Bulgaria is adopting the euro, so the site exposes dual-currency pricing natively — the &lt;code&gt;price&lt;/code&gt; field is in EUR and &lt;code&gt;price_bgn&lt;/code&gt; carries the lev equivalent.&lt;/p&gt;

&lt;p&gt;Mobile.bg publishes no public API. The site is served in Windows-1251 encoding — the Cyrillic character set that predates UTF-8 adoption in Eastern Europe. Getting clean, correctly decoded data out of it requires handling that encoding correctly, matching the browser's TLS fingerprint so the site does not block automated requests, and mapping Bulgarian-language spec labels to standard field names. The Actor handles all of that.&lt;/p&gt;

&lt;h2&gt;
  
  
  What fields does the scraper return? 🔥
&lt;/h2&gt;

&lt;p&gt;Every row maps to the &lt;code&gt;ResultRow&lt;/code&gt; Pydantic model in the Actor source. Here is a realistic sample:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"11772628462288076"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.mobile.bg/obiava-11772628462288076-audi-a3-s-line-s3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Audi A3 S-line S3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"make"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Audi"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"A3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"year"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2010&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7600&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EUR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price_bgn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;14864&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mileage_km"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;255000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"fuel_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Дизелов"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"transmission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Ръчна"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine_power_hp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;140&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine_size_cc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"body_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Хечбек"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Бял"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"first_registration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"октомври 2010"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"гр. Варна"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"region"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"private"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"photo_urls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"//mobistatic1.focus.bg/mobile/photosorg/076/1/11772628462288076_t4.webp"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Audi A3 2.0 TDI ..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"posted_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"НОВА ОБЯВА"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scraped_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-06-02T10:00:00+00:00"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The complete field set is: &lt;code&gt;listing_id&lt;/code&gt;, &lt;code&gt;listing_url&lt;/code&gt;, &lt;code&gt;title&lt;/code&gt;, &lt;code&gt;make&lt;/code&gt;, &lt;code&gt;model&lt;/code&gt;, &lt;code&gt;year&lt;/code&gt;, &lt;code&gt;price&lt;/code&gt;, &lt;code&gt;currency&lt;/code&gt; (always &lt;code&gt;EUR&lt;/code&gt;), &lt;code&gt;price_bgn&lt;/code&gt;, &lt;code&gt;mileage_km&lt;/code&gt;, &lt;code&gt;fuel_type&lt;/code&gt;, &lt;code&gt;transmission&lt;/code&gt;, &lt;code&gt;engine_power_hp&lt;/code&gt;, &lt;code&gt;engine_size_cc&lt;/code&gt;, &lt;code&gt;body_type&lt;/code&gt;, &lt;code&gt;color&lt;/code&gt;, &lt;code&gt;first_registration&lt;/code&gt;, &lt;code&gt;location&lt;/code&gt;, &lt;code&gt;region&lt;/code&gt;, &lt;code&gt;seller_type&lt;/code&gt;, &lt;code&gt;seller_name&lt;/code&gt;, &lt;code&gt;photo_urls&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, &lt;code&gt;posted_date&lt;/code&gt;, and &lt;code&gt;scraped_at&lt;/code&gt;. Fields tagged enrichment-only (&lt;code&gt;location&lt;/code&gt;, &lt;code&gt;region&lt;/code&gt;, &lt;code&gt;seller_type&lt;/code&gt;, &lt;code&gt;seller_name&lt;/code&gt;) are populated when &lt;code&gt;enrichDetails&lt;/code&gt; is true.&lt;/p&gt;

&lt;p&gt;A note on Cyrillic values: fuel type, gearbox, body type, and colour are returned in their original Bulgarian text (e.g. &lt;code&gt;Дизелов&lt;/code&gt;, &lt;code&gt;Автоматична&lt;/code&gt;, &lt;code&gt;Хечбек&lt;/code&gt;). The column names are standard English, so your pipeline can process them without knowing Bulgarian — just map the Cyrillic values if you need English labels in your output.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does it cost to scrape Mobile.bg listings? 💰
&lt;/h2&gt;

&lt;p&gt;Pricing is Pay-Per-Event.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;actor-start&lt;/code&gt; (one-off per run)&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;result-row&lt;/code&gt; (per car listing)&lt;/td&gt;
&lt;td&gt;$0.002&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;1,000 results in a single run costs $2.05&lt;/strong&gt; ($0.05 start + 1,000 × $0.002). Every new Apify account gets $5 of free credit — enough for two full runs of 1,000 listings before you spend anything. No credit card required to start.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does the anti-blocking work?
&lt;/h2&gt;

&lt;p&gt;Mobile.bg is a Windows-1251 encoded site with anti-bot protections on its listing pages. We handle the blocks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We rotate Chrome, Firefox, and Safari TLS fingerprints using &lt;code&gt;curl-cffi&lt;/code&gt; browser impersonation — the site sees a real-browser handshake, not a Python HTTP client.&lt;/li&gt;
&lt;li&gt;We decode the Windows-1251 Cyrillic encoding correctly on every response before parsing, so you never get garbled text in &lt;code&gt;fuel_type&lt;/code&gt;, &lt;code&gt;body_type&lt;/code&gt;, or &lt;code&gt;description&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;We rotate residential proxy sessions through Apify Proxy on every block — a fresh session ID and a fresh Bulgarian exit IP, automatically.&lt;/li&gt;
&lt;li&gt;We retry on 408, 429, and 5xx responses with exponential backoff (starting at two seconds, capping at thirty, up to five attempts per page), honouring &lt;code&gt;Retry-After&lt;/code&gt; headers.&lt;/li&gt;
&lt;li&gt;Partial runs surface with a clear status message; we never return empty data with a green status.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to run the scraper from Python
&lt;/h2&gt;

&lt;p&gt;Install &lt;a href="https://docs.apify.com/api/client/python" rel="noopener noreferrer"&gt;apify-client&lt;/a&gt; and call the Actor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_APIFY_API_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;run_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;searchUrl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.mobile.bg/obiavi/avtomobili-dzhipove/bmw&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxResults&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enrichDetails&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;proxyConfiguration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;useApifyProxy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apifyProxyGroups&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RESIDENTIAL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DevilScrapes/mobile-bg-bulgaria-cars&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;make&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;year&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EUR&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price_bgn&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;BGN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mileage_km&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;km&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To target a specific make or model, apply filters on mobile.bg and paste the resulting URL into &lt;code&gt;searchUrl&lt;/code&gt;. Leave &lt;code&gt;searchUrl&lt;/code&gt; empty to scrape the default cars-and-jeeps feed. Turn &lt;code&gt;enrichDetails&lt;/code&gt; off to halve the request count — you still get make, model, year, price (both EUR and BGN), mileage, fuel, gearbox, engine power and size, body type, colour, and photos from the listing cards.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the main use cases?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Cross-border arbitrage: Bulgaria vs Western Europe 💡
&lt;/h3&gt;

&lt;p&gt;Bulgaria's used-car prices are among the lowest in the EU. A dataset of Mobile.bg listings filtered by &lt;code&gt;make&lt;/code&gt;, &lt;code&gt;year&lt;/code&gt;, and &lt;code&gt;mileage_km&lt;/code&gt;, compared against equivalent data from coches.net, leboncoin, or Marktplaats, reveals the price delta for specific models. Importers use this to source vehicles for resale in higher-price markets.&lt;/p&gt;

&lt;h3&gt;
  
  
  EUR/BGN dual-currency price tracking
&lt;/h3&gt;

&lt;p&gt;Bulgaria is in the process of euro adoption. Mobile.bg already shows both prices. The &lt;code&gt;price&lt;/code&gt; (EUR) and &lt;code&gt;price_bgn&lt;/code&gt; (BGN) fields let you track market pricing through the currency transition — useful for financial modelling and policy research.&lt;/p&gt;

&lt;h3&gt;
  
  
  Depreciation modelling: price vs mileage vs age
&lt;/h3&gt;

&lt;p&gt;Pull a broad dataset for a specific model (e.g. all Volkswagen Passat listings), export to CSV, and fit a regression. The &lt;code&gt;year&lt;/code&gt;, &lt;code&gt;mileage_km&lt;/code&gt;, &lt;code&gt;engine_power_hp&lt;/code&gt;, and &lt;code&gt;transmission&lt;/code&gt; fields give you the standard independent variables. Bulgarian private-seller pricing tends to be less filtered by dealer margin, which produces more signal for depreciation studies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dealer intelligence
&lt;/h3&gt;

&lt;p&gt;Filter &lt;code&gt;seller_type&lt;/code&gt; to &lt;code&gt;dealer&lt;/code&gt; (requires &lt;code&gt;enrichDetails: true&lt;/code&gt;), segment by &lt;code&gt;location&lt;/code&gt;, and you have a directory of active Bulgarian car dealers with their listed inventory. Track price changes across successive runs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fresh listings monitoring
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;posted_date&lt;/code&gt; field carries Mobile.bg's own relative posting marker (e.g. &lt;code&gt;НОВА ОБЯВА&lt;/code&gt; — "new listing"). Run the Actor daily and filter to new listings to catch fresh private-seller posts before they attract attention.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is it legal to scrape Mobile.bg?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Actor accesses publicly visible listing data — the same data any browser user sees without logging in. Mobile.bg's terms of service govern automated access; review them for your jurisdiction and use case before running at scale. We recommend responsible pacing and legitimate analytical use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fuel type and body type values are in Bulgarian — can I translate them?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The column names (&lt;code&gt;fuel_type&lt;/code&gt;, &lt;code&gt;body_type&lt;/code&gt;, &lt;code&gt;transmission&lt;/code&gt;, &lt;code&gt;color&lt;/code&gt;) are standard English. The values are preserved in the original Bulgarian so nothing is lost. Common mappings: &lt;code&gt;Дизелов&lt;/code&gt; → Diesel, &lt;code&gt;Бензинов&lt;/code&gt; → Petrol, &lt;code&gt;Електрически&lt;/code&gt; → Electric, &lt;code&gt;Ръчна&lt;/code&gt; → Manual, &lt;code&gt;Автоматична&lt;/code&gt; → Automatic, &lt;code&gt;Хечбек&lt;/code&gt; → Hatchback, &lt;code&gt;Седан&lt;/code&gt; → Sedan, &lt;code&gt;Комби&lt;/code&gt; → Estate/Wagon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What currency are prices in?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;price&lt;/code&gt; is always in EUR and &lt;code&gt;currency&lt;/code&gt; is always &lt;code&gt;EUR&lt;/code&gt;. &lt;code&gt;price_bgn&lt;/code&gt; carries the Bulgarian-lev equivalent shown on the site. If &lt;code&gt;price_bgn&lt;/code&gt; is null, the listing did not show a lev amount.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does &lt;code&gt;enrichDetails&lt;/code&gt; add?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Setting &lt;code&gt;enrichDetails: true&lt;/code&gt; fetches each listing's detail page for the full technical table, exact engine displacement, the seller's city (&lt;code&gt;location&lt;/code&gt;), and &lt;code&gt;seller_type&lt;/code&gt;. Without enrichment you still get make, model, year, price (EUR + BGN), mileage, fuel, gearbox, engine power and size, body type, colour, and photos from the listing card.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much does a run of 2,000 listings cost?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;$0.05 (start) + 2,000 × $0.002 = &lt;strong&gt;$4.05&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start collecting Bulgarian car listing data
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://apify.com/DevilScrapes/mobile-bg-bulgaria-cars" rel="noopener noreferrer"&gt;Mobile.bg Bulgaria Car Scraper&lt;/a&gt; is live on the Apify Store. Click &lt;strong&gt;Try for free&lt;/strong&gt; — $5 of credit included, no card required.&lt;/p&gt;

&lt;p&gt;Your first dataset exports to JSON or CSV in minutes. If you hit an edge case or need a field added, open an issue on the Actor's Issues tab and we'll address it in the next weekly release.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resources:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.apify.com/api/client/python" rel="noopener noreferrer"&gt;Apify Python client documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.apify.com/actor/run/pay-per-event" rel="noopener noreferrer"&gt;Apify Pay-Per-Event pricing guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mobile.bg/obiavi/avtomobili-dzhipove" rel="noopener noreferrer"&gt;Mobile.bg cars search&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webscraping</category>
      <category>python</category>
      <category>data</category>
      <category>automation</category>
    </item>
    <item>
      <title>How to Scrape Marktplaats Car Listings (Netherlands) to JSON/CSV</title>
      <dc:creator>Devil Scrapes</dc:creator>
      <pubDate>Sat, 13 Jun 2026 10:27:55 +0000</pubDate>
      <link>https://dev.to/devil_scrapes/how-to-scrape-marktplaats-car-listings-netherlands-to-jsoncsv-173n</link>
      <guid>https://dev.to/devil_scrapes/how-to-scrape-marktplaats-car-listings-netherlands-to-jsoncsv-173n</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; Use the &lt;a href="https://apify.com/DevilScrapes/marktplaats-netherlands-cars" rel="noopener noreferrer"&gt;Marktplaats Netherlands Car Scraper&lt;/a&gt; on Apify. Paste a filtered Marktplaats auto's search URL, set &lt;code&gt;maxResults&lt;/code&gt;, and the Actor walks the result pages and delivers structured rows — price in EUR, make, model, year, mileage, fuel, transmission, body type, drivetrain, energy label, seller, and photos — into a JSON or CSV dataset. No API key, no local scraping stack.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why scrape Marktplaats for car listings?
&lt;/h2&gt;

&lt;p&gt;Marktplaats.nl is the Netherlands' dominant classifieds marketplace — the Dutch equivalent of Craigslist and eBay Classifieds rolled into one. The auto's category carries listings from both private sellers and professional dealers (handelaren), making it the primary source for Dutch used-car pricing data. Marktplaats publishes no public API for its listings.&lt;/p&gt;

&lt;p&gt;The site has a few characteristics that make extraction non-trivial: listing data is served through Marktplaats' own internal search service (not a straightforward HTML scrape), the platform uses Dutch-language spec labels (bouwjaar, kilometerstand, Handgeschakeld, Voorwielaandrijving), and it employs residential proxy detection on its search endpoints. The Actor handles all of that, including Dutch-specific quirks like bid-based listings (&lt;code&gt;Bieden&lt;/code&gt;) and the Dutch energy label system (A through G).&lt;/p&gt;

&lt;h2&gt;
  
  
  What fields does the scraper return? 💡
&lt;/h2&gt;

&lt;p&gt;Every row maps directly to the &lt;code&gt;ResultRow&lt;/code&gt; Pydantic model in the Actor's source. Here is a realistic sample row:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"m2406042278"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.marktplaats.nl/v/auto-s/skoda/m2406042278-skoda-octavia-1-6-comfort"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Skoda Octavia 1.6 Comfort"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"make"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Skoda"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Octavia"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"year"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2001&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1150&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EUR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Te koop"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mileage_km"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;315844&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"fuel_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Benzine"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"transmission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Handgeschakeld"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"body_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Hatchback"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"drive_train"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Voorwielaandrijving"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"energy_label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"B"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Grijs"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Lienden"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"region"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Nederland"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dealer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MBSmart"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"56392587"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"photo_urls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://images.marktplaats.com/api/v1/hz-mp-pro-listing/images/4933080c-8de2-40e5-95e9-e9cc46631ef3?rule=ecg_mp_eps$_85.jpg"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Algemene informatie Aantal deuren: 5 Kleur: Grijs ..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"posted_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Vandaag"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scraped_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-06-02T00:00:00+00:00"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The complete field set is: &lt;code&gt;listing_id&lt;/code&gt;, &lt;code&gt;listing_url&lt;/code&gt;, &lt;code&gt;title&lt;/code&gt;, &lt;code&gt;make&lt;/code&gt;, &lt;code&gt;model&lt;/code&gt;, &lt;code&gt;year&lt;/code&gt;, &lt;code&gt;price&lt;/code&gt;, &lt;code&gt;currency&lt;/code&gt; (always &lt;code&gt;EUR&lt;/code&gt;), &lt;code&gt;price_type&lt;/code&gt;, &lt;code&gt;mileage_km&lt;/code&gt;, &lt;code&gt;fuel_type&lt;/code&gt;, &lt;code&gt;transmission&lt;/code&gt;, &lt;code&gt;body_type&lt;/code&gt;, &lt;code&gt;drive_train&lt;/code&gt;, &lt;code&gt;energy_label&lt;/code&gt;, &lt;code&gt;color&lt;/code&gt;, &lt;code&gt;location&lt;/code&gt;, &lt;code&gt;region&lt;/code&gt;, &lt;code&gt;seller_type&lt;/code&gt;, &lt;code&gt;seller_name&lt;/code&gt;, &lt;code&gt;seller_id&lt;/code&gt;, &lt;code&gt;photo_urls&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, &lt;code&gt;posted_date&lt;/code&gt;, and &lt;code&gt;scraped_at&lt;/code&gt;. The &lt;code&gt;color&lt;/code&gt; and &lt;code&gt;description&lt;/code&gt; fields are populated via detail-page enrichment.&lt;/p&gt;

&lt;p&gt;Note &lt;code&gt;drive_train&lt;/code&gt; — this is the exact field name in the &lt;code&gt;ResultRow&lt;/code&gt; model (not &lt;code&gt;drivetrain&lt;/code&gt;). Use it as-is when processing the dataset.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does it cost to scrape Marktplaats listings?
&lt;/h2&gt;

&lt;p&gt;Pricing is Pay-Per-Event.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;actor-start&lt;/code&gt; (one-off per run)&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;result-row&lt;/code&gt; (per car listing)&lt;/td&gt;
&lt;td&gt;$0.002&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;1,000 results in a single run costs $2.05&lt;/strong&gt; ($0.05 start + 1,000 × $0.002). Every new Apify account gets $5 of free credit — enough to pull your first two thousand listings before spending anything. No credit card required to start.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does the anti-blocking work? 🔥
&lt;/h2&gt;

&lt;p&gt;Marktplaats.nl protects its search endpoints from automated scraping. Here is how we handle it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We rotate Chrome, Firefox, and Safari TLS fingerprints on every request using &lt;code&gt;curl-cffi&lt;/code&gt; browser impersonation. The platform sees a real-browser TLS handshake, not a Python HTTP client.&lt;/li&gt;
&lt;li&gt;We rotate residential proxy sessions through Apify Proxy on any block — a new session ID and a new Dutch exit IP, automatically.&lt;/li&gt;
&lt;li&gt;We retry on 408, 429, and 5xx responses with exponential backoff (starting at two seconds, capping at thirty, up to five attempts per page), honouring &lt;code&gt;Retry-After&lt;/code&gt; headers.&lt;/li&gt;
&lt;li&gt;Sponsored Admarkt ads (item IDs beginning with &lt;code&gt;a&lt;/code&gt;) are detected and skipped — they contaminate price analysis datasets.&lt;/li&gt;
&lt;li&gt;Partial successes surface with a clear status message. We never quietly return an empty dataset.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The default proxy configuration already requests Dutch &lt;code&gt;RESIDENTIAL&lt;/code&gt; exits. Nothing to configure.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to run the scraper from Python
&lt;/h2&gt;

&lt;p&gt;Install &lt;a href="https://docs.apify.com/api/client/python" rel="noopener noreferrer"&gt;apify-client&lt;/a&gt; and call the Actor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_APIFY_API_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;run_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;searchUrl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.marktplaats.nl/l/auto-s/volkswagen/golf/#Language:all-languages&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxResults&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enrichDetails&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;proxyConfiguration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;useApifyProxy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apifyProxyGroups&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RESIDENTIAL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DevilScrapes/marktplaats-netherlands-cars&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;make&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;year&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mileage_km&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;energy_label&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To target a specific search, apply your filters on marktplaats.nl, copy the URL, and paste it into &lt;code&gt;searchUrl&lt;/code&gt;. The Actor translates it to the internal search query. Set &lt;code&gt;enrichDetails&lt;/code&gt; to &lt;code&gt;False&lt;/code&gt; if you only need the search-payload fields — price, make, model, year, mileage, fuel, transmission, body type, drivetrain, energy label, seller, and photos — without fetching each detail page.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the main use cases?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Used-car price analytics for the Dutch market
&lt;/h3&gt;

&lt;p&gt;Marktplaats combines private sellers and dealers in a single feed, giving a complete picture of Dutch retail and C2C pricing. Pull listings for a model range, export to CSV, and build price-vs-age and price-vs-mileage charts. The &lt;code&gt;energy_label&lt;/code&gt; column adds a sustainability dimension you will not find on most car data APIs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Energy label composition research
&lt;/h3&gt;

&lt;p&gt;The Netherlands has aggressive emission regulations and a strong push toward electrification. The &lt;code&gt;energy_label&lt;/code&gt; field (A through G) lets you aggregate the label distribution across any search filter — useful for fleet compliance reporting, real-estate proximity analysis, or EV market research.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dealer inventory monitoring
&lt;/h3&gt;

&lt;p&gt;Filter &lt;code&gt;seller_type&lt;/code&gt; to &lt;code&gt;dealer&lt;/code&gt;, run on a cron schedule, and diff by &lt;code&gt;listing_id&lt;/code&gt; to track new stock and price changes. The &lt;code&gt;seller_id&lt;/code&gt; field lets you group all listings from the same dealership even when the &lt;code&gt;seller_name&lt;/code&gt; display name changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bid-based listing research
&lt;/h3&gt;

&lt;p&gt;Listings with &lt;code&gt;price_type: "Bieden"&lt;/code&gt; are minimum-bid auctions. Filter to &lt;code&gt;Bieden&lt;/code&gt; listings and you have a view of the distressed-sale segment of the Dutch market — a common source of under-market deals.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cross-border sourcing
&lt;/h3&gt;

&lt;p&gt;Dutch used-car prices are competitive against some neighbouring markets, especially on specific segments. A Marktplaats dataset filtered by &lt;code&gt;fuel_type&lt;/code&gt;, &lt;code&gt;mileage_km&lt;/code&gt;, and &lt;code&gt;year&lt;/code&gt; gives European importers a current Dutch benchmark.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is it legal to scrape Marktplaats.nl?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Actor accesses publicly visible listing data — the same data any browser user sees without logging in. Marktplaats's terms of service govern automated access; review them for your use case before running at scale. We recommend responsible pacing and legitimate analytical use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is &lt;code&gt;price_type&lt;/code&gt; and why is it sometimes &lt;code&gt;Bieden&lt;/code&gt;?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Marktplaats supports fixed-price listings (&lt;code&gt;Te koop&lt;/code&gt;), bid-based listings (&lt;code&gt;Bieden&lt;/code&gt;), and reserved listings (&lt;code&gt;Gereserveerd&lt;/code&gt;). The &lt;code&gt;price&lt;/code&gt; field is still populated for &lt;code&gt;Bieden&lt;/code&gt; listings (it shows the minimum bid), and &lt;code&gt;price_type&lt;/code&gt; tells you which mode applies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why are &lt;code&gt;color&lt;/code&gt; and &lt;code&gt;description&lt;/code&gt; sometimes null?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Both come from the listing detail page, not the search payload. Set &lt;code&gt;enrichDetails: true&lt;/code&gt; (the default) to fill them in. Turn it off to halve the request count — price, specs, seller, and photos all come from the search results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much does a run of 5,000 listings cost?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;$0.05 (start) + 5,000 × $0.002 = &lt;strong&gt;$10.05&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are sponsored Admarkt ads included?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Admarkt ads (item IDs starting with &lt;code&gt;a&lt;/code&gt;) are detected and skipped automatically. They distort price comparisons and typically point to dealer landing pages rather than individual listings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start collecting Dutch car listing data
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://apify.com/DevilScrapes/marktplaats-netherlands-cars" rel="noopener noreferrer"&gt;Marktplaats Netherlands Car Scraper&lt;/a&gt; is live on the Apify Store. Click &lt;strong&gt;Try for free&lt;/strong&gt; — $5 of credit included, no card required.&lt;/p&gt;

&lt;p&gt;Your first dataset exports to JSON or CSV in minutes. Questions or edge cases? Open an issue on the Actor's Issues tab and we'll address it in the next weekly release.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resources:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.apify.com/api/client/python" rel="noopener noreferrer"&gt;Apify Python client documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.apify.com/actor/run/pay-per-event" rel="noopener noreferrer"&gt;Apify Pay-Per-Event pricing guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.marktplaats.nl/l/auto-s/" rel="noopener noreferrer"&gt;Marktplaats auto's search&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webscraping</category>
      <category>python</category>
      <category>data</category>
      <category>automation</category>
    </item>
    <item>
      <title>How to Scrape leboncoin Car Listings (France) to JSON/CSV</title>
      <dc:creator>Devil Scrapes</dc:creator>
      <pubDate>Sat, 13 Jun 2026 10:22:38 +0000</pubDate>
      <link>https://dev.to/devil_scrapes/how-to-scrape-leboncoin-car-listings-france-to-jsoncsv-40ib</link>
      <guid>https://dev.to/devil_scrapes/how-to-scrape-leboncoin-car-listings-france-to-jsoncsv-40ib</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; Use the &lt;a href="https://apify.com/DevilScrapes/leboncoin-france-cars" rel="noopener noreferrer"&gt;leboncoin France Car Scraper&lt;/a&gt; on Apify. Paste a filtered leboncoin.fr Voitures search URL, set &lt;code&gt;maxResults&lt;/code&gt;, and the Actor walks the result pages and returns structured rows — price in EUR, brand, model, year, mileage, fuel, gearbox, Crit'Air sticker, seller, location, and photos — as a JSON or CSV dataset. No API key, no local scraping stack to configure.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why scrape leboncoin for car listings?
&lt;/h2&gt;

&lt;p&gt;leboncoin.fr is France's largest classifieds marketplace and the default venue for millions of French used-car transactions each year. The Voitures section carries hundreds of thousands of live listings from private sellers and professional dealers alike. There is no public API — structured data access means extracting it from the search pages.&lt;/p&gt;

&lt;p&gt;That extraction is not straightforward. leboncoin is fronted by bot protection. Datacenter IP ranges get challenged or blocked. The listing data is embedded in JSON inside server-rendered HTML, paginated at 35 results per page. The French automotive classification has its own vocabulary: Crit'Air air-quality stickers (a regulatory requirement for driving in low-emission zones), horsepower measured in chevaux, fuel types like Essence and Hybride. The Actor handles all of it and delivers clean, typed rows.&lt;/p&gt;

&lt;h2&gt;
  
  
  What fields does the scraper return?
&lt;/h2&gt;

&lt;p&gt;Every row maps exactly to the &lt;code&gt;ResultRow&lt;/code&gt; Pydantic class in the Actor source. Here is a realistic sample row:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3117822207"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.leboncoin.fr/ad/voitures/3117822207"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Morris Mini COOPER 1275 S"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"make"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MORRIS"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Autre"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"year"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1968&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;34900&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EUR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mileage_km"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;101890&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"fuel_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Essence"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"transmission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Manuelle"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine_power_hp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine_size_cc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"body_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Citadine"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Vert"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"first_registration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"07/1968"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Saint-Jean-du-Cardonnay"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"region"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Seine-Maritime"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"postcode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"76150"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dealer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MECA SPORT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"critair"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Non classé"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"photo_urls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://img.leboncoin.fr/api/v1/lbcpb1/images/12/99/eb/1299eb9f07aa41b5f0430ce684d22b4e689dc47c.jpg?rule=ad-image"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Magnifique Morris Mini Cooper 1275 S restaurée."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"posted_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-12-26 14:04:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scraped_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-06-02T00:00:00+00:00"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The full field set is: &lt;code&gt;listing_id&lt;/code&gt;, &lt;code&gt;listing_url&lt;/code&gt;, &lt;code&gt;title&lt;/code&gt;, &lt;code&gt;make&lt;/code&gt;, &lt;code&gt;model&lt;/code&gt;, &lt;code&gt;year&lt;/code&gt;, &lt;code&gt;price&lt;/code&gt;, &lt;code&gt;currency&lt;/code&gt; (always &lt;code&gt;EUR&lt;/code&gt;), &lt;code&gt;mileage_km&lt;/code&gt;, &lt;code&gt;fuel_type&lt;/code&gt;, &lt;code&gt;transmission&lt;/code&gt;, &lt;code&gt;engine_power_hp&lt;/code&gt;, &lt;code&gt;engine_size_cc&lt;/code&gt;, &lt;code&gt;body_type&lt;/code&gt;, &lt;code&gt;color&lt;/code&gt;, &lt;code&gt;first_registration&lt;/code&gt;, &lt;code&gt;location&lt;/code&gt;, &lt;code&gt;region&lt;/code&gt;, &lt;code&gt;postcode&lt;/code&gt;, &lt;code&gt;seller_type&lt;/code&gt;, &lt;code&gt;seller_name&lt;/code&gt;, &lt;code&gt;critair&lt;/code&gt;, &lt;code&gt;photo_urls&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, &lt;code&gt;posted_date&lt;/code&gt;, and &lt;code&gt;scraped_at&lt;/code&gt;. The &lt;code&gt;description&lt;/code&gt; field comes from the search payload; when &lt;code&gt;enrichDetails&lt;/code&gt; is on, it is re-fetched from the detail page for the freshest copy.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does it cost to scrape leboncoin listings? 💰
&lt;/h2&gt;

&lt;p&gt;Pricing is Pay-Per-Event — you pay only when rows land in the dataset.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;actor-start&lt;/code&gt; (one-off per run)&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;result-row&lt;/code&gt; (per car listing)&lt;/td&gt;
&lt;td&gt;$0.002&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;1,000 results in a single run costs $2.05&lt;/strong&gt; ($0.05 start + 1,000 × $0.002). Every new Apify account receives $5 of free credit — enough to pull your first couple of thousand listings before you spend anything. No credit card required to begin.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does the anti-blocking work?
&lt;/h2&gt;

&lt;p&gt;leboncoin.fr is fronted by bot protection. Residential proxy sessions are not optional — they are required for reliable access. Here is what we do so you do not have to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We rotate Chrome, Firefox, and Safari TLS fingerprints on every request using &lt;code&gt;curl-cffi&lt;/code&gt; browser impersonation. The site's protection stack sees a real browser handshake, not a Python HTTP client.&lt;/li&gt;
&lt;li&gt;We rotate residential proxy sessions through Apify Proxy on every block — a fresh session ID and a fresh French exit IP, automatically.&lt;/li&gt;
&lt;li&gt;We retry on 408, 429, and 5xx responses with exponential backoff (starting at two seconds, capped at thirty, up to five attempts per page), honouring &lt;code&gt;Retry-After&lt;/code&gt; headers.&lt;/li&gt;
&lt;li&gt;When the site pushes back, we slow down rather than triggering a harder block. Partial runs surface with a clear status message; we never return empty data with a green status.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The default proxy config already requests &lt;code&gt;RESIDENTIAL&lt;/code&gt; exits. You do not need to configure anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to run the scraper from Python 🔥
&lt;/h2&gt;

&lt;p&gt;Install the &lt;a href="https://docs.apify.com/api/client/python" rel="noopener noreferrer"&gt;apify-client&lt;/a&gt; library and call the Actor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_APIFY_API_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;run_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;searchUrl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.leboncoin.fr/recherche?category=2&amp;amp;brand=Peugeot&amp;amp;vehicle_type=4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxResults&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enrichDetails&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;proxyConfiguration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;useApifyProxy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apifyProxyGroups&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RESIDENTIAL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DevilScrapes/leboncoin-france-cars&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;make&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mileage_km&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;critair&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To target a specific search, apply your filters on leboncoin.fr, copy the URL, and paste it into &lt;code&gt;searchUrl&lt;/code&gt;. The Actor walks result pages from there. Set &lt;code&gt;enrichDetails&lt;/code&gt; to &lt;code&gt;False&lt;/code&gt; if you only need the search-payload fields — price, brand, model, year, mileage, fuel, gearbox, colour, seller, location, and photos — and want to halve the request count.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the main use cases?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Used-car price analytics for the French market
&lt;/h3&gt;

&lt;p&gt;Pull listings for a specific make and model, export to CSV, and load into your analysis tool of choice. leboncoin's depth in the private-seller segment gives a view of French retail pricing that dealer-only datasets miss.&lt;/p&gt;

&lt;h3&gt;
  
  
  Crit'Air label composition research
&lt;/h3&gt;

&lt;p&gt;France's Crit'Air system classifies vehicles from label 0 (fully electric) through to Non classé for the oldest polluters. Low-emission zones in Paris, Lyon, and other major cities restrict entry by Crit'Air label. The &lt;code&gt;critair&lt;/code&gt; field lets you aggregate the sticker distribution across any filtered search — useful for policy research, fleet management planning, or market forecasting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dealer inventory monitoring
&lt;/h3&gt;

&lt;p&gt;Filter &lt;code&gt;seller_type&lt;/code&gt; to &lt;code&gt;dealer&lt;/code&gt;, set a daily schedule, and diff successive datasets by &lt;code&gt;listing_id&lt;/code&gt; to catch new arrivals and price cuts. &lt;code&gt;seller_name&lt;/code&gt;, &lt;code&gt;location&lt;/code&gt;, and &lt;code&gt;postcode&lt;/code&gt; let you segment by dealer and geography.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cross-border arbitrage from France
&lt;/h3&gt;

&lt;p&gt;French private-seller prices, especially on diesel estates and older luxury cars, can diverge meaningfully from equivalent listings in neighbouring markets. A dataset filtered by &lt;code&gt;fuel_type&lt;/code&gt;, &lt;code&gt;year&lt;/code&gt;, and &lt;code&gt;mileage_km&lt;/code&gt; gives importers a current benchmark.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lead generation: French car dealers
&lt;/h3&gt;

&lt;p&gt;Dealer listings carry &lt;code&gt;seller_name&lt;/code&gt; and the dealer's &lt;code&gt;location&lt;/code&gt; and &lt;code&gt;postcode&lt;/code&gt;. Run a broad sweep across the Voitures section and you have a structured directory of active French car dealers, filterable by region.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is it legal to scrape leboncoin.fr?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Actor accesses publicly visible listing data — the same data any browser user sees without logging in. leboncoin's terms of service govern automated access; review them for your jurisdiction and use case before running at scale. We recommend responsible pacing and legitimate analytical use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does this Actor require a residential proxy?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;leboncoin.fr's bot protection challenges or blocks datacenter IP ranges. Residential exit IPs from Apify Proxy ride past this reliably. The default proxy configuration already requests &lt;code&gt;RESIDENTIAL&lt;/code&gt; — you do not need to change anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the Crit'Air field?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Crit'Air (Certificat Qualité de l'Air) is a French government air-quality sticker required for driving in designated low-emission zones (Zones à Faibles Émissions). It is published on listings where the seller has declared it. Values include &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;1&lt;/code&gt;, &lt;code&gt;2&lt;/code&gt;, &lt;code&gt;3&lt;/code&gt;, &lt;code&gt;4&lt;/code&gt;, &lt;code&gt;5&lt;/code&gt;, and &lt;code&gt;Non classé&lt;/code&gt;. Not all listings include it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much does 5,000 listings cost?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;$0.05 (start) + 5,000 × $0.002 = &lt;strong&gt;$10.05&lt;/strong&gt; for one run of 5,000 results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How often can I run it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As often as you need. Schedule in the Apify Console with a cron expression. The Apify API lets you access and diff successive datasets programmatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start collecting French car listing data
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://apify.com/DevilScrapes/leboncoin-france-cars" rel="noopener noreferrer"&gt;leboncoin France Car Scraper&lt;/a&gt; is live on the Apify Store. Click &lt;strong&gt;Try for free&lt;/strong&gt; — $5 of credit included, no card required.&lt;/p&gt;

&lt;p&gt;Your first dataset is minutes away. If you hit an edge case or need an additional field, open an issue on the Actor's Issues tab and we'll address it in the next weekly release.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resources:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.apify.com/api/client/python" rel="noopener noreferrer"&gt;Apify Python client documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.apify.com/actor/run/pay-per-event" rel="noopener noreferrer"&gt;Apify Pay-Per-Event pricing guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.leboncoin.fr/recherche?category=2" rel="noopener noreferrer"&gt;leboncoin Voitures search&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webscraping</category>
      <category>python</category>
      <category>data</category>
      <category>automation</category>
    </item>
    <item>
      <title>How to Scrape FINN.no Car Listings (Norway) to JSON/CSV</title>
      <dc:creator>Devil Scrapes</dc:creator>
      <pubDate>Sat, 13 Jun 2026 10:17:22 +0000</pubDate>
      <link>https://dev.to/devil_scrapes/how-to-scrape-finnno-car-listings-norway-to-jsoncsv-444i</link>
      <guid>https://dev.to/devil_scrapes/how-to-scrape-finnno-car-listings-norway-to-jsoncsv-444i</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; Use the &lt;a href="https://apify.com/DevilScrapes/finn-norway-cars" rel="noopener noreferrer"&gt;FINN.no Car Scraper&lt;/a&gt; on Apify. Paste a filtered FINN.no car search URL (or just set a make or query), choose &lt;code&gt;maxResults&lt;/code&gt;, and the Actor walks every page and returns structured rows — NOK price, make, model, year, mileage, fuel, gearbox, body type, colour, and seller type — in a JSON or CSV dataset. No API key, no scraping infrastructure to maintain.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why scrape FINN.no?
&lt;/h2&gt;

&lt;p&gt;FINN.no is Norway's dominant classifieds marketplace and hosts tens of thousands of used-car listings. If you want a dataset of Norwegian car prices, want to monitor a dealer's stock, or are tracking the country's famously active used-EV market, the FINN.no car search is the primary source of truth. FINN publishes no public API for its car listings. Structured data means you have to extract it from the search pages.&lt;/p&gt;

&lt;p&gt;Norway's used-car market has its own quirks: prices in Norwegian kroner (NOK), Norwegian-language spec labels (Modellår, Drivstoff, Girkasse, Karosseri, Farge), and a used-EV penetration rate that leads Europe. The Actor maps all of those to standard English column names and outputs clean, typed rows.&lt;/p&gt;

&lt;h2&gt;
  
  
  What fields does the scraper return? 🔥
&lt;/h2&gt;

&lt;p&gt;Every row maps directly to the &lt;code&gt;ResultRow&lt;/code&gt; Pydantic class in the Actor's source. Here is a realistic sample:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"463169662"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.finn.no/mobility/item/463169662"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Renault Kangoo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"make"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Renault"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Kangoo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"year"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2014&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;33796&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NOK"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mileage_km"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;214713&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"fuel_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Diesel"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"transmission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Manuell"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine_power_hp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine_size_cc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"body_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Kasse"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Hvit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"first_registration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"09.10.2013"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Norge"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"region"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"private"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"photo_urls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://images.finncdn.no/dynamic/default/item/463169662/78cfeabc-d8b8-4c8c-99eb-ce53725c1209"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"posted_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scraped_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-06-02T00:00:00+00:00"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The complete field set is: &lt;code&gt;listing_id&lt;/code&gt;, &lt;code&gt;listing_url&lt;/code&gt;, &lt;code&gt;title&lt;/code&gt;, &lt;code&gt;make&lt;/code&gt;, &lt;code&gt;model&lt;/code&gt;, &lt;code&gt;year&lt;/code&gt;, &lt;code&gt;price&lt;/code&gt;, &lt;code&gt;currency&lt;/code&gt; (always &lt;code&gt;NOK&lt;/code&gt;), &lt;code&gt;mileage_km&lt;/code&gt;, &lt;code&gt;fuel_type&lt;/code&gt;, &lt;code&gt;transmission&lt;/code&gt;, &lt;code&gt;engine_power_hp&lt;/code&gt;, &lt;code&gt;engine_size_cc&lt;/code&gt;, &lt;code&gt;body_type&lt;/code&gt;, &lt;code&gt;color&lt;/code&gt;, &lt;code&gt;first_registration&lt;/code&gt;, &lt;code&gt;location&lt;/code&gt;, &lt;code&gt;region&lt;/code&gt;, &lt;code&gt;seller_type&lt;/code&gt;, &lt;code&gt;seller_name&lt;/code&gt;, &lt;code&gt;photo_urls&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, &lt;code&gt;posted_date&lt;/code&gt;, and &lt;code&gt;scraped_at&lt;/code&gt;. Fields tagged enrichment-only are populated only when &lt;code&gt;enrichDetails&lt;/code&gt; is true (the default).&lt;/p&gt;

&lt;h2&gt;
  
  
  What does it cost to scrape FINN.no listings?
&lt;/h2&gt;

&lt;p&gt;Pricing is Pay-Per-Event.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;actor-start&lt;/code&gt; (one-off per run)&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;result-row&lt;/code&gt; (per car listing)&lt;/td&gt;
&lt;td&gt;$0.002&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;1,000 results in one run costs $2.05&lt;/strong&gt; ($0.05 start + 1,000 × $0.002). Apify gives every new account $5 of free credit — enough to pull your first two thousand listings before you spend anything. No card required to start.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does the anti-blocking work?
&lt;/h2&gt;

&lt;p&gt;FINN.no does not hand out listing data to every HTTP client that asks nicely. We handle that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We rotate Chrome, Firefox, and Safari TLS fingerprints using &lt;code&gt;curl-cffi&lt;/code&gt; browser impersonation — FINN sees a real browser's handshake, not a Python request library.&lt;/li&gt;
&lt;li&gt;We rotate residential proxy sessions through Apify Proxy on every block, cycling to a fresh session ID and exit IP automatically.&lt;/li&gt;
&lt;li&gt;We retry on 408, 429, and 5xx responses with exponential backoff (starting at 2 seconds, up to five attempts per page), honouring any &lt;code&gt;Retry-After&lt;/code&gt; headers the server sends back.&lt;/li&gt;
&lt;li&gt;When FINN pushes back and rate-limits the run, we pace down rather than triggering a harder block. Partial successes are surfaced with a clear status message — we never return an empty dataset with a green status.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The devil's in the details. We handle them.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to run the scraper from Python
&lt;/h2&gt;

&lt;p&gt;Install the &lt;a href="https://docs.apify.com/api/client/python" rel="noopener noreferrer"&gt;apify-client&lt;/a&gt; library and call the Actor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_APIFY_API_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;run_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;query&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tesla model 3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxResults&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enrichDetails&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;proxyConfiguration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;useApifyProxy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DevilScrapes/finn-norway-cars&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;make&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;currency&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mileage_km&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You have three ways to target listings. Set &lt;code&gt;query&lt;/code&gt; for a free-text search (e.g. &lt;code&gt;"audi a4 quattro"&lt;/code&gt;), set &lt;code&gt;make&lt;/code&gt; for a single brand filter (e.g. &lt;code&gt;"Tesla"&lt;/code&gt;), or paste a full FINN search URL into &lt;code&gt;searchUrl&lt;/code&gt; with all your filters already applied — the URL wins if all three are set. Turn &lt;code&gt;enrichDetails&lt;/code&gt; off to halve the request count if mileage, gearbox, and power are not required.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the main use cases? 💡
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Used-EV market tracking
&lt;/h3&gt;

&lt;p&gt;Norway leads Europe in EV adoption and its used-EV market moves fast. Query &lt;code&gt;make: "Tesla"&lt;/code&gt; or &lt;code&gt;query: "elbil"&lt;/code&gt;, run the Actor weekly, and you have a time series of Norwegian used-EV asking prices in NOK. Chart price against mileage and model year to see depreciation curves no paid automotive data service covers for this market.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dealer inventory monitoring
&lt;/h3&gt;

&lt;p&gt;Filter &lt;code&gt;seller_type&lt;/code&gt; by &lt;code&gt;dealer&lt;/code&gt;, run on a schedule, and diff successive datasets to catch new arrivals and price drops at specific dealerships. &lt;code&gt;seller_name&lt;/code&gt; and &lt;code&gt;location&lt;/code&gt; give you everything needed to segment by dealer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Price benchmarking for importers
&lt;/h3&gt;

&lt;p&gt;Norwegian consumers pay import taxes and VAT on new cars but the used market prices can be competitive for European buyers shopping cross-border. A dataset of FINN prices in NOK, normalised to EUR, gives importers a baseline.&lt;/p&gt;

&lt;h3&gt;
  
  
  Private-seller arbitrage
&lt;/h3&gt;

&lt;p&gt;Private sellers on FINN sometimes list cars well below dealer retail. Filter &lt;code&gt;seller_type: private&lt;/code&gt; and set a tight price band to surface those listings the moment they appear.&lt;/p&gt;

&lt;h3&gt;
  
  
  Regression modelling: price vs mileage vs age
&lt;/h3&gt;

&lt;p&gt;Pull a broad dataset (e.g. all Volkswagen Golf listings), export to CSV, and fit a simple regression. The &lt;code&gt;year&lt;/code&gt;, &lt;code&gt;mileage_km&lt;/code&gt;, &lt;code&gt;engine_power_hp&lt;/code&gt;, and &lt;code&gt;transmission&lt;/code&gt; fields give you the standard independent variables.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is it legal to scrape FINN.no?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Actor scrapes publicly visible listing data — the same data any browser user sees without logging in. FINN.no's terms of service govern automated access; review them for your specific use case. We recommend reasonable scraping cadence and using the data for legitimate analytical purposes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why are mileage, gearbox, and power sometimes null?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Those fields live on each car's individual detail page, not in the search payload. Keep &lt;code&gt;enrichDetails&lt;/code&gt; on (the default) to fill them in. Turn it off to halve the request count and get only make, model, year, price, photos, and seller type from the search results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What currency are prices in?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Norwegian kroner (NOK). The &lt;code&gt;currency&lt;/code&gt; field is always &lt;code&gt;NOK&lt;/code&gt;; &lt;code&gt;price&lt;/code&gt; is an integer amount. Convert to EUR or GBP client-side with a live exchange rate if needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I search a specific model?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Set &lt;code&gt;query&lt;/code&gt; to something like &lt;code&gt;"volvo xc60 diesel"&lt;/code&gt;, or apply your filters directly on finn.no and paste the resulting URL into &lt;code&gt;searchUrl&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I schedule it to run daily?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. Set up a scheduled task in the Apify Console with a cron expression. Successive datasets are stored and accessible via the Apify API for diffing and downstream processing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start collecting Norwegian car data
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://apify.com/DevilScrapes/finn-norway-cars" rel="noopener noreferrer"&gt;FINN.no Car Scraper&lt;/a&gt; is live on the Apify Store. Hit &lt;strong&gt;Try for free&lt;/strong&gt; — $5 of credit included, no card required.&lt;/p&gt;

&lt;p&gt;Export to JSON or CSV in minutes. Questions or edge cases? Open an issue on the Actor's Issues tab and we'll look at it in the next weekly release.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resources:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.apify.com/api/client/python" rel="noopener noreferrer"&gt;Apify Python client documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.apify.com/actor/run/pay-per-event" rel="noopener noreferrer"&gt;Apify Pay-Per-Event pricing guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.finn.no/mobility/search/car" rel="noopener noreferrer"&gt;FINN.no car search&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webscraping</category>
      <category>python</category>
      <category>data</category>
      <category>automation</category>
    </item>
    <item>
      <title>How to Scrape coches.net Car Listings (Spain) to JSON/CSV</title>
      <dc:creator>Devil Scrapes</dc:creator>
      <pubDate>Sat, 13 Jun 2026 10:12:07 +0000</pubDate>
      <link>https://dev.to/devil_scrapes/how-to-scrape-cochesnet-car-listings-spain-to-jsoncsv-4oog</link>
      <guid>https://dev.to/devil_scrapes/how-to-scrape-cochesnet-car-listings-spain-to-jsoncsv-4oog</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; Use the &lt;a href="https://apify.com/DevilScrapes/coches-spain-cars" rel="noopener noreferrer"&gt;coches.net Spain Car Scraper&lt;/a&gt; on Apify. Paste your filtered coches.net search URL, set &lt;code&gt;maxResults&lt;/code&gt;, and the Actor walks every page of results and returns structured rows — price, make, model, year, mileage, fuel type, environmental label, seller, and photos — directly to a JSON or CSV dataset. No API key needed, no Python environment to configure.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why scrape coches.net at all?
&lt;/h2&gt;

&lt;p&gt;coches.net is Spain's largest used-car marketplace. Millions of segunda-mano listings sit behind its search interface, and there is no public API. If you want to track Spanish asking prices by make and model, monitor a dealer's inventory, or build a cross-border arbitrage dataset, you have to scrape the public search pages.&lt;/p&gt;

&lt;p&gt;Scraping a high-traffic Spanish marketplace is not a casual afternoon project. The site serves its listing data through a mix of rendered HTML and embedded JSON payloads, paginates at 30 listings per page, and pushes back hard against automated traffic with fingerprinting and rate-limiting. We built the Actor to absorb all of that so you get clean rows in a dataset rather than 403 errors in a terminal.&lt;/p&gt;

&lt;h2&gt;
  
  
  What fields does the scraper return?
&lt;/h2&gt;

&lt;p&gt;Every row returned by the Actor maps exactly to the &lt;code&gt;ResultRow&lt;/code&gt; Pydantic model in the Actor's source. Here is a realistic example output row:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"54595133"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.coches.net/land-rover-range-rover-velar-30-d300-se-4wd-auto-diesel-2019-en-madrid-54595133-covo.aspx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"LAND-ROVER Range Rover Velar 3.0 D300 SE 4WD Auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"make"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"LAND-ROVER"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Range Rover Velar"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3.0 D300 SE 4WD Auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"year"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2018&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;34900&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EUR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mileage_km"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;101643&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"fuel_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Diésel"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"transmission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Automatic"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine_power_hp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"drivetrain"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"All"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"body_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"6"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Gray"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"environmental_label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"first_registration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2018"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Majadahonda"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"region"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Madrid"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dealer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Movilcar"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_rating"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4.7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"photo_urls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://a.ccdn.es/cnet/vehicles/13042849/d0305526-6eeb-4e4c-8535-4463a6c1367e.jpg"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"has_warranty"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"warranty_months"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Libro de revisiones en concesionario oficial. 12 meses de garantia oficial."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"posted_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-04-24T09:05:37Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scraped_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-06-02T00:00:00+00:00"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The full field set includes &lt;code&gt;listing_id&lt;/code&gt;, &lt;code&gt;listing_url&lt;/code&gt;, &lt;code&gt;title&lt;/code&gt;, &lt;code&gt;make&lt;/code&gt;, &lt;code&gt;model&lt;/code&gt;, &lt;code&gt;version&lt;/code&gt;, &lt;code&gt;year&lt;/code&gt;, &lt;code&gt;price&lt;/code&gt;, &lt;code&gt;currency&lt;/code&gt;, &lt;code&gt;mileage_km&lt;/code&gt;, &lt;code&gt;fuel_type&lt;/code&gt;, &lt;code&gt;transmission&lt;/code&gt;, &lt;code&gt;engine_power_hp&lt;/code&gt;, &lt;code&gt;drivetrain&lt;/code&gt;, &lt;code&gt;body_type&lt;/code&gt;, &lt;code&gt;color&lt;/code&gt;, &lt;code&gt;environmental_label&lt;/code&gt;, &lt;code&gt;first_registration&lt;/code&gt;, &lt;code&gt;location&lt;/code&gt;, &lt;code&gt;region&lt;/code&gt;, &lt;code&gt;seller_type&lt;/code&gt;, &lt;code&gt;seller_name&lt;/code&gt;, &lt;code&gt;seller_rating&lt;/code&gt;, &lt;code&gt;photo_urls&lt;/code&gt;, &lt;code&gt;has_warranty&lt;/code&gt;, &lt;code&gt;warranty_months&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, &lt;code&gt;posted_date&lt;/code&gt;, and &lt;code&gt;scraped_at&lt;/code&gt;. Fields marked enrichment-only (&lt;code&gt;version&lt;/code&gt;, &lt;code&gt;transmission&lt;/code&gt;, &lt;code&gt;drivetrain&lt;/code&gt;, &lt;code&gt;color&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;) are populated when &lt;code&gt;enrichDetails&lt;/code&gt; is true.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does it cost to scrape coches.net listings? 💰
&lt;/h2&gt;

&lt;p&gt;Pricing is Pay-Per-Event — you pay for results that land, not for compute time.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;actor-start&lt;/code&gt; (one-off per run)&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;result-row&lt;/code&gt; (per car listing)&lt;/td&gt;
&lt;td&gt;$0.002&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;1,000 results in a single run costs $2.05&lt;/strong&gt; ($0.05 start + 1,000 × $0.002). Every new Apify account gets $5 of free credit — enough for two full runs of 1,000 listings before you spend a cent of your own money. No credit card required to start.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does the anti-blocking work?
&lt;/h2&gt;

&lt;p&gt;coches.net does not welcome automated traffic. We handle the blocks so you do not have to think about them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We rotate through Chrome, Firefox, and Safari TLS fingerprints on every request using &lt;code&gt;curl-cffi&lt;/code&gt; browser impersonation, so the site's anti-bot stack sees real-browser handshakes, not a Python HTTP client.&lt;/li&gt;
&lt;li&gt;We rotate residential proxy sessions through Apify Proxy on every block — a new session ID and a new exit IP, automatically.&lt;/li&gt;
&lt;li&gt;We retry with exponential backoff on 408, 429, and 5xx responses, honouring &lt;code&gt;Retry-After&lt;/code&gt; headers, up to five attempts per page.&lt;/li&gt;
&lt;li&gt;When the target rate-limits us, we slow down rather than getting banned. Partial successes surface with a clear status message — we never silently return an empty dataset.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You get clean, typed rows. We run the gauntlet.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to run the scraper from Python
&lt;/h2&gt;

&lt;p&gt;The Actor lives on the Apify platform. The fastest way to call it from your own code is the &lt;a href="https://docs.apify.com/api/client/python" rel="noopener noreferrer"&gt;apify-client&lt;/a&gt; Python library:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_APIFY_API_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;run_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;searchUrl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.coches.net/segunda-mano/?ma=BMW&amp;amp;mo=3+Series&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxResults&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enrichDetails&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;proxyConfiguration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;useApifyProxy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apifyProxyGroups&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RESIDENTIAL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DevilScrapes/coches-spain-cars&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;make&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;currency&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Swap in your own search URL — apply your filters on coches.net, copy the URL, paste it into &lt;code&gt;searchUrl&lt;/code&gt;. The Actor walks result pages from that filtered starting point. Set &lt;code&gt;enrichDetails&lt;/code&gt; to &lt;code&gt;False&lt;/code&gt; to halve the request count if you only need price, mileage, power, and seller from the search payload.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the main use cases?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Used-car price analytics
&lt;/h3&gt;

&lt;p&gt;Pull 500 listings for a specific make and model, export to CSV, and load into a spreadsheet or pandas DataFrame. You can plot asking prices against mileage and year in under ten minutes once the data is in your hands.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dealer inventory monitoring
&lt;/h3&gt;

&lt;p&gt;Filter by a dealer's name or location, run the Actor on a schedule, and diff successive datasets to catch new arrivals and price drops. Spain's dealer market moves fast; a daily diff keeps you current.&lt;/p&gt;

&lt;h3&gt;
  
  
  Market research: DGT environmental labels
&lt;/h3&gt;

&lt;p&gt;Spain's Dirección General de Tráfico assigns environmental labels (0, ECO, C, B) to vehicles for low-emission zone access. The &lt;code&gt;environmental_label&lt;/code&gt; field lets you aggregate the mix of labels across any filtered search — useful for tracking how quickly the segunda-mano market is shifting toward ECO and 0-label vehicles.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cross-border arbitrage
&lt;/h3&gt;

&lt;p&gt;Spanish used-car prices diverge from northern European markets, especially for diesel estates and certain German brands. Filter by &lt;code&gt;fuel_type&lt;/code&gt;, &lt;code&gt;mileage_km&lt;/code&gt;, and &lt;code&gt;year&lt;/code&gt;, then compare against a dataset from another EU marketplace to spot import opportunities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lead generation
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;seller_name&lt;/code&gt; and &lt;code&gt;location&lt;/code&gt; fields on dealer listings give you a ready-made directory of car dealers in any Spanish province. Combine with &lt;code&gt;seller_rating&lt;/code&gt; to rank them.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is it legal to scrape coches.net?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This Actor scrapes publicly visible listing data — the same information any browser user sees without logging in. coches.net's terms of service govern automated access; review them for your jurisdiction and use case. We recommend scraping responsibly: use the default rate-limiting settings, do not request data at a pace that would stress the server, and use the data for legitimate analytical and research purposes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much does 10,000 listings cost?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One run of 10,000 results costs $0.05 (start) + 10,000 × $0.002 = &lt;strong&gt;$20.05&lt;/strong&gt;. You pay only when rows actually land in the dataset.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How often can I run it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As often as you need. Schedule it daily in the Apify Console with a cron expression and it runs unattended. Successive datasets can be diffed programmatically via the Apify API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if coches.net blocks the Actor?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We handle blocks automatically through residential proxy rotation and session cycling. If a run encounters a hard ban across all available exits, the Actor exits non-zero with a clear status message rather than returning empty data quietly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start scraping Spanish car listings
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://apify.com/DevilScrapes/coches-spain-cars" rel="noopener noreferrer"&gt;coches.net Spain Car Scraper&lt;/a&gt; is live on the Apify Store. Click &lt;strong&gt;Try for free&lt;/strong&gt; — your first $5 of credit is on Apify, no card required.&lt;/p&gt;

&lt;p&gt;Export your first dataset to JSON or CSV in minutes. If you run into an edge case or need an extra field, open an issue on the Actor's Issues tab — we ship fixes weekly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resources:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.apify.com/api/client/python" rel="noopener noreferrer"&gt;Apify Python client documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.apify.com/actor/run/pay-per-event" rel="noopener noreferrer"&gt;Apify Pay-Per-Event pricing guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.coches.net/segunda-mano/" rel="noopener noreferrer"&gt;coches.net segunda-mano search&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webscraping</category>
      <category>python</category>
      <category>data</category>
      <category>automation</category>
    </item>
    <item>
      <title>How to Scrape Carzone.ie Car Listings (Ireland) to JSON/CSV</title>
      <dc:creator>Devil Scrapes</dc:creator>
      <pubDate>Sat, 13 Jun 2026 10:06:52 +0000</pubDate>
      <link>https://dev.to/devil_scrapes/how-to-scrape-carzoneie-car-listings-ireland-to-jsoncsv-2fc3</link>
      <guid>https://dev.to/devil_scrapes/how-to-scrape-carzoneie-car-listings-ireland-to-jsoncsv-2fc3</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; Carzone.ie publishes no public API, so structured used-car data requires scraping the public listings. The &lt;a href="https://apify.com/DevilScrapes/carzone-ireland-cars" rel="noopener noreferrer"&gt;Carzone Car Scraper&lt;/a&gt; on Apify handles browser fingerprint rotation, residential proxy rotation, and retries for you — returning clean typed rows at $2.05 per 1,000 results ($0.05 actor-start + $0.002 per result).&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Ireland's used-car market has a few distinctive quirks. The market is denominated in euros, left-hand traffic means most Irish cars are right-hand drive, and engine power is reported in BHP (brake horsepower) rather than the metric PS/CV used across most of continental Europe. The county-level location field matters too — Dublin listings trade at a premium over identical cars in Connacht, and that geographic signal is worth capturing.&lt;/p&gt;

&lt;p&gt;Carzone.ie is Ireland's leading used-car marketplace, listing tens of thousands of cars at any given moment. It publishes no developer API. The site's search pages surface roughly 10 listings per page, with detail pages holding the richer spec data (transmission, BHP, cc, body type, colour, county). Getting a complete structured view of the market means working through both layers — which requires session management, residential proxies, and robust retry logic.&lt;/p&gt;

&lt;p&gt;This guide shows how to pull Carzone.ie data programmatically using the &lt;a href="https://apify.com/DevilScrapes/carzone-ireland-cars" rel="noopener noreferrer"&gt;Carzone Car Scraper&lt;/a&gt;, a managed Apify Actor that handles the infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Does Carzone.ie Have an API? 🔎
&lt;/h2&gt;

&lt;p&gt;No. Carzone.ie publishes no public car API and no structured data export. Its search is backed by an internal endpoint that the Next.js frontend calls — not a stable surface for external code. The site also de-duplicates sponsored and featured placements that appear mixed into search results; the Actor handles that de-duplication for you by advert ID.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Data You Can Extract
&lt;/h2&gt;

&lt;p&gt;The Actor returns one row per listing. Fields from the search result card are always present; fields marked "enrichment-only" require &lt;code&gt;enrichDetails: true&lt;/code&gt; (the default), which fetches each listing's detail page.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;listing_id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Carzone advert ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;listing_url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Absolute URL to the listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Make + model + derivative&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;make&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Manufacturer (e.g. Toyota)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;model&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Model (e.g. Corolla)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;year&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Registration / model year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;price&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Integer price in EUR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;currency&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Always &lt;code&gt;EUR&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mileage_km&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Odometer in kilometres&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fuel_type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Petrol / Diesel / Electric / Petrol Hybrid&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;transmission&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Manual or Automatic — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;engine_power_hp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Engine power in BHP — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;engine_size_cc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Displacement in cc — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;body_type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Hatchback / Saloon / SUV, etc. — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;color&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exterior colour — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;first_registration&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;First registration date YYYY-MM-DD — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;location&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Seller town/city — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;region&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Irish county — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;seller_type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;dealer&lt;/code&gt; (Trade) or &lt;code&gt;private&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;seller_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Dealer trading name — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;photo_urls&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List of photo URLs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Advert description / equipment list&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;posted_date&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Listing last-updated date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;scraped_at&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ISO-8601 UTC timestamp of scrape&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code&gt;region&lt;/code&gt; field carries the Irish county — Dublin, Cork, Galway, Meath, and so on. This is the geographic granularity that matters in the Irish market: county-level pricing differences are significant and not captured by city names alone.&lt;/p&gt;

&lt;p&gt;Engine power in &lt;code&gt;engine_power_hp&lt;/code&gt; is BHP as Carzone reports it — consistent with how Irish buyers compare cars, and directly comparable to other UK/Ireland automotive data sources.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Realistic Output Row
&lt;/h2&gt;

&lt;p&gt;Here is a sample result using the exact field names from the Actor's Pydantic &lt;code&gt;ResultRow&lt;/code&gt; model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"4444769"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.carzone.ie/used-cars/mitsubishi/mirage/fpa/4444769"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Mitsubishi Mirage 1.2 DBA-A03A CVT 5DR AU AUTO"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"make"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Mitsubishi"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Mirage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"year"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2017&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6990&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EUR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mileage_km"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;111000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"fuel_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Petrol"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"transmission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Automatic"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine_power_hp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;78&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine_size_cc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"body_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Hatchback"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"White"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"first_registration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2017-02-28"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"region"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Meath"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dealer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CarBar"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"photo_urls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://c0.carsie.ie/d43864c90df075c94489ddbe4ca5ffe9742493abfef315899189d722e9fae6e5.jpg"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"posted_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scraped_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-06-02T00:00:00+00:00"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that mileage is already in kilometres — Carzone reports km natively, so there is no unit conversion required (unlike Swedish Blocket, which uses the Swedish mil).&lt;/p&gt;




&lt;h2&gt;
  
  
  How We Handle the Blocks
&lt;/h2&gt;

&lt;p&gt;Carzone.ie is a modern JavaScript marketplace. Its search pages serve approximately 10 listings per page and surface sponsored placements mixed in with organic results. Here is what the Actor does to stay reliable across both the search and detail layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Browser fingerprint rotation.&lt;/strong&gt; We use &lt;code&gt;curl-cffi&lt;/code&gt; to impersonate real Chrome, Firefox, and Safari TLS handshakes. The server sees a real browser, not Python.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Residential proxy rotation via Apify Proxy.&lt;/strong&gt; We rotate residential exit IPs and fresh session IDs on every block signal. Irish residential exits are preferred for this target.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exponential backoff with Retry-After.&lt;/strong&gt; We retry on 408, 429, and 5xx — up to five attempts per page, honouring &lt;code&gt;Retry-After&lt;/code&gt; headers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate-limit-aware pacing.&lt;/strong&gt; When the site pushes back, we slow down rather than burning through retries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advert ID deduplication.&lt;/strong&gt; Sponsored and featured placements appear multiple times in Carzone search results. The Actor de-duplicates by &lt;code&gt;listing_id&lt;/code&gt; so you never get duplicate rows in your dataset.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Loud failure, never silent.&lt;/strong&gt; A hard block produces a non-zero exit with a descriptive status message — never a green run with zero results.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Running It with Python 🐍
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_APIFY_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DevilScrapes/carzone-ireland-cars&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;make&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Toyota&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxResults&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enrichDetails&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;proxyConfiguration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;useApifyProxy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apifyProxyGroups&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RESIDENTIAL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Scraped &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; listings&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;make&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;year&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
          &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EUR&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;—&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;region&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three ways to target your search:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;make&lt;/code&gt;&lt;/strong&gt; — convenience filter, e.g. &lt;code&gt;"Toyota"&lt;/code&gt;. Builds the &lt;code&gt;/used-cars/toyota&lt;/code&gt; path automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;query&lt;/code&gt;&lt;/strong&gt; — free-text keywords, e.g. &lt;code&gt;"hybrid suv"&lt;/code&gt;. Maps to Carzone's &lt;code&gt;keywords&lt;/code&gt; parameter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;searchUrl&lt;/code&gt;&lt;/strong&gt; — paste a full Carzone search URL with filters applied. The URL wins if all three are set.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Use Cases
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Irish EUR price analytics.&lt;/strong&gt; Build time series of asking prices for specific makes and models in the Irish market. Run daily and push to a database; plot price vs. mileage and price vs. year to understand depreciation curves in EUR.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EV and hybrid market tracking.&lt;/strong&gt; Query &lt;code&gt;fuel_type = Electric&lt;/code&gt; or &lt;code&gt;Petrol Hybrid&lt;/code&gt; to chart Ireland's used-EV pricing. Ireland introduced strong SEAI EV grants that suppressed new-EV prices and are now flowing through to the used market — tracking Carzone gives you the data to see that in real time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;County-level pricing analysis.&lt;/strong&gt; Use the &lt;code&gt;region&lt;/code&gt; field to compare asking prices for identical cars across Irish counties. Dublin vs. rural Connacht pricing gaps are well known in the trade; quantifying them from listing data is straightforward with &lt;code&gt;region&lt;/code&gt; in your dataset.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dealer inventory monitoring.&lt;/strong&gt; Filter by &lt;code&gt;seller_type = dealer&lt;/code&gt; and &lt;code&gt;seller_name&lt;/code&gt; to watch a competitor's stock. Diff successive runs to catch new arrivals and price movements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Arbitrage from the UK.&lt;/strong&gt; Ireland and the UK share a right-hand-drive convention, making cross-channel vehicle sourcing common. Compare Carzone EUR prices against UK equivalents (in GBP) to spot import opportunities, particularly on popular Japanese imports like the Corolla and Yaris.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ ❓
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How much does it cost?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pay-Per-Event pricing: $0.05 for actor-start (one-off per run) plus $0.002 per result row. 1,000 results costs $2.05 total. Every new Apify account gets $5 of free credit — no credit card required to try.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is mileage in miles or kilometres?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kilometres. Carzone.ie reports mileage in km natively and the Actor stores the km value in &lt;code&gt;mileage_km&lt;/code&gt; — no conversion required. This makes it directly comparable with other EU markets in the fleet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why are transmission, body type, and county sometimes null?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Those fields live on each car's detail page, not the search result card. Keep &lt;code&gt;enrichDetails: true&lt;/code&gt; (the default) to fill them in; set it to &lt;code&gt;false&lt;/code&gt; to halve the request count and return only what the search page provides: make, model, year, price, mileage, fuel type, and photos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is scraping Carzone.ie legal?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Carzone's terms restrict automated access. You are responsible for ensuring your use complies with applicable law and the site's terms. The Actor scrapes only public listing data visible to any unauthenticated browser. We do not bypass authentication, access private messages, or scrape seller phone numbers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does this cover new cars too?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The default search targets the used-car channel. Paste a &lt;code&gt;searchUrl&lt;/code&gt; that includes new-car filters if you want those — the parser reads whatever the search page returns.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;The Actor is live on the Apify Store. Every new Apify account starts with $5 of free credit — enough for roughly 2,400 enriched listings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apify.com/DevilScrapes/carzone-ireland-cars" rel="noopener noreferrer"&gt;Carzone Car Scraper on Apify Store&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Questions or edge cases? Use the Actor's Issues tab on Apify Console. We ship fixes weekly and read every report.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://apify.com/DevilScrapes" rel="noopener noreferrer"&gt;Devil Scrapes&lt;/a&gt; — a fleet of opinionated public-data Actors. Honest pricing, real engineering, zero fine print.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>python</category>
      <category>data</category>
      <category>automation</category>
    </item>
    <item>
      <title>How to Scrape Cars.bg Car Listings (Bulgaria) to JSON/CSV</title>
      <dc:creator>Devil Scrapes</dc:creator>
      <pubDate>Sat, 13 Jun 2026 10:01:36 +0000</pubDate>
      <link>https://dev.to/devil_scrapes/how-to-scrape-carsbg-car-listings-bulgaria-to-jsoncsv-d35</link>
      <guid>https://dev.to/devil_scrapes/how-to-scrape-carsbg-car-listings-bulgaria-to-jsoncsv-d35</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; Cars.bg publishes no public API, so structured used-car data requires scraping the public listings. The &lt;a href="https://apify.com/DevilScrapes/carsbg-bulgaria-cars" rel="noopener noreferrer"&gt;Cars.bg Bulgaria Car Scraper&lt;/a&gt; on Apify handles browser fingerprint rotation, residential proxy rotation, and retries for you — returning clean typed rows with dual EUR and BGN pricing at $2.05 per 1,000 results ($0.05 actor-start + $0.002 per result).&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Bulgaria's used-car market has a quirk that sets it apart from most of Western Europe: prices appear in both euros and Bulgarian lev (BGN) on every single listing. Bulgaria is an EU member but retains the lev — pegged at a fixed rate of 1.9558 BGN per EUR — and the marketplace convention is to show both. If you are building a pricing model or running arbitrage across EU markets, you need both currency fields in your dataset.&lt;/p&gt;

&lt;p&gt;Cars.bg is Bulgaria's largest automotive marketplace with no public API and no structured data export. Scraping it is not trivial: the site uses a modern JavaScript frontend with an internal API, and its detail pages are guarded more aggressively than the listing cards — requiring residential proxy rotation and careful session management to retrieve reliably.&lt;/p&gt;

&lt;p&gt;This guide covers how to pull Cars.bg data programmatically using the &lt;a href="https://apify.com/DevilScrapes/carsbg-bulgaria-cars" rel="noopener noreferrer"&gt;Cars.bg Bulgaria Car Scraper&lt;/a&gt;, a managed Apify Actor that handles the infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Does Cars.bg Have an API? 🔎
&lt;/h2&gt;

&lt;p&gt;No. Cars.bg offers no developer API, no data export, and no documented structured feed. The site's listing data is rendered via an internal API that the frontend calls with session-scoped parameters — not something you can call stably from external code.&lt;/p&gt;

&lt;p&gt;One important distinction from other scrapers in this fleet: Cars.bg's &lt;strong&gt;detail pages are guarded more aggressively than its listing cards&lt;/strong&gt;. With the default enrichment-off setting, you can pull make, model, year, price (EUR + BGN), mileage, fuel type, location, seller type, and photos from listing cards alone — which is the fastest and most reliable path. Detail-page enrichment (gearbox, body type, engine spec, colour, full description) is available but requires a larger proxy pool to avoid rate-limiting.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Data You Can Extract
&lt;/h2&gt;

&lt;p&gt;The Actor returns one row per listing. Fields from the listing card are always present (enrichment off is the default). Fields marked "enrichment-only" require &lt;code&gt;enrichDetails: true&lt;/code&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;listing_id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cars.bg listing reference ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;listing_url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Absolute URL to the listing detail page&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Make + model from listing title&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;make&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Manufacturer (e.g. Mazda)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;model&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Model (e.g. 6)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;year&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Manufacture year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;price&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Integer price in EUR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;currency&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Always &lt;code&gt;EUR&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;price_bgn&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Price in Bulgarian lev (BGN) as shown on the listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mileage_km&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Odometer in kilometres&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fuel_type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Дизел / Бензин / Електрически (Bulgarian Cyrillic)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;transmission&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Автоматични / Ръчни скорости — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;engine_power_hp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Horsepower (к.с.) — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;engine_size_cc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Displacement in cc — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;body_type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Комби / Седан / Джип, etc. — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;color&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exterior colour — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;first_registration&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;First-registration month/year, e.g. "Март 2009" — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;location&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Seller city&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;seller_type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;dealer&lt;/code&gt; or &lt;code&gt;private&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;seller_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Seller display name — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;photo_urls&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List of photo URLs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Free-text seller description — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;posted_date&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Relative posting time from listing card (e.g. "днес, 01:44")&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;scraped_at&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ISO-8601 UTC timestamp of scrape&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A note on language: Cars.bg is a Bulgarian-language site. Fuel type, gearbox, and body type values are in Bulgarian Cyrillic. The Actor maps all field names to English column names — your schema is consistent — but the values are preserved as-is. &lt;code&gt;Дизел&lt;/code&gt; stays &lt;code&gt;Дизел&lt;/code&gt;. This is correct behaviour: silent translation introduces errors for uncommon values.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Realistic Output Row
&lt;/h2&gt;

&lt;p&gt;Here is a sample result using the exact field names from the Actor's Pydantic &lt;code&gt;ResultRow&lt;/code&gt; model, with enrichment enabled:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"68eb6bba3c8c0e169c027093"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.cars.bg/offer/68eb6bba3c8c0e169c027093"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Mazda 6 2,2MZR-CD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"make"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Mazda"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"6 2,2MZR-CD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"year"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2009&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2850&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EUR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price_bgn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5574&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mileage_km"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;308000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"fuel_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Дизел"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"transmission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Ръчни скорости"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine_power_hp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;185&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine_size_cc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"body_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Комби"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Светло сив металик"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"first_registration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Март 2009"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Монтана"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"region"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"private"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Aleksandr"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"photo_urls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"https://g1-bg.cars.bg/2025-10-12_1/68eb68ec14f9749b22054f64b.jpg"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Продавам Mazda 6 комби (GH), 2009 г. ..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"posted_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"днес, 01:44"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scraped_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-06-02T10:00:00+00:00"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice both &lt;code&gt;price&lt;/code&gt; (2,850 EUR) and &lt;code&gt;price_bgn&lt;/code&gt; (5,574 BGN) — both come directly from the listing card, so they are available even without detail enrichment.&lt;/p&gt;




&lt;h2&gt;
  
  
  How We Handle the Blocks
&lt;/h2&gt;

&lt;p&gt;Cars.bg is a modern JavaScript marketplace. Its listing cards and detail pages behave differently under automated traffic — the site's defences are more aggressive on detail pages than on search results. Here is what the Actor does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Browser fingerprint rotation.&lt;/strong&gt; We use &lt;code&gt;curl-cffi&lt;/code&gt; to impersonate real Chrome, Firefox, and Safari TLS handshakes. The server sees a browser, not Python.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Residential proxy rotation via Apify Proxy.&lt;/strong&gt; We rotate residential exit IPs and fresh session IDs on every block signal. Datacenter IPs are a reliable path to a 403 on Cars.bg detail pages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exponential backoff with Retry-After.&lt;/strong&gt; We retry on 408, 429, and 5xx — up to five attempts per page, honouring the server's own &lt;code&gt;Retry-After&lt;/code&gt; header.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate-limit-aware pacing.&lt;/strong&gt; When the target slows us, we match its pace rather than pushing through.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Loud failure, never silent.&lt;/strong&gt; A hard block produces a non-zero exit with a descriptive status message. Empty datasets with green statuses are not acceptable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The default configuration has &lt;code&gt;enrichDetails: false&lt;/code&gt; — not because the detail pages are off-limits, but because detail enrichment requires a larger proxy pool to run reliably, and we want the default run to succeed predictably.&lt;/p&gt;




&lt;h2&gt;
  
  
  Running It with Python 🐍
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_APIFY_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DevilScrapes/carsbg-bulgaria-cars&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;searchUrl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.cars.bg/carslist.php?subtype=1&amp;amp;brand=16&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxResults&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enrichDetails&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;proxyConfiguration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;useApifyProxy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apifyProxyGroups&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RESIDENTIAL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Scraped &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; listings&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;make&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;year&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
          &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EUR /&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price_bgn&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;BGN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;searchUrl&lt;/code&gt; is optional. Leave it empty to scrape the default used-cars feed, or visit cars.bg, apply your filters (brand, body type, price band, year range), and paste the resulting URL. The Actor follows pagination from there.&lt;/p&gt;




&lt;h2&gt;
  
  
  Use Cases
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;EUR and BGN price analytics.&lt;/strong&gt; Track asking prices in both currencies across the Bulgarian market. Since the lev is pegged to the euro, the BGN field is a sanity check for data quality rather than a currency risk surface — but having both is useful when joining against Bulgarian financial data sources that use one or the other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-border EU arbitrage.&lt;/strong&gt; Bulgaria is one of the more affordable used-car markets in the EU. Compare Cars.bg EUR prices against German, French, or Romanian equivalents to identify import opportunities. The &lt;code&gt;mileage_km&lt;/code&gt; field is already normalised to kilometres across the fleet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dealer intelligence.&lt;/strong&gt; Filter by &lt;code&gt;seller_type = dealer&lt;/code&gt; and &lt;code&gt;location&lt;/code&gt; to track inventory in specific Bulgarian cities. Sofia, Plovdiv, and Varna account for most of the dealer volume.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Market research.&lt;/strong&gt; Aggregate &lt;code&gt;fuel_type&lt;/code&gt; across the full dataset to measure diesel vs. petrol vs. electric adoption in the Bulgarian market — one of the later EU adopters of EV technology.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lead generation.&lt;/strong&gt; Build a directory of Bulgarian dealers from &lt;code&gt;seller_name&lt;/code&gt; and &lt;code&gt;location&lt;/code&gt;. Diff successive runs to score dealers by listing volume and price-cut frequency.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ ❓
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How much does it cost?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pay-Per-Event pricing: $0.05 for actor-start (one-off per run) plus $0.002 per result row. 1,000 results costs $2.05 total. Every new Apify account gets $5 of free credit — no credit card required to try.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should I enable detail enrichment?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With &lt;code&gt;enrichDetails: false&lt;/code&gt; (the default), you get make, model, year, price (EUR + BGN), mileage, fuel type, location, seller type, and photos from the listing card alone. That is enough for most pricing and market research use cases. Enable &lt;code&gt;enrichDetails: true&lt;/code&gt; to add gearbox, engine displacement, engine power, body type, colour, first-registration month, full description, and seller name — but note that Cars.bg guards detail pages more aggressively, so enrichment performs best on larger proxy tiers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is scraping Cars.bg legal?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cars.bg's terms restrict automated access. You are responsible for ensuring your use complies with applicable law and the site's terms. The Actor scrapes only public listing data visible to any unauthenticated browser. We do not bypass authentication or access private user data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What currency does Cars.bg use?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cars.bg shows each price in both EUR and BGN. The &lt;code&gt;price&lt;/code&gt; field is the integer EUR amount and &lt;code&gt;currency&lt;/code&gt; is always &lt;code&gt;EUR&lt;/code&gt;. The &lt;code&gt;price_bgn&lt;/code&gt; field carries the BGN amount shown alongside it on the listing card.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;The Actor is live on the Apify Store. Every new Apify account starts with $5 of free credit — enough for roughly 2,400 enriched listings or around 2,400 listing-card-only rows per dollar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apify.com/DevilScrapes/carsbg-bulgaria-cars" rel="noopener noreferrer"&gt;Cars.bg Bulgaria Car Scraper on Apify Store&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Questions or edge cases? Use the Actor's Issues tab on Apify Console. We ship fixes weekly and read every report.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://apify.com/DevilScrapes" rel="noopener noreferrer"&gt;Devil Scrapes&lt;/a&gt; — a fleet of opinionated public-data Actors. Honest pricing, real engineering, zero fine print.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>python</category>
      <category>data</category>
      <category>automation</category>
    </item>
    <item>
      <title>How to Scrape Blocket.se Car Listings (Sweden) to JSON/CSV</title>
      <dc:creator>Devil Scrapes</dc:creator>
      <pubDate>Sat, 13 Jun 2026 08:39:34 +0000</pubDate>
      <link>https://dev.to/devil_scrapes/how-to-scrape-blocketse-car-listings-sweden-to-jsoncsv-1449</link>
      <guid>https://dev.to/devil_scrapes/how-to-scrape-blocketse-car-listings-sweden-to-jsoncsv-1449</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; Blocket.se publishes no public car API, so the only way to get structured listings data is to scrape the public site. The &lt;a href="https://apify.com/DevilScrapes/blocket-sweden-cars" rel="noopener noreferrer"&gt;Blocket Car Scraper&lt;/a&gt; on Apify handles browser fingerprint rotation, residential proxy rotation, Swedish-mil-to-km conversion, and retries for you — delivering clean typed rows at $2.05 per 1,000 results ($0.05 actor-start + $0.002 per result).&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Sweden's used-car market is one of the most active in the Nordics. Blocket.se is the dominant classifieds platform in Sweden — tens of thousands of car listings at any moment, spanning everything from a 1999 Volvo V70 at 12,000 SEK to a freshly imported Tesla Model Y at market rate. If you want to track SEK prices by make and model, watch Sweden's fast-moving used-EV segment, or monitor a competitor's dealer inventory, Blocket is the data source you need.&lt;/p&gt;

&lt;p&gt;The complication: Blocket.se publishes no public API, and its car search is rendered by a Next.js frontend backed by internal endpoints that resist naive HTTP clients. The site also reports odometer readings in the Swedish mile — &lt;em&gt;mil&lt;/em&gt; — where 1 mil equals 10 kilometres, a unit convention that catches most data pipelines off guard the first time.&lt;/p&gt;

&lt;p&gt;This guide covers how to pull Blocket.se car data programmatically, using the &lt;a href="https://apify.com/DevilScrapes/blocket-sweden-cars" rel="noopener noreferrer"&gt;Blocket Car Scraper&lt;/a&gt; — a managed Apify Actor that handles both the anti-blocking layer and the mil-to-km normalisation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Does Blocket.se Have an API? 🔎
&lt;/h2&gt;

&lt;p&gt;No. Blocket.se is a consumer marketplace — it exposes no documented developer API and no data export for car listings. The site's internal search endpoint feeds the React frontend, but it uses session-based authentication and rate-limits aggressively. Any client you build against it will break without warning when Blocket rotates its internal API version or adds a new challenge layer.&lt;/p&gt;

&lt;p&gt;The durable approach is a managed scraper that stays current with site changes, so your pipeline continues working when Blocket updates its frontend.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Data You Can Extract
&lt;/h2&gt;

&lt;p&gt;The Actor returns one structured row per listing. Fields from the search result card are always present; fields marked "enrichment-only" require &lt;code&gt;enrichDetails: true&lt;/code&gt;, which fetches each car's detail page.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;listing_id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Blocket ad ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;listing_url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Absolute URL to the listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Make + model heading&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;make&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Manufacturer, e.g. Volvo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;model&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Model, e.g. V70&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;year&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Model year (Modellår)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;price&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Integer price in SEK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;currency&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Always &lt;code&gt;SEK&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mileage_km&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Odometer in km (converted from Swedish mil)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fuel_type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bensin / Diesel / El, etc. — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;transmission&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Manuell or Automat — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;engine_power_hp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Metric horsepower (Effekt, Hk) — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;engine_size_cc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Displacement in cc — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;body_type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Kombi / Sedan / SUV, etc. — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;color&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exterior colour (Färg) — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;first_registration&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Registration date YYYY-MM-DD — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;location&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Seller location (Bilens plats) — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;drivetrain&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Framhjulsdrift / Fyrhjulsdrift, etc. — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;num_owners&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Number of previous owners (Antal ägare) — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;seller_type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;dealer&lt;/code&gt; (Handlare) or &lt;code&gt;private&lt;/code&gt; (Privatperson)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;seller_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Dealer trading name — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;photo_urls&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List of photo URLs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Short trim/equipment line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;posted_date&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Listing publication date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;scraped_at&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ISO-8601 UTC timestamp of scrape&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Note the &lt;code&gt;num_owners&lt;/code&gt; field — Blocket surfaces previous-owner count on detail pages, which is genuinely useful for pricing models that discount high-ownership cars.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Realistic Output Row
&lt;/h2&gt;

&lt;p&gt;Here is a sample result using the exact field names from the Actor's Pydantic &lt;code&gt;ResultRow&lt;/code&gt; model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"23740311"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.blocket.se/mobility/item/23740311"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Volvo V70"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"make"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Volvo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"V70"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"year"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SEK"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mileage_km"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;238000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"fuel_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bensin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"transmission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Manuell"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine_power_hp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;140&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine_size_cc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"body_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Kombi"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Grå"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"first_registration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1999-11-04"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Sverige"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"drivetrain"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Framhjulsdrift"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"num_owners"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"private"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"photo_urls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://images.blocketcdn.se/dynamic/default/item/23740311/0c453750-654c-488c-878e-7d50af9966be"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2.4 Manuell"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"posted_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scraped_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-06-02T00:00:00+00:00"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;mileage_km&lt;/code&gt; value of 238,000 came from a listing that showed "23 800 mil" — the Actor converted it. Without that conversion, a pipeline that compares Swedish listings against German or Irish equivalents would see odometer values that are an order of magnitude off.&lt;/p&gt;




&lt;h2&gt;
  
  
  How We Handle the Blocks
&lt;/h2&gt;

&lt;p&gt;Blocket.se's car search is served by a Next.js frontend that calls internal authenticated endpoints. A plain HTTP client hitting those endpoints gets refused. Here is what the Actor does instead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Browser fingerprint rotation.&lt;/strong&gt; We use &lt;code&gt;curl-cffi&lt;/code&gt; to impersonate real Chrome, Firefox, and Safari TLS handshakes — the complete ClientHello, ALPN extension order, and HTTP/2 SETTINGS frame. The target sees browser traffic, not Python.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Residential proxy rotation via Apify Proxy.&lt;/strong&gt; We rotate residential exit IPs on every block. Swedish residential exits are preferred for this target.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exponential backoff with Retry-After.&lt;/strong&gt; We retry on 408, 429, and 5xx — up to five attempts per page, doubling the wait each time and honouring &lt;code&gt;Retry-After&lt;/code&gt; headers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate-limit-aware pacing.&lt;/strong&gt; When Blocket pushes back, we slow down instead of accelerating into a ban.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Loud failure, never silent.&lt;/strong&gt; A hard block produces a non-zero exit and a descriptive status message — never a green run with an empty dataset.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Running It with Python 🐍
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_APIFY_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DevilScrapes/blocket-sweden-cars&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;query&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;volvo v70&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxResults&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enrichDetails&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;proxyConfiguration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;useApifyProxy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apifyProxyGroups&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RESIDENTIAL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Scraped &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; listings&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;make&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;year&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SEK&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mileage_km&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;km&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three ways to target your search:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;query&lt;/code&gt;&lt;/strong&gt; — free-text, maps to Blocket's &lt;code&gt;q&lt;/code&gt; parameter (e.g. &lt;code&gt;"volvo v70 kombi"&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;make&lt;/code&gt;&lt;/strong&gt; — convenience filter for a single brand (e.g. &lt;code&gt;"Volvo"&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;searchUrl&lt;/code&gt;&lt;/strong&gt; — paste a full Blocket search URL with filters already applied. The URL wins if all three are set.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Use Cases
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SEK price analytics.&lt;/strong&gt; Track how asking prices for a make/model/year combo move over time in the Swedish market. Sweden's used-car market is liquid enough that weekly runs produce meaningful price series.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EV market tracking.&lt;/strong&gt; Filter by &lt;code&gt;fuel_type = El&lt;/code&gt; to chart used-EV pricing in Sweden, which is one of Europe's most mature EV markets. The &lt;code&gt;engine_power_hp&lt;/code&gt; and &lt;code&gt;year&lt;/code&gt; fields let you segment by generation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dealer inventory monitoring.&lt;/strong&gt; Filter by &lt;code&gt;seller_type = dealer&lt;/code&gt; and watch stock turnover at specific dealers by &lt;code&gt;seller_name&lt;/code&gt;. Diff successive runs to catch new arrivals and price cuts before competitors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ownership-based pricing models.&lt;/strong&gt; The &lt;code&gt;num_owners&lt;/code&gt; field is rare in European marketplace scrapers. Build models that discount price by ownership count for a given make/model/mileage bucket.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-Nordic arbitrage.&lt;/strong&gt; Compare Blocket (SEK) prices against Norwegian Finn.no (NOK) or Danish DBA (DKK) equivalents. The km-normalised &lt;code&gt;mileage_km&lt;/code&gt; field makes cross-market comparison straightforward.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ ❓
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How much does it cost?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pay-Per-Event pricing: $0.05 for actor-start (one-off per run) plus $0.002 per result row. 1,000 results costs $2.05 total. Every new Apify account gets $5 of free credit — no credit card required to try.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does Blocket show "mil" but the Actor returns "km"?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Swedish mile (mil) is 10 kilometres — different from the international mile (1.6 km). The Actor converts for you: a listing showing "23 800 mil" becomes &lt;code&gt;238000&lt;/code&gt; in &lt;code&gt;mileage_km&lt;/code&gt;, consistent with every other market in the Devil Scrapes automotive fleet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is scraping Blocket.se legal?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Blocket's terms restrict automated data collection. You are responsible for ensuring your use complies with applicable law and the site's terms. The Actor scrapes only public listing data visible to any unauthenticated browser. We do not bypass authentication, access private messages, or scrape seller phone numbers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I get mileage, gearbox, and engine power?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Those fields live on each car's detail page. Keep &lt;code&gt;enrichDetails: true&lt;/code&gt; (the default) to fill them in; set it to &lt;code&gt;false&lt;/code&gt; to halve the request count and get just make, model, year, price, and photos from the search payload.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;The Actor is live on the Apify Store. Every new Apify account starts with $5 of free credit — enough for roughly 2,400 enriched listings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apify.com/DevilScrapes/blocket-sweden-cars" rel="noopener noreferrer"&gt;Blocket Car Scraper on Apify Store&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Questions or edge cases? Use the Actor's Issues tab on Apify Console. We ship fixes weekly.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://apify.com/DevilScrapes" rel="noopener noreferrer"&gt;Devil Scrapes&lt;/a&gt; — a fleet of opinionated public-data Actors. Honest pricing, real engineering, zero fine print.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>python</category>
      <category>data</category>
      <category>automation</category>
    </item>
    <item>
      <title>How to Scrape Bilasolur.is Car Listings (Iceland) to JSON/CSV</title>
      <dc:creator>Devil Scrapes</dc:creator>
      <pubDate>Sat, 13 Jun 2026 08:34:18 +0000</pubDate>
      <link>https://dev.to/devil_scrapes/how-to-scrape-bilasoluris-car-listings-iceland-to-jsoncsv-2dl2</link>
      <guid>https://dev.to/devil_scrapes/how-to-scrape-bilasoluris-car-listings-iceland-to-jsoncsv-2dl2</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; Bilasolur.is publishes no public API, so structured used-car data requires scraping the public listings. The &lt;a href="https://apify.com/DevilScrapes/bilasolur-iceland-cars" rel="noopener noreferrer"&gt;Bilasolur Iceland Car Scraper&lt;/a&gt; on Apify handles browser fingerprint rotation, residential proxy session rotation, and retry logic for you, delivering clean typed rows at $2.05 per 1,000 results ($0.05 actor-start + $0.002 per result).&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Iceland's used-car market is small by European standards — around 350,000 registered vehicles for a population of 370,000 — but the price spreads are striking. Icelandic króna (ISK) pricing, high import duties, and a relatively isolated market mean that the same 2019 Toyota RAV4 can carry a very different tag on Bilasolur.is than on a mainland European equivalent. If you do automotive market research, run cross-border arbitrage, or build depreciation models, Iceland is a market worth having in your dataset.&lt;/p&gt;

&lt;p&gt;Bilasolur.is is the dominant used-car marketplace in Iceland. It ships no developer API and no data export. Getting a structured view of its listings means scraping the public website — which requires the right headers, a residential exit IP, and session management to handle the retries that come with any real-world scraping target.&lt;/p&gt;

&lt;p&gt;This guide shows how to pull Bilasolur.is data programmatically using the &lt;a href="https://apify.com/DevilScrapes/bilasolur-iceland-cars" rel="noopener noreferrer"&gt;Bilasolur Iceland Car Scraper&lt;/a&gt;, a managed Apify Actor that handles the infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Does Bilasolur.is Have an API? 🔎
&lt;/h2&gt;

&lt;p&gt;No. Bilasolur.is operates as a traditional HTML marketplace with no documented public API. The site's search results live at &lt;code&gt;SearchResults.aspx&lt;/code&gt; endpoints with query parameters for make, model, price band, and registration year — but all of that is HTML, not JSON, and it's served in a way that requires a browser-like client to retrieve reliably.&lt;/p&gt;

&lt;p&gt;The listing data itself — price in ISK, mileage, engine spec, colour, registration date — is split across the search result card and the individual listing detail page. Getting the full spec requires fetching both.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Data You Can Extract
&lt;/h2&gt;

&lt;p&gt;The Actor returns one row per listing. Fields from the listing card are always present; fields marked "enrichment-only" require &lt;code&gt;enrichDetails: true&lt;/code&gt;, which fetches each listing's detail page.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;listing_id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bilasolur &lt;code&gt;sid&lt;/code&gt; query parameter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;listing_url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Absolute URL to the detail page&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Make + model + variant&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;make&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Manufacturer (e.g. Volvo, Toyota)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;model&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Model name (e.g. XC90)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;year&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Manufacture/registration year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;price&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Integer price in ISK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;currency&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Always &lt;code&gt;ISK&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mileage_km&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Odometer in kilometres&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fuel_type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bensín / Dísel / Rafmagn / ... (Icelandic labels)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;transmission&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Derived from title: Sjálfskiptur (auto) / Beinskiptur (manual)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;engine_power_hp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Horsepower (hestöfl) — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;engine_size_cc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Displacement in cc — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;color&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exterior colour (Litur) — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;first_registration&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;First-registration date (M/YYYY)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;region&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Drivetrain: Framhjóladrif / Fjórhjóladrif / Afturhjóladrif&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;seller_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Seller display name — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;photo_urls&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List of photo URLs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Seller free-text description — enrichment-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;posted_date&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Date added to sales register (Skráð á söluskrá)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;scraped_at&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ISO-8601 UTC timestamp of scrape&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A note on language: Bilasolur is an Icelandic-language site. Core spec values — fuel type, drivetrain — are in Icelandic. The Actor maps them to standard English column names (&lt;code&gt;fuel_type&lt;/code&gt;, &lt;code&gt;mileage_km&lt;/code&gt;, &lt;code&gt;engine_power_hp&lt;/code&gt;) so your schema stays consistent across markets, but the values themselves are preserved as-is. &lt;code&gt;Bensín&lt;/code&gt; stays &lt;code&gt;Bensín&lt;/code&gt;; nothing is silently lost in translation.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Realistic Output Row
&lt;/h2&gt;

&lt;p&gt;Below is a sample row using the exact field names from the Actor's Pydantic &lt;code&gt;ResultRow&lt;/code&gt; model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1070046"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://bilasolur.is/CarDetails.aspx?bid=94&amp;amp;cid=524786&amp;amp;sid=1070046"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Volvo XC90"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"make"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Volvo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"XC90"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"year"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2021&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8690000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ISK"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mileage_km"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;82737&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"fuel_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Dísel"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"transmission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine_power_hp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;235&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine_size_cc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1969&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"body_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Dökkblár"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"first_registration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2/2021"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"region"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fjórhjóladrif"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"photo_urls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"https://bilasolur.is/CarImage.aspx?s=94&amp;amp;c=524786&amp;amp;p=1&amp;amp;w=400"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"posted_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.6.2026"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scraped_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-06-02T10:00:00+00:00"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That 8,690,000 ISK price is roughly €57,000 at mid-2026 rates — an accurate reflection of Iceland's import-duty-inflated used-car prices. Storing the raw ISK value lets you apply your own FX conversion rather than baking in a rate that goes stale.&lt;/p&gt;




&lt;h2&gt;
  
  
  How We Handle the Blocks
&lt;/h2&gt;

&lt;p&gt;Bilasolur is not a high-security target by the standards of a DataDome-protected site, but it is a real web server that will block naive clients. Here is what the Actor does to stay reliable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Browser fingerprint rotation.&lt;/strong&gt; We use &lt;code&gt;curl-cffi&lt;/code&gt; to impersonate real Chrome, Firefox, and Safari TLS handshakes. The server sees a real browser client, not a Python script.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Residential proxy rotation via Apify Proxy.&lt;/strong&gt; We rotate residential exit IPs and fresh session IDs on every block signal. Datacenter IPs are the fastest way to trigger blocks on smaller marketplace servers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exponential backoff with Retry-After.&lt;/strong&gt; We retry on 408, 429, and 5xx responses — up to five attempts per page, doubling the wait interval each time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate-limit-aware pacing.&lt;/strong&gt; When the target slows us down, we match its pace rather than pushing until blocked.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Loud failure, never silent.&lt;/strong&gt; A hard block exits non-zero with a descriptive status message. You never get a green run with an empty dataset.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Running It with Python 🐍
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_APIFY_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DevilScrapes/bilasolur-iceland-cars&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;searchUrl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://bilasolur.is/SearchResults.aspx?id=1&amp;amp;makeid=42&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxResults&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enrichDetails&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;proxyConfiguration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;useApifyProxy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apifyProxyGroups&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RESIDENTIAL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Scraped &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; listings&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;make&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;year&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ISK&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;searchUrl&lt;/code&gt; parameter is optional. Leave it empty to scrape the default used-cars feed, or visit bilasolur.is, apply your filters (make, model, price band, year range), and paste the resulting &lt;code&gt;SearchResults.aspx&lt;/code&gt; URL. The Actor paginates from there until it hits &lt;code&gt;maxResults&lt;/code&gt; or the last page.&lt;/p&gt;




&lt;h2&gt;
  
  
  Use Cases
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ISK price tracking.&lt;/strong&gt; Build a price series for specific makes and models in the Icelandic market. Iceland's small inventory means prices move faster than on large mainland platforms — daily runs surface trends quickly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-border import arbitrage.&lt;/strong&gt; Compare ISK asking prices against Norwegian, Danish, or German equivalents. Iceland imposes significant import duties on vehicles, which creates predictable price wedges that importers exploit. The Actor gives you the ISK side of that equation as structured data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Depreciation modelling.&lt;/strong&gt; Plot &lt;code&gt;price&lt;/code&gt; against &lt;code&gt;mileage_km&lt;/code&gt; and &lt;code&gt;year&lt;/code&gt; for a given &lt;code&gt;make&lt;/code&gt; and &lt;code&gt;model&lt;/code&gt;. With &lt;code&gt;enrichDetails&lt;/code&gt; on, you also get &lt;code&gt;engine_power_hp&lt;/code&gt; for segmenting by powertrain spec.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dealer inventory monitoring.&lt;/strong&gt; Filter by &lt;code&gt;seller_name&lt;/code&gt; or &lt;code&gt;seller_type&lt;/code&gt; to track a specific dealer's stock. Diff successive runs to catch new arrivals and price changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fresh-listing alerts.&lt;/strong&gt; The &lt;code&gt;posted_date&lt;/code&gt; field carries the date the listing was added to the sales register. Feed it into a filter to surface listings posted in the last 24 hours.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ ❓
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How much does it cost?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pay-Per-Event pricing: $0.05 for actor-start (one-off per run) plus $0.002 per result row. 1,000 results costs $2.05 total. Every new Apify account gets $5 of free credit — no credit card required to try.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The values are in Icelandic — can I get English?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Actor maps all field names to standard English (&lt;code&gt;fuel_type&lt;/code&gt;, &lt;code&gt;mileage_km&lt;/code&gt;, &lt;code&gt;engine_power_hp&lt;/code&gt;, etc.). The values from the Icelandic site — &lt;code&gt;Bensín&lt;/code&gt;, &lt;code&gt;Fjórhjóladrif&lt;/code&gt;, &lt;code&gt;Dökkblár&lt;/code&gt; — are preserved as-is. This is intentional: silent translation introduces errors for uncommon values. You can translate them in post-processing with a lookup table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is scraping Bilasolur.is legal?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bilasolur's terms restrict automated access. You are responsible for ensuring your use complies with applicable law and the site's terms. The Actor scrapes only public listing data visible to any unauthenticated browser. We do not bypass authentication or access any private user data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does detail enrichment add, and is it worth it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With &lt;code&gt;enrichDetails: true&lt;/code&gt;, the Actor fetches each listing's detail page for engine power (hestöfl), engine displacement, exterior colour, and the registration date. It roughly doubles the request count and run time. If you only need make, model, year, price, mileage, fuel type, drivetrain, and photos — which all come from the listing card — set &lt;code&gt;enrichDetails: false&lt;/code&gt; to halve your costs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;The Actor is live on the Apify Store. Every new Apify account starts with $5 of free credit — enough for roughly 2,400 enriched listings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apify.com/DevilScrapes/bilasolur-iceland-cars" rel="noopener noreferrer"&gt;Bilasolur Iceland Car Scraper on Apify Store&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Questions or edge cases? Open an issue on the Actor's Issues tab on Apify Console.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://apify.com/DevilScrapes" rel="noopener noreferrer"&gt;Devil Scrapes&lt;/a&gt; — a fleet of opinionated public-data Actors. Honest pricing, real engineering, zero fine print.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>python</category>
      <category>data</category>
      <category>automation</category>
    </item>
    <item>
      <title>How to Scrape Autovit.ro Car Listings (Romania) to JSON/CSV</title>
      <dc:creator>Devil Scrapes</dc:creator>
      <pubDate>Sat, 13 Jun 2026 08:29:03 +0000</pubDate>
      <link>https://dev.to/devil_scrapes/how-to-scrape-autovitro-car-listings-romania-to-jsoncsv-13pa</link>
      <guid>https://dev.to/devil_scrapes/how-to-scrape-autovitro-car-listings-romania-to-jsoncsv-13pa</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; Autovit.ro publishes no public API, so the only way to get structured used-car data is to scrape the public listings. The &lt;a href="https://apify.com/DevilScrapes/autovit-romania-cars" rel="noopener noreferrer"&gt;Autovit Romania Car Scraper&lt;/a&gt; on Apify handles browser fingerprint rotation, residential proxy session rotation, and retry logic for you, returning clean typed rows at $2.05 per 1,000 results ($0.05 actor-start + $0.002 per result).&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Romania's used-car market runs on autovit.ro. The site is part of the Adevinta/OLX group — the same engine that powers OTOMOTO in Poland and Standvirtual in Portugal — and it moves serious volume: tens of thousands of listings at any moment, priced in both EUR and RON. If you want to track asking prices, monitor dealer inventory, or build an arbitrage pipeline across the Romanian market, you need that data in a format your code can actually work with.&lt;/p&gt;

&lt;p&gt;The problem is that autovit.ro guards its listings behind DataDome, a commercial anti-bot stack that blocks naive HTTP clients almost immediately. Getting past it requires rotating real browser TLS fingerprints, using residential exit IPs, and backing off gracefully when the target pushes back. That's before you even think about pagination.&lt;/p&gt;

&lt;p&gt;This guide walks you through exactly how to pull autovit.ro data programmatically, using the &lt;a href="https://apify.com/DevilScrapes/autovit-romania-cars" rel="noopener noreferrer"&gt;Autovit Romania Car Scraper&lt;/a&gt; — a managed Apify Actor that does the infrastructure work so you can focus on the data.&lt;/p&gt;




&lt;h2&gt;
  
  
  Does Autovit.ro Have an API? 🔎
&lt;/h2&gt;

&lt;p&gt;No. Autovit.ro offers no developer API, no data export, and no structured feed. The listing data lives in HTML pages and in embedded JSON-LD payloads — both behind DataDome protection. There is also an internal API the site's Next.js frontend calls, but it requires authenticated sessions and rotates its challenge parameters regularly, which means any direct client you build against it breaks without warning.&lt;/p&gt;

&lt;p&gt;The practical path is a managed scraper that stays current with the site's anti-bot countermeasures, so your pipeline keeps running when the site updates its defences.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Data You Can Extract
&lt;/h2&gt;

&lt;p&gt;Each listing on autovit.ro carries a rich spec sheet. The Actor surfaces every field that appears consistently across listings:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;listing_id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Autovit advert ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;listing_url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Absolute URL to the listing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Make + model + version headline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;make&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Manufacturer (e.g. BMW, Dacia, Volkswagen)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;model&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Model name (e.g. Logan, Range Rover Sport)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;version&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Trim / engine spec line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;year&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Production year (Anul producției)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;price&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Integer price in listing currency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;currency&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;EUR or RON&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mileage_km&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Odometer in kilometres&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fuel_type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Benzina / Diesel / Hibrid / Electric&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gearbox&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Manuala / Automata (detail page)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;transmission&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Drivetrain, e.g. 4x4 (automat) (detail page)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;engine_power_hp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Power in horsepower (CP)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;engine_size_cc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Displacement in cc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;body_type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SUV / Berlina / Break, etc. (detail page)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;color&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exterior colour in Romanian (detail page)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;location&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;City&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;region&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Romanian county / judet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;seller_type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;private&lt;/code&gt; or &lt;code&gt;dealer&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;seller_name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Dealer name when present&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;photo_urls&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List of photo URLs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Full Romanian listing text (detail page)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;posted_date&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ISO timestamp of listing creation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;scraped_at&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ISO timestamp of scrape&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Fields marked "detail page" are populated only when &lt;code&gt;enrichDetails&lt;/code&gt; is enabled. Price, make/model, year, mileage, fuel, power, and seller all come from the search payload — you can skip enrichment to halve requests if those are enough.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Realistic Output Row
&lt;/h2&gt;

&lt;p&gt;Here is what a single result looks like as JSON, using the exact field names from the Actor's Pydantic &lt;code&gt;ResultRow&lt;/code&gt; model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"7058024533"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.autovit.ro/autoturisme/anunt/land-rover-range-rover-sport-ID7HEKBn.html"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Land Rover Range Rover Sport 4.4 V8 P635 MHEV SV Black"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"make"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Land Rover"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Range Rover Sport"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"4.4 V8 P635 MHEV SV Black"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"year"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2026&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;187737&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EUR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mileage_km"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"fuel_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Benzina"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"gearbox"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Automata"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"transmission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"4x4 (automat)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine_power_hp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;635&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine_size_cc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4395&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"body_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SUV"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Negru"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Pitesti"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"region"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Arges"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dealer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BRIT Motor AG - RANGE ROVER | DEFENDER | DISCOVERY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"photo_urls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"https://ireland.apollo.olxcdn.com/v1/files/.../image"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Range Rover Sport 4.4 V8 635 CP AWD Auto MHEV SV Black ..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"posted_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-06-01T17:30:53Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scraped_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-06-02T00:00:00+00:00"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice &lt;code&gt;currency&lt;/code&gt; can be either &lt;code&gt;EUR&lt;/code&gt; or &lt;code&gt;RON&lt;/code&gt; — autovit.ro allows sellers to list in both, and the Actor reads each listing's own currency code rather than assuming one.&lt;/p&gt;




&lt;h2&gt;
  
  
  How We Handle the Blocks
&lt;/h2&gt;

&lt;p&gt;Autovit.ro is fronted by DataDome. A plain &lt;code&gt;requests.get()&lt;/code&gt; call gets a challenge page almost immediately. Here is what the Actor does so you don't have to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Browser fingerprint rotation.&lt;/strong&gt; We use &lt;code&gt;curl-cffi&lt;/code&gt; to impersonate real Chrome, Firefox, and Safari TLS handshakes — the full ClientHello, ALPN extension order, and HTTP/2 SETTINGS frame. The target sees a real browser, not Python.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Residential proxy rotation via Apify Proxy.&lt;/strong&gt; On every block signal we request a fresh &lt;code&gt;session_id&lt;/code&gt; and a new residential exit IP. Datacenter IPs are a fast path to a ban on DataDome targets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exponential backoff with Retry-After.&lt;/strong&gt; We retry on 408, 429, and 5xx — up to five attempts per page, doubling the wait each time and honouring the server's own &lt;code&gt;Retry-After&lt;/code&gt; header.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate-limit-aware pacing.&lt;/strong&gt; When the target pushes back, we slow down rather than hammering until banned.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Loud failure, never silent.&lt;/strong&gt; If we hit a hard ban, the Actor exits non-zero with a clear status message. You never get an empty dataset with a green status.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Running It with Python 🐍
&lt;/h2&gt;

&lt;p&gt;Install the Apify client and run the Actor programmatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_APIFY_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DevilScrapes/autovit-romania-cars&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;searchUrl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.autovit.ro/autoturisme/bmw&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxResults&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enrichDetails&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;proxyConfiguration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;useApifyProxy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apifyProxyGroups&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RESIDENTIAL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Scraped &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; listings&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;make&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;year&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;currency&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;searchUrl&lt;/code&gt; is just the autovit.ro results URL with your filters already applied. Open autovit.ro in a browser, set your filters (make, model, price band, mileage range), and copy the URL from the address bar — the Actor walks pagination from there.&lt;/p&gt;




&lt;h2&gt;
  
  
  Use Cases
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Used-car price analytics.&lt;/strong&gt; Build a time series of asking prices for a specific make/model/year combination. Run the Actor daily, push results to a database, and chart the market. Romanian sellers list in both EUR and RON; the &lt;code&gt;currency&lt;/code&gt; + &lt;code&gt;price&lt;/code&gt; fields let you normalise to whichever you prefer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dealer inventory monitoring.&lt;/strong&gt; Filter by &lt;code&gt;seller_type = dealer&lt;/code&gt; and a specific &lt;code&gt;seller_name&lt;/code&gt;. Diff successive runs to catch new arrivals and price cuts before competitors do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Market research.&lt;/strong&gt; Aggregate &lt;code&gt;fuel_type&lt;/code&gt; and &lt;code&gt;gearbox&lt;/code&gt; across the full Romanian market to measure EV, hybrid, and automatic transmission adoption over time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lead generation.&lt;/strong&gt; Build a directory of Romanian car dealers from &lt;code&gt;seller_name&lt;/code&gt; + &lt;code&gt;location&lt;/code&gt; + &lt;code&gt;region&lt;/code&gt;. Cross-reference with runs over time to score dealers by listing volume.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Arbitrage and sourcing.&lt;/strong&gt; Apply tight filters — low mileage, specific power band, narrow year range — and run daily. Surface underpriced listings the moment they appear.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ ❓
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How much does it cost?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pay-Per-Event pricing: $0.05 for actor-start (one-off per run) plus $0.002 per result row. 1,000 results costs $2.05 total. Every new Apify account gets $5 of free credit — no credit card required to try.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is scraping autovit.ro legal?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Autovit.ro's ToS restricts automated access to the site. You are responsible for ensuring your use complies with applicable law and the site's terms. The Actor scrapes only public listing data that is visible to any unauthenticated browser. We do not bypass authentication, access private user data, or circumvent any paywall.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How often should I run it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Autovit.ro listing data changes daily. For price-tracking use cases, a daily run is sufficient. For "new listing" alerts you can run every few hours. Apify lets you schedule runs via the Console or the API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if listings stop appearing?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;DataDome updates its challenge logic periodically. If a run returns fewer results than expected, check the run log — the Actor will have logged the HTTP status codes and retry attempts. We ship updates to keep pace with site changes; subscribe to Actor release notes on Apify to get notified.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;The Actor is live on the Apify Store. Every new Apify account starts with $5 of free credit — enough for roughly 2,400 enriched listings at the PPE rates above.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apify.com/DevilScrapes/autovit-romania-cars" rel="noopener noreferrer"&gt;Autovit Romania Car Scraper on Apify Store&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Questions or edge cases? Use the Actor's Issues tab on Apify Console. The devil's in the data — we read every report.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://apify.com/DevilScrapes" rel="noopener noreferrer"&gt;Devil Scrapes&lt;/a&gt; — a fleet of opinionated public-data Actors. Honest pricing, real engineering, zero fine print.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>python</category>
      <category>data</category>
      <category>automation</category>
    </item>
    <item>
      <title>How to Scrape AutoScout24.de Car Listings (Germany) to JSON/CSV</title>
      <dc:creator>Devil Scrapes</dc:creator>
      <pubDate>Sat, 13 Jun 2026 08:23:47 +0000</pubDate>
      <link>https://dev.to/devil_scrapes/how-to-scrape-autoscout24de-car-listings-germany-to-jsoncsv-15f9</link>
      <guid>https://dev.to/devil_scrapes/how-to-scrape-autoscout24de-car-listings-germany-to-jsoncsv-15f9</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; AutoScout24.de publishes no public API. Use the &lt;a href="https://apify.com/DevilScrapes/autoscout24-germany-cars" rel="noopener noreferrer"&gt;AutoScout24 Germany Car Scraper&lt;/a&gt; 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.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does AutoScout24.de have an API? 🔎
&lt;/h2&gt;

&lt;p&gt;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 &lt;code&gt;__NEXT_DATA__&lt;/code&gt; 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.&lt;/p&gt;

&lt;p&gt;We handle this. The Actor uses &lt;code&gt;curl-cffi&lt;/code&gt; 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 &lt;code&gt;session_id&lt;/code&gt; and exit IP on every block. Retries use exponential backoff with a 30-second cap and honour &lt;code&gt;Retry-After&lt;/code&gt; headers. The &lt;code&gt;__NEXT_DATA__&lt;/code&gt; payload is parsed directly, giving structured data without fragile CSS selectors.&lt;/p&gt;

&lt;h2&gt;
  
  
  What data does the scraper return? 📤
&lt;/h2&gt;

&lt;p&gt;One row per listing, validated by the &lt;code&gt;ResultRow&lt;/code&gt; 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:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



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

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

&lt;p&gt;Enable &lt;code&gt;enrichDetails&lt;/code&gt; 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.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to run it with Python 🐍
&lt;/h2&gt;

&lt;p&gt;Install the Apify client:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;apify-client
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pass a make/model filter, or paste any AutoScout24 search URL with your filters pre-applied:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_APIFY_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DevilScrapes/autoscout24-germany-cars&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;make&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;volkswagen&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;golf&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxResults&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enrichDetails&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;proxyConfiguration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;useApifyProxy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apifyProxyGroups&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;RESIDENTIAL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Scraped &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; listings&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;make&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;version&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;year&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EUR&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mileage_km&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;km&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;seller_name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;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 &lt;code&gt;searchUrl&lt;/code&gt; instead of using the &lt;code&gt;make&lt;/code&gt;/&lt;code&gt;model&lt;/code&gt; shortcuts.&lt;/p&gt;

&lt;h2&gt;
  
  
  What can you build with German used-car data? 💡
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Price analytics for the EU's largest market.&lt;/strong&gt; 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.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Depreciation modelling.&lt;/strong&gt; Pair &lt;code&gt;price&lt;/code&gt;, &lt;code&gt;mileage_km&lt;/code&gt;, &lt;code&gt;first_registration&lt;/code&gt;, and &lt;code&gt;year&lt;/code&gt; 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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-border arbitrage.&lt;/strong&gt; 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.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  How much does it cost? 💰
&lt;/h2&gt;

&lt;p&gt;Pay-Per-Event pricing — charges fire only when results land in your dataset:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;actor-start&lt;/code&gt; (once per run)&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;result-row&lt;/code&gt; (per listing)&lt;/td&gt;
&lt;td&gt;$0.002&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;1,000 listings costs $2.05&lt;/strong&gt; ($0.05 start + 1,000 × $0.002). No results, no &lt;code&gt;result-row&lt;/code&gt; charges. New Apify accounts receive $5 of free credit; no credit card required to start.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ ❓
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is scraping AutoScout24.de legal?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AutoScout24 caps search results at ~400 pages — how do I get more data?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does detail enrichment add?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With &lt;code&gt;enrichDetails: true&lt;/code&gt;, the Actor fetches each listing's detail page to add: &lt;code&gt;description&lt;/code&gt;, &lt;code&gt;body_type&lt;/code&gt;, &lt;code&gt;color&lt;/code&gt;, &lt;code&gt;engine_size_cc&lt;/code&gt;, &lt;code&gt;latitude&lt;/code&gt;, &lt;code&gt;longitude&lt;/code&gt;, and full-resolution &lt;code&gt;photo_urls&lt;/code&gt;. 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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if AutoScout24 blocks a request?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are prices inclusive of VAT?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;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 &lt;code&gt;version&lt;/code&gt; field often carries clues (e.g. "EXPORT" in the title). We return the price exactly as shown — no VAT adjustment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get started
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Store link:&lt;/strong&gt; &lt;a href="https://apify.com/DevilScrapes/autoscout24-germany-cars" rel="noopener noreferrer"&gt;https://apify.com/DevilScrapes/autoscout24-germany-cars&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://apify.com/DevilScrapes" rel="noopener noreferrer"&gt;Devil Scrapes&lt;/a&gt; — a fleet of opinionated public-data Actors. Honest pricing, real engineering, zero fine print.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Further reading:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.apify.com/sdk/python/" rel="noopener noreferrer"&gt;Apify Python SDK documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.autoscout24.de/lst" rel="noopener noreferrer"&gt;AutoScout24.de used cars&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.apify.com/platform/actors/publishing/monetize" rel="noopener noreferrer"&gt;Apify Pay-Per-Event pricing model&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webscraping</category>
      <category>python</category>
      <category>data</category>
      <category>automation</category>
    </item>
    <item>
      <title>How to Scrape AUTO.RIA Ukraine Car Listings to JSON/CSV</title>
      <dc:creator>Devil Scrapes</dc:creator>
      <pubDate>Sat, 13 Jun 2026 08:18:32 +0000</pubDate>
      <link>https://dev.to/devil_scrapes/how-to-scrape-autoria-ukraine-car-listings-to-jsoncsv-420l</link>
      <guid>https://dev.to/devil_scrapes/how-to-scrape-autoria-ukraine-car-listings-to-jsoncsv-420l</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; AUTO.RIA (auto.ria.com) carries around 300,000 live used-car ads and is Ukraine's largest car marketplace. Use the &lt;a href="https://apify.com/DevilScrapes/autoria-ukraine-cars" rel="noopener noreferrer"&gt;AUTO.RIA Ukraine Car Scraper&lt;/a&gt; on Apify to extract price in USD or UAH, make, model, year, mileage, fuel type, transmission, engine, body type, colour, VIN, doors, location, seller type, and photos — no API key required. Output arrives as clean JSON or CSV.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When analysts, researchers, and developers need structured data on Ukraine's used-car market, AUTO.RIA is the authoritative source. With roughly 300,000 live ads at any given time, the platform captures a representative cross-section of vehicle supply, pricing, and regional distribution across every oblast. AUTO.RIA does offer a separate keyed developer API, but it carries access restrictions and a separate approval process. The public website is where the data actually lives — and where this Actor works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does AUTO.RIA have an API? 🔎
&lt;/h2&gt;

&lt;p&gt;AUTO.RIA offers a separately keyed developer API that requires registration and approval. However, most of the rich listing data — seller descriptions, photo galleries, VIN, door count, exact engine specs — is only fully available through the public website. This Actor scrapes the public site, which means it accesses the same information any visitor sees: no developer key needed, no approval process, no per-endpoint quota tied to an API plan.&lt;/p&gt;

&lt;p&gt;The site is not a pushover technically. It monitors request fingerprints and access patterns. We rotate Chrome, Firefox, and Safari TLS handshakes via &lt;code&gt;curl-cffi&lt;/code&gt; impersonation, route through Apify Proxy with a fresh &lt;code&gt;session_id&lt;/code&gt; on every block event, and back off with exponential delay before retrying. Up to 5 attempts per request before we fail loud rather than silently swallow the error.&lt;/p&gt;

&lt;h2&gt;
  
  
  What data does the scraper return? 📤
&lt;/h2&gt;

&lt;p&gt;AUTO.RIA's data model is richer than most EU marketplace scrapers because listings include VIN numbers and dual-currency pricing. Every row is validated by the &lt;code&gt;ResultRow&lt;/code&gt; Pydantic model before it lands in your dataset:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"39954693"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"listing_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://auto.ria.com/uk/auto_volkswagen_tiguan_39954693.html"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Volkswagen Tiguan 2011"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"make"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Volkswagen"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Tiguan"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"year"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2011&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12800&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"USD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price_uah"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;565760&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mileage_km"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;270000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"fuel_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Дизель"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"transmission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Автомат"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine_size_cc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1970&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engine_power_hp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"body_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Позашляховик / Кросовер"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Білий"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"vin"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"WVGZZZ5NZBW559888"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"doors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Івано-Франківськ"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"region"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"private"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"seller_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Надюша"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"photo_urls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://cdn0.riastatic.com/photosnew/auto/photo/volkswagen_tiguan__644750158s.webp"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"first_registration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"posted_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scraped_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-06-02T00:30:00+00:00"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The complete field list: &lt;code&gt;listing_id&lt;/code&gt;, &lt;code&gt;listing_url&lt;/code&gt;, &lt;code&gt;title&lt;/code&gt;, &lt;code&gt;make&lt;/code&gt;, &lt;code&gt;model&lt;/code&gt;, &lt;code&gt;year&lt;/code&gt;, &lt;code&gt;price&lt;/code&gt;, &lt;code&gt;currency&lt;/code&gt;, &lt;code&gt;price_uah&lt;/code&gt;, &lt;code&gt;mileage_km&lt;/code&gt;, &lt;code&gt;fuel_type&lt;/code&gt;, &lt;code&gt;transmission&lt;/code&gt;, &lt;code&gt;engine_size_cc&lt;/code&gt;, &lt;code&gt;engine_power_hp&lt;/code&gt;, &lt;code&gt;body_type&lt;/code&gt;, &lt;code&gt;color&lt;/code&gt;, &lt;code&gt;vin&lt;/code&gt;, &lt;code&gt;doors&lt;/code&gt;, &lt;code&gt;location&lt;/code&gt;, &lt;code&gt;region&lt;/code&gt;, &lt;code&gt;seller_type&lt;/code&gt;, &lt;code&gt;seller_name&lt;/code&gt;, &lt;code&gt;photo_urls&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, &lt;code&gt;first_registration&lt;/code&gt;, &lt;code&gt;posted_date&lt;/code&gt;, &lt;code&gt;scraped_at&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A few things worth noting about the data. AUTO.RIA quotes most cars in US dollars — &lt;code&gt;currency&lt;/code&gt; reflects whatever the seller chose (USD, EUR, or UAH), and when the page also shows a hryvnia figure we surface it in the dedicated &lt;code&gt;price_uah&lt;/code&gt; field. Ukrainian category values like &lt;code&gt;Дизель&lt;/code&gt; (diesel), &lt;code&gt;Автомат&lt;/code&gt; (automatic), and &lt;code&gt;Позашляховик / Кросовер&lt;/code&gt; (SUV/crossover) are preserved as-is. VIN numbers appear on a meaningful subset of listings and are a direct data point for cross-referencing vehicle history.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to run it with Python 🐍
&lt;/h2&gt;

&lt;p&gt;Install the Apify client:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;apify-client
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run against AUTO.RIA's default used-car catalogue, or paste a filtered search URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_APIFY_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DevilScrapes/autoria-ukraine-cars&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;categoryId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxResults&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enrichDetails&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;proxyConfiguration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;useApifyProxy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Scraped &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; listings&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;make&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;year&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;currency&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mileage_km&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;km&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;vin&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To target a specific make, model, region, or price range, build the search on auto.ria.com, copy the resulting URL, and pass it as &lt;code&gt;searchUrl&lt;/code&gt;. The Actor forwards the URL's query parameters to AUTO.RIA's search backend so you get exactly the matching slice of the catalogue.&lt;/p&gt;

&lt;h2&gt;
  
  
  What can you build with Ukrainian used-car data? 💡
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Price intelligence for USD-denominated markets.&lt;/strong&gt; Most Ukrainian sellers quote in US dollars, making AUTO.RIA one of the few large EU-adjacent marketplaces where USD is the primary price unit. This is directly useful for analysts tracking USD/UAH exchange effects on vehicle affordability, or for comparing to other USD-denominated markets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VIN-backed vehicle sourcing.&lt;/strong&gt; AUTO.RIA listings frequently include VINs — a rarity on many European platforms. A VIN lets you query history databases (Carfax, AutoCheck, or Ukrainian equivalents) before committing to a cross-border purchase. Pull &lt;code&gt;vin&lt;/code&gt; + &lt;code&gt;price&lt;/code&gt; + &lt;code&gt;mileage_km&lt;/code&gt; for a filtered model and you have a sourcing shortlist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dealer vs. private-seller segmentation.&lt;/strong&gt; The &lt;code&gt;seller_type&lt;/code&gt; field distinguishes &lt;code&gt;dealer&lt;/code&gt; from &lt;code&gt;private&lt;/code&gt;. Ukrainian dealer networks operate differently from Western European chains; this split enables separate analysis of professional inventory vs. private-sale dynamics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regional market analysis.&lt;/strong&gt; The &lt;code&gt;location&lt;/code&gt; and &lt;code&gt;region&lt;/code&gt; fields map to Ukrainian cities and oblasts. Run the Actor filtered by city — Kyiv, Lviv, Odesa, Kharkiv — and compare price distributions to identify regional price differentials within the domestic market.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Import/export research.&lt;/strong&gt; With ~300,000 live ads, AUTO.RIA is large enough for statistically meaningful segment analysis. Pair &lt;code&gt;make&lt;/code&gt;, &lt;code&gt;model&lt;/code&gt;, &lt;code&gt;year&lt;/code&gt;, &lt;code&gt;mileage_km&lt;/code&gt;, and &lt;code&gt;price&lt;/code&gt; to identify models where the Ukrainian asking price (adjusted for import duties) creates an arbitrage window relative to Polish or German prices.&lt;/p&gt;

&lt;h2&gt;
  
  
  How much does it cost? 💰
&lt;/h2&gt;

&lt;p&gt;Pay-Per-Event pricing — charges only fire when results land in your dataset:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;actor-start&lt;/code&gt; (once per run)&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;result-row&lt;/code&gt; (per listing)&lt;/td&gt;
&lt;td&gt;$0.002&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;1,000 listings costs $2.05&lt;/strong&gt; ($0.05 start + 1,000 × $0.002). If a run returns nothing, only the $0.05 start fee applies. New Apify accounts get $5 of free credit; no credit card is needed to begin.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ ❓
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What currency is &lt;code&gt;price&lt;/code&gt; in?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AUTO.RIA allows sellers to list in USD, EUR, or UAH. The &lt;code&gt;currency&lt;/code&gt; field records whichever currency the seller chose. Where the page also shows a hryvnia equivalent, we surface it in &lt;code&gt;price_uah&lt;/code&gt;. There is no automatic conversion to a fixed currency — the raw seller price is preserved exactly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I scrape a filtered search?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. Paste any AUTO.RIA results URL into &lt;code&gt;searchUrl&lt;/code&gt; — its filter parameters (brand, model, price range, region, year, mileage) are forwarded to AUTO.RIA's search backend. The Actor then paginates that filtered result set up to your &lt;code&gt;maxResults&lt;/code&gt; cap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is &lt;code&gt;categoryId&lt;/code&gt;?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AUTO.RIA organises listings by vehicle category. Category &lt;code&gt;1&lt;/code&gt; is passenger cars (the default). You can change it to target motorcycles, trucks, or other vehicle types that AUTO.RIA hosts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is scraping AUTO.RIA legal?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Actor accesses only data visible to any anonymous visitor — no login, no gated content. AUTO.RIA has a separate developer API for programmatic access. Web scraping legality varies by jurisdiction; consult legal counsel before commercial use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How far can I paginate?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AUTO.RIA lists around 300,000 used cars. The Actor's &lt;code&gt;maxResults&lt;/code&gt; cap tops out at 1,000 per run. For larger pulls, run multiple times with different &lt;code&gt;searchUrl&lt;/code&gt; filters (by region, make, or price band) to partition the catalogue into manageable slices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get started
&lt;/h2&gt;

&lt;p&gt;The AUTO.RIA Ukraine Car Scraper is available on the Apify Store now. Start free — Apify's $5 credit covers your first few hundred enriched listings with no credit card required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Store link:&lt;/strong&gt; &lt;a href="https://apify.com/DevilScrapes/autoria-ukraine-cars" rel="noopener noreferrer"&gt;https://apify.com/DevilScrapes/autoria-ukraine-cars&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://apify.com/DevilScrapes" rel="noopener noreferrer"&gt;Devil Scrapes&lt;/a&gt; — a fleet of opinionated public-data Actors. Honest pricing, real engineering, zero fine print.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Further reading:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.apify.com/sdk/python/" rel="noopener noreferrer"&gt;Apify Python SDK documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://auto.ria.com/uk/search/" rel="noopener noreferrer"&gt;AUTO.RIA used cars search&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.apify.com/platform/actors/publishing/monetize" rel="noopener noreferrer"&gt;Apify Pay-Per-Event pricing model&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webscraping</category>
      <category>python</category>
      <category>data</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
