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
7 days ago
Last modified
Categories
Features
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.
What can you scrape from Mobile.bg?
- Vehicle listings from 14 sections. The site held about 173,000 car ads, 12,000 motorcycle ads, 11,000 bus and van ads and 5,000 truck ads on 2026-10-19.
- Listing pages (optional): the photo gallery (up to 17 photos), equipment list, seller's text, exact edit time, view count, VIN when entered, video link, and the dealer address with a map position.
- Dealers: the directory with business name, city, address, member since, ads in stock, sections and opening hours.
- Price history: one row per price step of a listing.
- 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 make, model, year and price, so a big search returns all of its listings once, with no duplicates.
- Real filters, 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 and gearbox are lowercase English values, dates are ISO 8601, and absent values are left out.
- Both text layers: titles, descriptions and equipment stay in the seller's Bulgarian with no broken characters; structured fields are in English.
- Privacy built in: private sellers' names and phones are never output. 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 modes: search by filters, urls to refresh known listings or read a dealer's site, dealers for the directory, and sitemap for listings changed since a date. Make and model names are not case sensitive; an unknown name ends the run with one free error row that suggests close matches. Cars, buses and trucks accept every filter and other sections fewer; a filter the site lacks is reported in the log, never invented.
Input
The form has 40 fields. These are the most used; the rest are in the input form of the actor page.
| Field | Type | Default | Meaning |
|---|---|---|---|
mode | string | search | What to collect: search, urls, dealers or sitemap |
maxItems | integer | 50 | Maximum results (free plans: 10) |
section | string | cars | One of 14 sections, such as cars, buses, trucks, motorcycles, boats or parts |
make / model | string | empty | Make and model, for example BMW and X5 |
yearFrom / yearTo | integer | none | Model year range |
priceMin / priceMax | integer | none | Price range in euro |
fuelType / transmission | string | any | Fuel and gearbox filters |
region / sellerType | string | any | Bulgarian region; dealer or private |
sortBy | string | newest | Also price-asc, year-desc, mileage-asc |
fetchDetails | boolean | false | Open every listing page for the full gallery, equipment and seller block |
includePriceHistory | boolean | false | Add one row per price step |
onlyNew / trackPriceChanges | boolean | false | Monitor mode: only new listings, and price-change rows |
A minimal example input:
{"mode": "search","section": "cars","make": "BMW","model": "X5","fuelType": "diesel","yearFrom": 2018,"priceMax": 60000,"sortBy": "price-asc","maxItems": 100}
What data do you get?
Every row is a vehicle, a price-history step or a dealer. Fields that do not apply, 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, boat, part, tire-or-wheel and the other sections |
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 |
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 |
fuelType, transmission, driveType, bodyType, color, condition | Lowercase English values such as petrol, automatic and suv |
engineSize, engineSizeUnit, powerHp, euroClass, batteryKwh | Engine size in cc, horsepower, Euro class and battery capacity |
seats, loadCapacityKg, axles, engineHours, vin | Filled only when the seller entered them |
specs | Every other labelled value of the listing page, 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 | Gallery (up to 17), photo count and video link |
publishedAt, updatedAt, modifiedAt, views | Publication, last edit and sitemap time, and view count |
promoTier, isReserved | Promotion tier and reserved flag |
isPrivateSeller, sellerName, sellerUrl, dealerSince, sellerPhone | Seller type; identity only for dealers, phone only with Include dealer contact details |
dealerId, memberSince, listingCount, openingHours, logoUrl | Dealer rows |
step, changedAt, isInitialPrice | Price-history rows |
sourceSite, country, scrapedAt | Source, country and extraction time |
Sample output
A real vehicle row from a cloud run with listing pages on (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","price": 80000,"currency": "EUR","make": "BMW","model": "X6","year": 2025,"productionMonth": 1,"mileage": 74876,"fuelType": "petrol","transmission": "automatic","engineSize": 4400,"powerHp": 523,"bodyType": "suv","vin": "WBA41EX0909Y57363","features": ["GPS система за проследяване", "Антиблокираща система"],"city": "Sofia","imageCount": 17,"publishedAt": "2026-09-23T16:36:47.000Z","views": 1049,"promoTier": "BEST","sellerName": "ViktoriaCars","isPrivateSeller": false,"scrapedAt": "2026-10-19T10:19:49.682Z"}
A price-history row carries step, changedAt, price, previousPrice, priceChange and priceChangePct.
Monitor new listings and repriced ads
Switch on Only new listings (monitor) and the actor remembers every listing it delivered, in a named key-value store of your own account. Scheduled runs of the same search return only unseen listings. Add Report price changes and a repriced listing comes back with previousPrice and priceChangePct. Skipped listings are never charged.
How much does the Mobile.bg Scraper cost?
Pay per event, no monthly fee and no start fee. The Pricing tab of the actor page shows the live rate.
| Event | Charged for | Price per result | Per 1,000 results |
|---|---|---|---|
| Vehicle listing | One listing from a search, an address or a dealer | $0.022 | $22.00 |
| Vehicle listing with page details | One listing opened on its own page | $0.03256 | $32.56 |
| Dealer profile | One dealer from the directory | $0.03256 | $32.56 |
| Price history step | One step of a listing's price history | $0.03256 | $32.56 |
Worked examples:
- Cost per 1,000 vehicle listings: 1,000 x $0.022 = $22.00.
- Cost per 1,000 listings with page details: 1,000 x $0.03256 = $32.56.
- A daily monitor run with 40 new listings and 10 repriced ones: 50 x $0.022 = $1.10.
Error rows, empty searches and skipped listings are never charged.
How does it compare with other Mobile.bg scrapers?
Rivals read on 2026-10-19: studio-amba/mobile-bg-scraper (643 runs and 4 users in 30 days) and devilscrapes/mobile-bg-bulgaria-cars (188 runs in 30 days).
| Mobile.bg Scraper | studio-amba | devilscrapes | |
|---|---|---|---|
| Fields | 75 flat, typed keys | 40 | 25 |
| Sections | 14 | Vehicles | Cars |
| Dealers, price history, sitemap feed | Yes | Not listed | Not listed |
| Price | From $0.022 per result, no start fee | $0.002 per item plus $0.005 per start | $0.002 per row plus $0.2 per start |
The rivals are cheaper per item. studio-amba also has listing lifecycle fields (first seen, removed, reposted) that this actor lacks; it tracks new listings and price moves only. Choose this actor for dealers, price history, 14 sections and a sitemap feed.
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, and the robots.txt of the site allows these pages. Private sellers' names and phones are never output. 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, and a slice that still exceeds 3,000 ads 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, seats or battery capacity are filled only when the seller entered them.
- Titles, descriptions and equipment are in Bulgarian, as written by the sellers.
- Wanted ads and services are not covered.
- There is no removal tracking: the monitor reports new listings and price moves, not listings that disappeared.
- 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 use the Python client, Make, Zapier or n8n, and schedule runs in the Apify Console.
Frequently Asked Questions
Which vehicles does mobile.bg Scraper cover?
Everything sold on mobile.bg in 14 sections: cars, buses, trucks, motorcycles, farm and construction machinery, forklifts, caravans, boats, trailers, bicycles, parts, accessories and tires, 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. The site sits behind Cloudflare, but cloud tests saw no block; the input accepts a proxy if one is ever needed.
Is it legal to scrape mobile.bg?
The actor reads publicly visible listings and does not log in. It respects the site's robots.txt. The names and phone numbers 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 event: $0.022 per vehicle listing, $0.03256 per listing with its full page, per dealer and per price-history step. So 1,000 vehicle listings cost $22.00 and 1,000 detailed listings cost $32.56. The Pricing tab of the actor page shows the live rate. Error rows, empty searches and listings skipped by monitoring are never charged.
How do I get more than 3,000 listings from one search?
Keep the make and model broad and set maxItems above 3,000. When the site reports "3,000+" results the actor splits the search by category, make, model, year and price, and merges the slices without duplicates. A run of 3,500 motorcycles 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, city and seller name. 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 and the dealer address.
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. 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. They are about 1 percent of rows; filter on that flag in the dataset to find them or to leave them out. When you set a price bound, such rows are dropped.
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. 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); the site rebuilds its sitemap from time to time, so the latest changes can appear in the next run.
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.
Last updated: 2026-10-19