Mobile.bg Scraper - Bulgarian Car Marketplace
Pricing
from $2.00 / 1,000 result scrapeds
Mobile.bg Scraper - Bulgarian Car Marketplace
Scrape car listings from Mobile.bg, Bulgaria's largest vehicle marketplace with 3M+ monthly visits. Extract prices, specs, mileage, fuel type, transmission, power, seller info, and images. Filter by make, model, year, price range. No login required.
Pricing
from $2.00 / 1,000 result scrapeds
Rating
0.0
(0)
Developer
Studio Amba
Maintained by CommunityActor stats
0
Bookmarked
10
Total users
4
Monthly active users
11 hours ago
Last modified
Categories
Share
What does Mobile.bg Scraper do?
Mobile.bg Scraper extracts car listing data from Mobile.bg, Bulgaria's largest online vehicle marketplace with over 3 million monthly visits and hundreds of thousands of active listings. No login or cookies required.
Use it to collect structured used car data via the Apify platform with full API access, scheduling, integrations, and proxy rotation.
Why use Mobile.bg Scraper?
- Market research — Analyze Bulgarian used car prices, compare by make, model, year, and mileage
- Price monitoring — Track price changes for specific vehicles over time with scheduled runs
- Dealer intelligence — Study dealer inventory, pricing strategies, and listing volumes
- Data analytics — Build datasets for automotive market analysis in Southeast Europe
- Lead generation — Find cars matching specific criteria across Bulgaria
- Academic research — Study depreciation curves, pricing patterns, and market trends
- Cross-border arbitrage — Compare Bulgarian car prices with other European markets (typically 20-40% lower than Western Europe)
How to scrape Mobile.bg data
- Go to this actor's page on the Apify Store.
- Click Try for free to open it in Apify Console.
- Configure your search: enter a make (e.g., "BMW"), model, year range, or price range.
- Set the maximum number of results you need (default: 100).
- Click Start and wait for the run to finish.
- Download your data from the Output tab in JSON, CSV, Excel, or other formats.
You can also schedule regular runs, set up webhooks for real-time notifications, or integrate the results directly into your application using the Apify API.
Input
| Field | Type | Description |
|---|---|---|
searchQuery | string | Free text search (e.g., "BMW", "Audi A4", "Golf"). Defaults to "BMW" if no filters set. |
make | string | Car manufacturer slug (e.g., bmw, audi, mercedes-benz, volkswagen, opel, toyota) |
model | string | Car model as used in Mobile.bg URLs (e.g., 3-seriya, golf, a4) |
yearFrom / yearTo | integer | Registration year range (e.g., 2015-2024) |
priceFrom / priceTo | integer | Price range in EUR |
mileageMax | integer | Maximum mileage in km |
mileageMin | integer | Minimum mileage in km. Mobile.bg has no such filter, so the actor drops listings below it after reading the results. |
fuelType | string | benzin (Petrol), dizel (Diesel), gaz (LPG/CNG), elektro (Electric), hibrid (Hybrid), plug-in-hibrid (Plug-in Hybrid), vodorod (Hydrogen). An unknown value stops the run and lists the valid ones. |
transmission | string | manual, automatic, semi-automatic. Uses Mobile.bg's own gearbox filter. Empty = any. |
sellerType | string | any (default), dealer, private. Uses Mobile.bg's own seller filter. |
maxResults | integer | Max listings to return (default: 100, max: 5000) |
fetchDetails | boolean | Off by default. Opens every ad page and adds views, editedAt, photosCount, vin, productionDate, description, dealerName, dealerUrl. Without it those fields are not in the output. |
trackListings | boolean | Off by default. Remembers the listings of this search between runs and adds status, firstSeenAt, lastSeenAt, removals and a segment summary with market days supply. See below. |
trackingKey | string | Name of the tracked segment. Empty = derived from the search filters. |
salesWindowDays | integer | Days counted as potential sales for market days supply (default 45). |
priceBands | array | Band edges for the price breakdown in the summary (default 5000, 10000, 15000, 20000, 30000, 50000). |
wholeMarket | boolean | Off by default. Reads every car listing on Mobile.bg with trackListings on, one search per make and year range. See below. |
wholeMarketConcurrency | integer | Searches at a time in whole-market mode (default 6, each uses 4 GB). |
wholeMarketMaxUsageUsd | number | Optional platform usage cap for a whole-market read. |
wholeMarketMakes | array | Optional make slugs to limit a whole-market read (e.g. bmw, vw). |
proxyConfiguration | object | Proxy settings — residential proxies recommended |
Output
Each car listing includes the following fields. You can download the dataset in JSON, CSV, Excel, or connect via API.
{"listingTitle": "BMW 435 F36 N55 X-Drive ЛИЗИНГ * FULL","make": "BMW","model": "435 F36 N55 X-Drive ЛИЗИНГ * FULL","year": 2016,"price": 18000,"priceOnRequest": false,"currency": "EUR","mileage": 205200,"fuelType": "Petrol","transmission": "Automatic","engineSize": "3000 cc","power": "400 hp","location": "обл. Русе, гр. Русе","sellerType": "Private","imageUrl": "https://mobistatic1.focus.bg/mobile/photosorg/646/1/11780325899651646_W5.webp","url": "https://www.mobile.bg/obiava-11780325899651646-bmw-435-f36-n55-x-drive-lizing-full","listingId": "11780325899651646","listedAt": "2026-06-01T14:58:19.000Z","scrapedAt": "2026-09-19T15:13:17.691Z"}
Data fields
| Field | Description | Example |
|---|---|---|
listingTitle | Full listing title | BMW 320 2.0d Sport |
make | Manufacturer | BMW, Audi, Mercedes-Benz |
model | Model name. When the search pins a model or series, this is that model as the title spells it, so every row of the search groups under one value. | 320, Golf, A4, 3008 |
modelDetail | Listing title after the make, as the seller wrote it (model, engine, trim) | 3008 1.5HDI TOP LED |
year | Registration year | 2018 |
price | Listing price (numeric, may have cents). null when the seller shows "Запитване" (price on request) | 18000 |
priceOnRequest | true when the listing shows "Запитване" instead of a price | false |
currency | Price currency | EUR or BGN |
mileage | Kilometers driven | 155000 |
fuelType | Fuel type | Petrol, Diesel, LPG/CNG, Electric, Hybrid, Plug-in Hybrid |
transmission | Gearbox type | Manual, Automatic, Semi-automatic |
engineSize | Engine displacement. Empty when the listing does not state it | 2000 cc |
power | Engine power | 190 hp |
location | Seller location as shown on Mobile.bg | обл. Русе, гр. Русе |
sellerType | Seller category | Private or Dealer |
imageUrl | Main car photo URL | https://mobistatic1.focus.bg/mobile/photosorg/... |
url | Full listing URL | https://www.mobile.bg/obiava-... |
listingId | Mobile.bg ad id (17 digits) | 11780325899651646 |
listedAt | When the ad was created. Decoded from the ad id: digits 2 to 11 are a unix timestamp. Mobile.bg does not print this date; a renewed ad keeps its id and its date. | 2026-06-01T14:58:19.000Z |
scrapedAt | Collection timestamp | 2026-06-09T12:00:00.000Z |
With fetchDetails on, each row also has:
| Field | Description |
|---|---|
views | View count shown on the ad |
editedAt | Last edit time, or the publication time if the ad was never edited (UTC) |
photosCount | Number of photos |
vin | VIN, only when the seller entered one (many don't) |
productionDate | Production month as YYYY-MM |
description | Seller's description text |
dealerName, dealerUrl | Dealer name and dealer page. Null for private sellers. |
detailsError | Set when the ad page could not be read; the other detail fields are then null |
Track listings and market days supply
Turn on trackListings and run the same search every day. The actor remembers each listing of the search in a key-value store called mobile-bg-tracking in your own Apify account, under one key per search (trackingKey).
Every run then outputs:
- One row per active listing with
status(neworactive),firstSeenAt,lastSeenAt,previousPrice,priceChangedanddaysListed. - One row with
status: "removed"for each listing that disappeared since the last run.removalClassisrepostedwhen a new ad for the same car showed up in the same run (same VIN, or same make, model, year, fuel, gearbox, seller type and location with mileage within 2% or 1500 km), otherwisepotential_sold. - One row with
status: "active_outside_filter"for a listing that is still online but no longer matches your filters, for example after a price change. It is not counted as a removal. - One row with
recordType: "__SEGMENT_SUMMARY__"with the segment numbers: active listings, potential sales and reposts in the sales window, average daily sales,mdsDays, median, 25th and 75th percentile (p25Price,p75Price), average, min and max price, and a count per price band.
Market days supply is calculated as:
mdsDays = activeListings / (potentialSalesInWindow / effectiveWindowDays)
effectiveWindowDays is salesWindowDays (45 by default), or the number of days tracked so far when that is shorter. The summary says so in notes until the window is full. mdsDays is null when there were no potential sales in the window.
Limitations
- Mobile.bg does not say why an ad disappeared. A removed ad and an id that never existed return the same page ("the ad was deleted or is not active"). So a removal is a potential sale, never a confirmed one. Every removal row carries
removalConfidence: "site does not say why an ad disappeared". Expect some removals to be sellers who gave up or moved the car to another site. - A listing is only marked removed when the run read every result page. The actor compares what it read with the count Mobile.bg shows ("от общо N"). If
maxResultsstopped the run early, or a page could not be read, nothing is marked removed and the summary explains why inincompleteReason. SetmaxResultsabove the size of your search. - Missing listings are checked one by one. Before a listing counts as removed, the actor opens its ad page. Listings move between result pages while a run reads them, so this stops a listing that was only skipped from counting as a sale.
- The first run is the baseline. Removals and sales are counted from the second run on.
- Reposts are matched within one run. A car that comes back days later under a new id counts as a new listing.
- Run one schedule per search. Two runs on the same
trackingKeyat the same time overwrite each other's state.
How to schedule it daily on Apify
- Fill in your search and turn on
trackListings. SetmaxResultsabove the number of listings Mobile.bg shows for that search. - Save it as a task in Apify Console.
- Open Schedules, create a schedule with a daily time (for example 06:00), and add the task.
- Read the
__SEGMENT_SUMMARY__row of each run, or the full dataset for listing-level history.
To track several segments (for example price bands or model years), make one task per segment. Each gets its own trackingKey.
Whole-market read
Turn on wholeMarket to read every car listing on Mobile.bg in one run, for example once a week for market days supply across the whole Bulgarian market.
- Mobile.bg shows at most 3,000 listings per search, so the actor reads one search per make, and the biggest makes (BMW, Mercedes-Benz, Audi, VW and others) per year range. That is about 190 searches and about 140,000 listings.
- Each search runs as its own run of this actor in your account, with
trackListingson and its own segment key<trackingKey>-<make>-<from>-<to>(x = open end). Keep the sametrackingKeyevery week so each segment continues its history. - The listings are in each search run's dataset. The whole-market run's own dataset has one
__WHOLE_MARKET_SEGMENT__row per search with the run id, dataset id, listings, removals and mdsDays.MARKET_READ_SUMMARYin the run's key-value store has the totals. - A search that fails or comes up short is read again (up to 3 times). A search that has grown past 3,000 listings is split by year and starts a new segment.
- Search and filter fields are ignored in this mode. A read takes about 2 hours at 6 searches at a time.
How much does it cost to scrape Mobile.bg?
Mobile.bg Scraper uses Playwright (headless browser) for reliable access. It charges $0.02 per run (start fee, based on its 4 GB memory allocation) plus $0.002 per result. 50 results costs about $0.12; 100 about $0.22; 500 about $1.02. A run's usage cost only settles after it reports SUCCEEDED.
Every dataset row is a result. With trackListings on, the removal rows and the one summary row per run are results too, so a daily run on a 200-listing segment costs about $0.02 + 200 to 210 results x $0.002, roughly $0.43. A whole-market read is about 140,000 listings plus the removal rows, billed at the same price per result. fetchDetails does not change the price per result, but the run takes longer because it opens every ad page.
Tips and advanced options
- Use make for precision — Set the
makefield (e.g., "bmw") for targeted results instead of free text search. - Combine filters — Year range, price range, maximum mileage and fuel type are passed to Mobile.bg's own search filters, so they combine the same way they do on the site.
- Bulgarian URL slugs — Model names use Bulgarian transliteration in URLs (e.g., "3-seriya" for 3 Series).
- Schedule runs — Set up daily or weekly scraping to track price changes over time.
- Empty input works — Running with empty input
{}defaults to searching for "BMW" to ensure results are returned. - Use residential proxies — For best reliability, use Apify residential proxies (pre-configured by default).
- Cross-market analysis — Combine with our AutoScout24, Polovni Automobili, or LaCentrale scrapers to compare prices across European markets.
- Prices in EUR — Bulgaria moved to the euro in 2026 and Mobile.bg shows prices in EUR. Older listings can still show BGN; the currency field tells you which.
Supported vehicle categories
Mobile.bg covers passenger cars and SUVs as the primary categories. The scraper focuses on the main vehicle listings which include:
- All major European and Asian car manufacturers
- Both private sellers and professional dealers
- New and used vehicles
- Prices in EUR and BGN (Bulgarian Lev, 1 EUR = ~1.96 BGN)
About Mobile.bg
Mobile.bg is Bulgaria's dominant online vehicle marketplace, operating since 2000. It is the go-to platform for buying and selling cars in Bulgaria, with over 3 million monthly visits. The site features listings from both private sellers and professional dealers across all of Bulgaria. Prices are typically listed in EUR, with BGN conversions shown alongside.
Bulgaria is a popular destination for used car sourcing due to competitive pricing compared to Western European markets.
FAQ and support
Is it legal to scrape Mobile.bg? This scraper accesses only publicly available data that any visitor can see in their browser. It does not require login, bypass authentication, or access private data. Always review and comply with the target website's Terms of Service before use.
Does this scraper need login or cookies? No. Mobile.bg Scraper works without any login credentials, cookies, or account setup. Just configure your search filters and run.
What about anti-bot protection? The scraper uses Playwright (headless browser) with residential proxies to reliably access listing pages. This handles standard anti-bot measures without any extra configuration.
Can I scrape specific makes and models?
Yes. Use the make field with the manufacturer name (e.g., "bmw", "audi", "volkswagen") and optionally the model field for further filtering.
Can I search a whole line, like "BMW 3 Series" or "Mercedes C-Class"? Yes. Mobile.bg itself has no single listing page for a series or class — each trim (320, 325, c-200, c-220, ...) has its own page — so a "3 Series" or "C-Class" query is expanded internally to every trim in that line and the results are merged. This currently covers BMW 1-7 Series and Mercedes A/B/C/E/S-Class; a specific trim (e.g. "320", "c-220") always works and is the more precise option.
What about character encoding? Mobile.bg uses Cyrillic text (Bulgarian language). The scraper handles encoding automatically and outputs normalized UTF-8 data with translated field values (e.g., fuel types are translated to English).
I found a bug or need help Please submit an issue on the Issues tab and we will respond quickly. For custom scraping solutions, reach out via the same channel.