Mobile.bg Scraper: Cars, Trucks & Motorcycles in Bulgaria avatar

Mobile.bg Scraper: Cars, Trucks & Motorcycles in Bulgaria

Pricing

from $22.00 / 1,000 vehicle listings

Go to Apify Store
Mobile.bg Scraper: Cars, Trucks & Motorcycles in Bulgaria

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

RecordsData

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Features

Limited permissions

Share

RecordsData

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

  1. Choose a Section on the actor page, for example Cars and SUVs.
  2. Add a make such as BMW and a model such as X5, or leave them empty, and set filters such as price, year or fuel.
  3. Set the maximum number of results and click Start.
  4. 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.

FieldTypeDefaultMeaning
modestringsearchWhat to collect: search, urls, dealers or sitemap
maxItemsinteger50Maximum results (free plans: 10)
sectionstringcarsOne of 14 sections, such as cars, buses, trucks, motorcycles, boats or parts
make / modelstringemptyMake and model, for example BMW and X5
yearFrom / yearTointegernoneModel year range
priceMin / priceMaxintegernonePrice range in euro
fuelType / transmissionstringanyFuel and gearbox filters
region / sellerTypestringanyBulgarian region; dealer or private
sortBystringnewestAlso price-asc, year-desc, mileage-asc
fetchDetailsbooleanfalseOpen every listing page for the full gallery, equipment and seller block
includePriceHistorybooleanfalseAdd one row per price step
onlyNew / trackPriceChangesbooleanfalseMonitor 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.

FieldDescription
listingId, url, titleListing number, address and title
vehicleTypecar, bus, truck, motorcycle, boat, part, tire-or-wheel and the other sections
price, currency, priceOnRequest, vatIncludedAsking price in euro, a flag for ads that say "price on request" (no price is output) and whether VAT is included
changeType, previousPrice, priceChange, priceChangePctMonitor rows: new, price-drop or price-increase, old price, difference and percent
make, model, year, productionMonthMake, model, production year and month
mileage, mileageUnitOdometer in km
fuelType, transmission, driveType, bodyType, color, conditionLowercase English values such as petrol, automatic and suv
engineSize, engineSizeUnit, powerHp, euroClass, batteryKwhEngine size in cc, horsepower, Euro class and battery capacity
seats, loadCapacityKg, axles, engineHours, vinFilled only when the seller entered them
specsEvery other labelled value of the listing page, with the site's Bulgarian labels
features, descriptionEquipment list and the seller's text
city, region, locationText, address, latitude, longitudeWhere the vehicle is; address and map position come from dealer ads only
images, imageCount, videoUrl, hasVideoGallery (up to 17), photo count and video link
publishedAt, updatedAt, modifiedAt, viewsPublication, last edit and sitemap time, and view count
promoTier, isReservedPromotion tier and reserved flag
isPrivateSeller, sellerName, sellerUrl, dealerSince, sellerPhoneSeller type; identity only for dealers, phone only with Include dealer contact details
dealerId, memberSince, listingCount, openingHours, logoUrlDealer rows
step, changedAt, isInitialPricePrice-history rows
sourceSite, country, scrapedAtSource, 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.

EventCharged forPrice per resultPer 1,000 results
Vehicle listingOne listing from a search, an address or a dealer$0.022$22.00
Vehicle listing with page detailsOne listing opened on its own page$0.03256$32.56
Dealer profileOne dealer from the directory$0.03256$32.56
Price history stepOne 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 Scraperstudio-ambadevilscrapes
Fields75 flat, typed keys4025
Sections14VehiclesCars
Dealers, price history, sitemap feedYesNot listedNot listed
PriceFrom $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.

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.

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.

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