Cars.bg Bulgaria Car Scraper icon

Automation

Cars.bg Bulgaria Car Scraper

Scrape used-car listings from Cars.bg, Bulgaria's largest car marketplace — make, model, year, price in EUR and BGN, mileage, fuel type, gearbox, engine power, body type, color, seller, and photos. Export to JSON or CSV; enrich each listing from its detail page.

Free Apify credit covers a first run. No credit card to try.

What this Actor scrapes

Cars.bg is Bulgaria's largest used-car marketplace and ships no public API. This Actor scrapes the public listings — paste a filtered search URL or use the default used-cars feed — and returns one clean, typed row per car: make, model, year, price (EUR and BGN), mileage (km), fuel, location, seller type, and photo URLs. By default, detail-page enrichment is off — you get everything visible on the listing card. To add body type, engine size (cc), engine power (hp), first-registration month, color, full description, and seller name, enable enrichDetails. Note: Cars.bg guards detail pages more aggressively than listing pages — enrichment may be rate-limited on smaller proxy pools. Built on curl-cffi with browser TLS impersonation and Apify residential proxies.

What we handle for you

  • 🛡️ Browser fingerprint rotationcurl-cffi impersonates real Chrome / Firefox / Safari TLS handshakes so the target sees a browser, not Python.
  • 🌐 Residential proxy rotation via Apify Proxy — fresh session and exit IP on every block.
  • 🔁 Retries with exponential backoff on 408 / 429 / 5xx — up to 5 attempts per page, Retry-After honoured.
  • 🧱 Rate-limit-aware pacing — when the target pushes back, we slow down instead of getting banned.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable IDs, JSON / CSV / Excel export straight from the Apify Console.
  • 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.

Use cases

  • Market pricing — track used-car asking prices by make, model, and year across Bulgaria in both EUR and BGN.
  • Dealer intelligence — monitor inventory and pricing moves from <code>seller_type</code> and <code>location</code>.
  • Cross-border arbitrage — compare Bulgarian prices against other EU markets to spot import deals.
  • Depreciation modelling — build price-vs-mileage and price-vs-age curves per model.
  • Lead generation — surface fresh private-seller listings the moment they post.

Input

Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.

FieldTypeRequiredWhat it does
searchUrl string no Full Cars.bg search/results URL with filters already applied (e.g. https://www.cars.bg/carslist.php?subtype=1&brandId=22). Leave empty to scrape the default used-cars feed.
maxResults integer no Hard cap on dataset rows.
enrichDetails boolean no Fetch each listing's detail page for body type, engine size, first-registration month, color, full description, and seller name. Doubles the request count. Note: cars.bg guards detail pages more aggressively than…
{
  "maxResults": 5,
  "enrichDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}

Output

One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.

listing_idlisting_urltitlemakemodelyearpricecurrencyprice_bgnmileage_kmfuel_typetransmissionengine_power_hpengine_size_ccbody_typecolor

{
  "listing_id": "68eb6bba3c8c0e169c027093",
  "listing_url": "https://www.cars.bg/offer/68eb6bba3c8c0e169c027093",
  "title": "Mazda 6 2,2MZR-CD",
  "make": "Mazda",
  "model": "6 2,2MZR-CD",
  "year": 2009,
  "price": 2850,
  "currency": "EUR",
  "price_bgn": 5574,
  "mileage_km": 308000,
  "fuel_type": "\u0414\u0438\u0437\u0435\u043b",
  "transmission": "\u0420\u044a\u0447\u043d\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438",
  "engine_power_hp": 185,
  "engine_size_cc": 2200,
  "body_type": "\u041a\u043e\u043c\u0431\u0438",
  "color": "\u0421\u0432\u0435\u0442\u043b\u043e \u0441\u0438\u0432 \u043c\u0435\u0442\u0430\u043b\u0438\u043a",
  "first_registration": "\u041c\u0430\u0440\u0442 2009",
  "location": "\u041c\u043e\u043d\u0442\u0430\u043d\u0430",
  "region": null,
  "seller_type": "private",
  "seller_name": "Aleksandr",
  "photo_urls": [
    "https://g1-bg.cars.bg/2025-10-12_1/68eb68ec14f9749b22054f64b.jpg"
  ],
  "description": "\u041f\u0440\u043e\u0434\u0430\u0432\u0430\u043c Mazda 6 \u043a\u043e\u043c\u0431\u0438 (GH), 2009 \u0433. ...",
  "posted_date": "\u0434\u043d\u0435\u0441, 01:44",
  "scraped_at": "2026-06-02T10:00:00+00:00"
}

Pricing

EventPriceWhen
Actor start$0.20Once per run, covers warm-up and proxy session setup.
result-row$0.0020Per result written to the dataset.

You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.

Limitations

  • Detail-page enrichment is opt-in and may fail on FREE-tier proxy pools. Cars.bg returns HTTP 403 on detail pages for many residential exit IPs. Fields like body_type, engine_size_cc, color, first_registration, description, and seller_name are null by default and only populate when enrichDetails: true is set. If you enable enrichment and see empty fields, upgrade your proxy tier.
  • Listing cards are not filterable by body type, color, or first registration — those fields are metadata returned from the detail page only.
  • Cars.bg paginates results; very deep queries (thousands of rows) can be truncated by the site.
  • Fuel-type, gearbox, body-type, and color values are returned in the site's original Bulgarian (Cyrillic). No translation is applied.
  • Seller phone numbers sit behind a click-to-reveal widget and are not scraped.

FAQ

Do I need a search URL?
No. Leave <code>searchUrl</code> empty and the Actor scrapes the default used-cars feed. To target a make, model, or price band, apply the filters on cars.bg and paste the resulting URL — the Actor scrapes exactly that result set.
What currency are prices in?
Cars.bg shows each price in both euros and Bulgarian lev. <code>price</code> is the integer EUR amount (<code>currency</code> is always <code>EUR</code>) and <code>price_bgn</code> carries the BGN amount shown alongside it.
What does detail enrichment add?
enrichDetails is off by default. When you enable it, the Actor fetches each listing's detail page for gearbox, engine displacement, engine power, body type, color, first-registration month, full description, and seller name. With enrichment off you still get make, model, year, price (EUR + BGN), mileage, fuel, location, seller type, and photos from the listing card — which is what the default run produces. Note: Cars.bg guards detail pages more aggressively than listing pages, so enrichment may be rate-limited on smaller proxy pools.
Is this an official Cars.bg API?
No. Cars.bg offers no public API. This Actor scrapes the public website politely.
The labels are in Bulgarian — can I get English?
We map the core spec fields to standard English column names (make, model, year, mileage_km, fuel_type, ...). Bulgarian category values such as <code>Дизел</code> or <code>Ръчни скорости</code> are preserved as-is so nothing is lost in translation.

Ready to run it?

Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.

Read more

Articles about this Actor

Related Actors

Teams that run this also run