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 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 <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.
| Field | Type | Required | What 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
| Event | Price | When |
|---|---|---|
| Actor start | $0.20 | Once per run, covers warm-up and proxy session setup. |
| result-row | $0.0020 | Per 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, 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?
What currency are prices in?
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?
The labels are in Bulgarian — can I get English?
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.
Related Actors