Cars.bg Bulgaria Car Scraper
Pricing
Pay per event
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
Maintained by CommunityActor 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 rotation —
curl-cffiimpersonates 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-Afterhonoured. - 🧱 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_typeandlocation. - 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
- Click Try for free at the top of the page.
- Fill in the input form — most fields have sensible defaults.
- Click Start. Output streams into the run's dataset.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
searchUrl | string | no | '—' | Full Cars.bg search/results URL with filters already applied (e.g. https://www.cars.bg/carslist.php?subtype=1&bran |
maxResults | integer | no | 50 | Hard cap on dataset rows. |
enrichDetails | boolean | no | false (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. |
proxyConfiguration | object | no | {'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.
| Field | Type | Notes |
|---|---|---|
listing_id | string | Cars.bg listing reference ID. |
listing_url | string | Absolute URL to the listing detail page. |
title | string | Listing 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_urls | array | List 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_at | string | ISO-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:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.05 | One-off warm-up charge per run |
result-row | $0.002 | PPE 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, andseller_namearenullby default and only populate whenenrichDetails: trueis 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.