Mobile.bg Scraper: Cars, Trucks & Motorcycles in Bulgaria
Pricing
from $22.00 / 1,000 vehicle listings
Mobile.bg Scraper: Cars, Trucks & Motorcycles in Bulgaria
Scrape mobile.bg, Bulgaria's largest vehicle marketplace: cars, SUVs, trucks, buses, motorcycles, machinery, parts and dealers with EUR price, mileage, fuel, power, photos, price history and new-listing monitoring. No login, no proxy. Export JSON, CSV or Excel.
Pricing
from $22.00 / 1,000 vehicle listings
Rating
0.0
(0)
Developer
RecordsData
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share

Mobile.bg Scraper: Cars, Trucks, Motorcycles and Dealers in Bulgaria
Mobile.bg Scraper is an Apify Actor that extracts vehicle listings from mobile.bg, Bulgaria's largest vehicle marketplace: cars and SUVs, buses and vans, trucks, motorcycles, farm and construction machinery, forklifts, caravans, boats, trailers, bicycles, parts, accessories and tires. Each row has the price in euro, make, model, year, mileage, fuel, gearbox, power, equipment, photos, city and seller type. It also returns dealer profiles, price-history rows and new-listing monitoring. No login, no proxy and no browser are needed.
Export the result as JSON, CSV, Excel, XML or HTML, or read it through the Apify API.
What can you scrape from Mobile.bg?
- Vehicle listings from 11 vehicle sections and 3 parts sections. The site held about 173,000 car ads, 12,000 motorcycle ads, 11,000 bus and van ads, 5,000 truck ads and 3,000 ads each for farm and construction machinery on 2026-10-19.
- Listing pages (optional): the full photo gallery (up to 17 photos), the complete equipment list, the seller's text, exact edit time, view count, VIN when the seller entered it, a video link, and the dealer address with a map position.
- Dealers: the dealer directory with business name, city, address, member since, number of ads in stock, the sections they sell in and opening hours. The business phone is optional.
- Price history: one row per price step of a listing, with the old price, the difference and the percentage.
- Monitoring: a repeat run returns only new listings, and a repriced listing comes back with its previous price.
- Sitemap feed: every listing added or edited since a moment you choose.
Why use this actor?
- Past the 3,000 result cap: the site shows at most 3,000 results per search. The actor splits a capped search by category, make, model, year and price until every slice fits, so a big search returns all of its listings once, with no duplicates.
- Real filters, applied by the site and checked again on every row: make, model, category, year, price, mileage, power, engine size, Euro class, fuel, gearbox, color, region, condition and seller type.
- Clean, typed output: prices, mileage and power are numbers, fuel, gearbox and body type are lowercase English values, dates are ISO 8601, and absent values are left out instead of being filled with placeholders.
- Both text layers: titles, descriptions and equipment stay in the seller's Bulgarian, with no broken characters, while the structured fields are in English.
- Privacy built in: the names and phone numbers of private sellers are never output, and phone numbers are removed from private descriptions. Dealer phones appear only when you switch them on.
How to scrape Mobile.bg listings in four steps
- Choose a Section on the actor page, for example Cars and SUVs.
- Add a make such as
BMWand a model such asX5, or leave them empty, and set filters such as price, year or fuel. - Set the maximum number of results and click Start.
- Download the dataset from the Storage tab as JSON, CSV or Excel.
Four ways to collect data
Mode (mode) | Use it to | Record types |
|---|---|---|
search | Find listings in a section by make, model, category and the full filter set | vehicle, vehicle detail, price history |
urls | Refresh known listings by number or address, replay a result page of the site, or read a dealer's site | vehicle, vehicle detail, dealer |
dealers | List the dealers of the directory by name and city, and optionally their ads | dealer, vehicle |
sitemap | Read every listing added or edited since a date or time | vehicle detail |
Make, model and category names are not case sensitive and are checked against the site. An unknown name ends the run with one free error row that suggests close matches.
Which filters work in which section
Cars, buses and trucks accept every filter. Motorcycles accept all of them except the Euro class. Farm machinery, construction machinery, caravans and trailers accept year, price, color, region and condition. Forklifts and boats add fuel. Bicycles accept price, color, region and condition. Parts, accessories and tires are filtered by the vehicle they fit, a category, a price range and a condition. When a filter is not offered by the site for a section, the actor tells you in the log and does not invent it.
What data do you get?
Every row is a vehicle, a price-history step or a dealer, told apart by its fields: a vehicle row has listingId and vehicleType, a price-history row has listingId and step, a dealer row has dealerId. Fields that do not apply to a record type, or that the seller did not enter, are left out.
| Field | Description |
|---|---|
listingId, url, title | Listing number, address and title |
vehicleType | car, bus, truck, motorcycle, agricultural-machine, industrial-machine, forklift, caravan, boat, trailer, bicycle, part, accessory or tire-or-wheel |
price, currency, priceOnRequest, vatIncluded | Asking price in euro, a flag for ads that say "price on request" (no price is output) and whether VAT is included |
priceTrend | down or up when the card shows a recent price move |
changeType, previousPrice, priceChange, priceChangePct | Monitor rows: new, price-drop or price-increase, old price, difference and percent |
make, model, year, productionMonth | Make, model, production year and month |
mileage, mileageUnit | Odometer in km, left out for new vehicles |
fuelType, transmission, driveType, bodyType, color, condition | Lowercase English values such as petrol, diesel, electric, manual, automatic, suv, sedan, new and damaged |
engineSize, engineSizeUnit, powerHp, euroClass, batteryKwh | Engine size in cc, power in horsepower, Euro class and battery capacity for electric vehicles |
seats, loadCapacityKg, axles, engineHours, vin | Seats, load capacity, axles and engine hours when the seller entered them; VIN only when entered |
specs | Every other labelled value of the listing page, such as range, tire size, tonnage or lifting height, with the site's Bulgarian labels |
features, description | Equipment list and the seller's text |
city, region, locationText, address, latitude, longitude | Where the vehicle is; address and map position come from dealer ads only |
images, imageCount, videoUrl, hasVideo | Full-size gallery (up to 17), photo count and video link |
publishedAt, updatedAt, modifiedAt, views | Publication time from the listing number, last edit time, the time the sitemap gives for the listing (sitemap mode, the reason the row was returned) and view count |
promoTier, isReserved | Paid promotion tier BEST, TOP or VIP, and the reserved flag |
isPrivateSeller, sellerName, sellerUrl, dealerSince, sellerPhone | Seller type; identity only for dealers, the dealer's phone only with Include dealer contact details |
dealerId, slug, name, memberSince, listingCount, listingSections, phone, phones, openingHours, logoUrl | Dealer rows |
step, changedAt, isInitialPrice | Price-history rows |
sourceSite, country, scrapedAt | mobile.bg, Bulgaria and the time of extraction |
Sample output
A real vehicle row from a cloud run with listing pages on (description, equipment and photo list shortened):
{"listingId": "21790181407507138","url": "https://www.mobile.bg/obiava-21790181407507138-bmw-x6-promo-tsena-m60i-garantsiya-xdrive","sourceSite": "mobile.bg","country": "Bulgaria","vehicleType": "car","title": "BMW X6 * ПРОМО ЦЕНА* M60i* Гаранция* xDrive","description": "*ПРОМО ЦЕНА* до 30. 11. 2026 г. *СОБСТВЕН ЛИЗИНГ* без доказване на доход...","price": 80000,"currency": "EUR","priceOnRequest": false,"vatIncluded": false,"make": "BMW","model": "X6","year": 2025,"productionMonth": 1,"mileage": 74876,"mileageUnit": "km","fuelType": "petrol","transmission": "automatic","engineSize": 4400,"engineSizeUnit": "cc","powerHp": 523,"euroClass": 6,"bodyType": "suv","color": "Grey","vin": "WBA41EX0909Y57363","features": ["GPS система за проследяване", "Адаптивни предни светлини", "Антиблокираща система"],"city": "Sofia","region": "Sofia","locationText": "гр. София","address": "бул. Рожен 115, автокомплекс Маями 33","latitude": 42.7580564,"longitude": 23.318781,"images": ["https://mobistatic2.focus.bg/mobile/photosorg/138/2/big1/21790181407507138_lw.webp"],"imageCount": 17,"publishedAt": "2026-09-23T16:36:47.000Z","updatedAt": "2026-10-18T11:48:00.000Z","views": 1049,"promoTier": "BEST","isReserved": false,"sellerName": "ViktoriaCars","sellerUrl": "https://viktoriacars.mobile.bg","isPrivateSeller": false,"dealerSince": 2015,"scrapedAt": "2026-10-19T10:19:49.682Z"}
A price-history row has the step, the time of the change and the difference to the previous step:
{"listingId": "51791299029371587","url": "https://www.mobile.bg/obiava-51791299029371587-yamaha-mt-09-perfekten","sourceSite": "mobile.bg","country": "Bulgaria","title": "Yamaha Mt-09 ПЕРФЕКТЕН","step": 2,"changedAt": "2026-10-18T11:44:00.000Z","isInitialPrice": false,"price": 4899,"currency": "EUR","previousPrice": 5299,"priceChange": -400,"priceChangePct": -7.55,"scrapedAt": "2026-10-19T09:48:06.979Z"}
How does it compare with other Mobile.bg scrapers?
Two other actors on the Apify Store read mobile.bg (Store listing checked on 2026-10-19): studio-amba/mobile-bg-scraper (642 runs in 30 days, 40 fields) and devilscrapes/mobile-bg-bulgaria-cars (25 fields). This actor returns up to 48 fields per vehicle row and adds what they do not list: dealer profiles, price-history rows, a sitemap feed, monitoring with price-change rows, 14 sections instead of cars only, and slicing that reads past the 3,000 result cap of the site.
Is it legal to scrape Mobile.bg? Limits and responsible use
The actor reads public listing pages. It does not log in or bypass any protection, it keeps a polite request pace, and the robots.txt of the site allows these pages and sets no crawl delay. The names and phone numbers of private sellers are never output, and contacts are removed from private descriptions. Dealer business phones only appear with Include dealer contact details. You are responsible for using the data in line with the site terms and the data protection law that applies to you.
Limits:
- The site shows 3,000 results at most per search. The actor slices a capped search by category, make, model, year and price, but a single slice that still holds more than 3,000 ads (for example one model in one year and one price band) is read only to the cap and logged.
- A listing has at most 17 photos, the limit of the site.
- Detail fields such as VIN, drive type, seats or battery capacity are filled only when the seller entered them.
- Titles, descriptions, equipment and the labels inside
specsare in Bulgarian, as written by the sellers. - Wanted ads, services and the rent-a-car section are not covered.
- Free Apify plans are limited to 10 results per run.
Use with AI agents (MCP)
Connect the Apify MCP server to Claude, Cursor or another MCP client and this actor appears as a tool: https://mcp.apify.com?tools=RecordsData/mobile-bg-scraper.
Example prompt: "Find the 20 cheapest diesel BMW X5 SUVs from 2018 or newer on Mobile.bg and list price, mileage, city and seller." The agent sends { "mode": "search", "section": "cars", "make": "BMW", "model": "X5", "fuelType": "diesel", "yearFrom": 2018, "sortBy": "price-asc", "maxItems": 20 } and analyzes the rows.
Run it from code
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('RecordsData/mobile-bg-scraper').call({mode: 'search',section: 'cars',make: 'BMW',yearFrom: 2018,maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.length, items[0].title, items[0].price);
You can also call the actor from the Python client, Make, Zapier or n8n, and schedule it from the Apify Console.
Frequently Asked Questions
Which vehicles does mobile.bg Scraper cover?
Everything sold on mobile.bg: cars and SUVs, buses and vans, trucks, motorcycles and ATVs, farm machinery, construction machinery, forklifts, caravans and motorhomes, boats, trailers, bicycles, parts, accessories, and tires and wheels, from dealers and private sellers. vehicleType tells the sections apart in the dataset.
Do I need a proxy, a login or an API key?
No. The actor makes plain HTTP requests to the public site and needs no proxy, browser or mobile.bg account. You only need an Apify account to start runs, and the free plan returns up to 10 results per run.
Is it legal to scrape mobile.bg?
The actor reads publicly visible listings and does not log in. It keeps a polite request pace and respects the site's robots.txt. The names, phone numbers and emails of private sellers are not output, and you remain responsible for using the data in line with the site terms and the data protection law that applies to you.
How much does a run cost?
The actor is billed per result with Apify pay-per-event pricing: one event per vehicle listing, one for a listing with its full page, one per dealer and one per price-history row. The Pricing tab of the actor page shows the live rate for each event. Error rows, empty searches and listings skipped by monitoring are never charged.
How do I get more than 3,000 listings from one search?
Leave the make and model empty or keep them broad and set maxItems above 3,000. When the site reports "3,000+" results the actor splits the search by category, then by make, then by model, then by year and finally by price, and merges the slices without duplicates. A run of 3,500 motorcycles from the result list took about 2.5 minutes in a local test.
What is the difference between a vehicle record and a vehicle detail record?
A vehicle record comes from the result list and already holds price, make, model, year, mileage, fuel, gearbox, power, color, short equipment, city, seller name and the photos of the list. Switch on Read every listing page (full detail) to get a vehicle detail record with the full gallery, the whole equipment list, the seller's complete text, view count, VIN, video link and the dealer address with map position.
Why is there no phone number in the rows?
Dealer phones are returned only when you switch on Include dealer contact details, and only for dealers, which are businesses. Private sellers' phones and names are never returned, and contacts are also removed from private descriptions. To reach a seller, use the contact options on the listing page of the site itself.
What does priceOnRequest mean?
Some sellers write "price on request" instead of an amount. Those rows have priceOnRequest: true and no price or currency, so they are never read as a price of zero. Filter on that flag in the dataset to find them or to leave them out.
Can I get only the listings published since my last run?
Yes. Switch on Only new listings (monitor) and keep the same search settings, or the same Monitor name. Add Report price changes to also get a row, with changeType, previousPrice and priceChangePct, when the price of a known listing moves by 2 percent or more. Scheduled runs then return only new or repriced listings, never charged twice. For a feed across the whole site, use sitemap mode with Changed since (sitemap mode).
What happens when the search finds nothing or the input is wrong?
A search with no hits ends as succeeded with an empty dataset and charges nothing. A wrong input value, such as a minimum year above the maximum or an unknown make, ends as succeeded with one free error row that explains the problem, so a typo never costs you money.
Support
Questions, a missing field or a feature request: contact.punkrecordsdata@gmail.com. Reviews on the actor page help other people find it.
This actor is an independent tool and is not affiliated with mobile.bg.