Cars.bg Bulgaria Car Scraper avatar

Cars.bg Bulgaria Car Scraper

Pricing

Pay per event

Go to Apify Store
Cars.bg Bulgaria Car Scraper

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.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share


🎯 What this 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 seller_type and location.
  • 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.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
searchUrlstringno'—'Full Cars.bg search/results URL with filters already applied (e.g. https://www.cars.bg/carslist.php?subtype=1&bran
maxResultsintegerno50Hard cap on dataset rows.
enrichDetailsbooleannofalse (off)Opt-in. Fetches each listing's detail page for body type, engine size, first-registration month, color, full description, and seller name. Doubles request count. Cars.bg guards detail pages more aggressively than listing pages — may be rate-limited on smaller proxy pools.
proxyConfigurationobjectno{'useApifyProxy': True, 'apifyProxyGroups': ['RESIDENTIAL']}Apify Proxy spec. Residential exits are safest for Cars.bg.

Example input

{
"maxResults": 5,
"enrichDetails": false,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": [
"RESIDENTIAL"
]
}
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
listing_idstringCars.bg listing reference ID.
listing_urlstringAbsolute URL to the listing detail page.
titlestringListing title (make + model).
make['string', 'null']Car make (e.g. Mazda).
model['string', 'null']Car model (e.g. 6).
year['integer', 'null']Manufacture year.
price['integer', 'null']Asking price as an integer in EUR.
currency['string', 'null']ISO-4217 currency code for the price field — always EUR.
price_bgn['integer', 'null']Asking price converted to Bulgarian lev (BGN), as shown on the listing.
mileage_km['integer', 'null']Odometer reading in kilometres.
fuel_type['string', 'null']Fuel type (Дизел / Бензин / Електрически / ...).
transmission['string', 'null']Gearbox (Автоматични / Ръчни скорости). Enrichment-only.
engine_power_hp['integer', 'null']Engine power in horsepower (к.с.). Enrichment-only.
engine_size_cc['integer', 'null']Engine displacement in cubic centimetres (см3). Enrichment-only.
body_type['string', 'null']Body type (Комби / Седан / Джип / ...). Enrichment-only.
color['string', 'null']Exterior color. Enrichment-only.
first_registration['string', 'null']First-registration month and year (e.g. 'Март 2009'). Enrichment-only.
location['string', 'null']Seller location (city).
region['string', 'null']Region. Reserved for future use.
seller_type['string', 'null']Seller type — dealer or private.
seller_name['string', 'null']Seller display name. Enrichment-only.
photo_urlsarrayList of listing photo URLs.
description['string', 'null']Seller's free-text description. Enrichment-only.
posted_date['string', 'null']Relative posting time from the listing card (e.g. 'днес, 01:44').
scraped_atstringISO-8601 UTC timestamp when this row was recorded.

Example output

{
"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

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.05One-off warm-up charge per run
result-row$0.002PPE event

Example: 1 000 results at the rates above ≈ $2.05. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 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 searchUrl 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. price is the integer EUR amount (currency is always EUR) and price_bgn 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 Дизел or Ръчни скорости are preserved as-is so nothing is lost in translation.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.