# Mobile.bg Scraper - Bulgaria Used Cars & Seller Phones (`normdata/mobile-bg-scraper`) Actor

Scrape Mobile.bg, Bulgaria's biggest car marketplace: make, model, year, price in EUR, km, fuel, power, gearbox, location and features, with 30+ filters and no 3,000 limit. Add Details for seller phones, VIN, price history, views, condition and all photos.

- **URL**: https://apify.com/normdata/mobile-bg-scraper.md
- **Developed by:** [Norm Data](https://apify.com/normdata) (community)
- **Categories:** E-commerce, Lead generation
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 cars

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![Norm Data](https://raw.githubusercontent.com/FabriAV/normdata/refs/heads/main/assets/banner_norm2.png)

## 🚗 Mobile.bg Scraper - Bulgaria Used Cars & Seller Phones

Extract cars from **Mobile.bg**, Bulgaria's biggest car marketplace, with more than 240,000 cars and SUVs from dealers and private sellers. For each car you get the **make, model, production month, price in EUR with the VAT note, km, fuel, power, engine size, gearbox, body type, color, Euro standard, battery size, province and town, dealer name and page, the start of the seller's text, the equipment list in English, the main photo and paid promotion**. Turn on **Details** to also get **every seller phone number, the VIN, condition, first price and full price history, views, last edit time, the dealer's address and member-since year, features by group, WLTP range for electric cars and every photo**. It collects **1,000 cars in about 6 seconds**, or about 2 minutes with Details, gets past the site's 3,000-result limit on its own, and can run on a schedule to send you **only new ads**.

> 👉 **Try it now:** press **Start**. The ready-made input gives you 10 cars in a few seconds.<br>
> 💰 **$0.0105 per car** on the Free plan (10 cars per run), from $0.0096 on paid plans. [See pricing](#-pricing)

### ✨ Why this scraper?

> - **Fast**<br>
>   1,000 cars in about 6 seconds without Details, about 2 minutes with them.
>
> - **Complete**<br>
>   Splits big searches by itself to get past the 3,000-result limit: a full make like Kia (6,841 cars) comes back whole, with no duplicates.
>
> - **Every seller phone**<br>
>   In international format (+359...): the contact number and every other number a dealer lists.
>
> - **Price history**<br>
>   The first price and every change with its date, plus `priceChange` (down or up) straight from the list.
>
> - **Clean, typed data in English**<br>
>   Prices, km, power, engine size, battery and views are numbers. Fuel, gearbox, body type, color, VAT and the 96 equipment features are in English. Places are in Latin letters. "On request" prices have no fake number in `price`.
>
> - **Nothing to set up**<br>
>   No proxy, no login.
>
> - **Apify platform**<br>
>   Schedule runs, get only new cars, export to Excel or CSV, use the API, or connect Google Sheets, Zapier and Make.

### ⚖️ How it compares

Based on each Actor's public input options and output fields (November 2026).

| Capability | This actor | [recordsdata](https://apify.com/recordsdata/mobile-bg-scraper) | [studio-amba](https://apify.com/studio-amba/mobile-bg-scraper) | [devilscrapes](https://apify.com/devilscrapes/mobile-bg-bulgaria-cars) |
|---|:--:|:--:|:--:|:--:|
| Filters in the input (make, model, fuel, gearbox, price, year, km, power...) | **yes** | yes | yes | no (one link) |
| Town with a radius, the 28 provinces or abroad | **yes** | provinces | no | no |
| Filter by any of the 96 equipment features | **yes** | no | equipment | no |
| With photos, video or VIN only, VAT itemized only | **yes** | no | no | no |
| Gets past the site's 3,000-result limit by itself | **yes** | sitemap mode | whole-market mode | no |
| Every seller phone number | **yes** | yes | no | no |
| VIN | **yes** | yes | yes | no |
| First price and full price history | **yes** | yes | price changes between runs | no |
| Equipment list in English, and by group | **yes** | features | no | no |
| Trucks, motorcycles, parts and dealer lists | no (cars and SUVs) | **yes** | no | no |
| Only new ads on a schedule | **yes** | yes | tracking | no |
| Needs a proxy | **no** | no | proxy setting | proxy setting |

### 🚀 How to scrape Mobile.bg

1. Create a free Apify account.
2. Pick the filters you need, or keep the ready-made input.
3. Click **Start**.
4. Download the cars as Excel, CSV or JSON from the **Output** tab.

### 💰 Pricing

#### How much does it cost to scrape Mobile.bg?

You pay a one-time **$0.003** per run, plus a price for each car saved (and for each add-on you turn on):

| Charged for | Free | Bronze | Silver | Gold+ |
| --- | --- | --- | --- | --- |
| **Car**: One car listing from Mobile.bg: make, model, year, price, mileage, specs, features, location and seller. | 0.0105 | 0.0096 | 0.0088 | 0.008 |
| **Car details**: Extra per car when Details is on: all seller phones, VIN, condition, price history, views, last edit, exact location, dealer address, features by group, electric range and all photos. | 0.0148 | 0.0134 | 0.0122 | 0.011 |

Example: 1,000 cars cost about **$9.6** on Bronze. No proxy or compute costs on top.

### 📦 What data you get

| Field | Description |
| --- | --- |
| `imageUrl` | Main photo. |
| `sellerLogo` | Dealer logo (dealers only). |
| `id` | Mobile.bg ad number. |
| `title` | Make, model and the seller's modification text, as on the site. |
| `make`, `model` | Make and model as Mobile.bg lists them. |
| `modification` | *(Details)* The seller's version text after the model, like "d M Sport xDrive". |
| `year` | Year made. |
| `price`, `priceText`, `currency`, `vat` | Price in euros (null when "by agreement"), the price as shown, its currency and the VAT note (VAT included, VAT excluded or No VAT charged). |
| `priceChange` | `down` or `up` when the price changed recently (the arrow on the list). |
| `originalPrice` | *(Details)* The price when the ad was posted. |
| `mileageKm` | Kilometers driven. |
| `fuel` | Petrol, Diesel, Electric, Hybrid, Plug-in hybrid, LPG or Hydrogen. |
| `powerHp` | Engine power in horsepower. |
| `engineCc` | Engine displacement in cm³ (often left empty by sellers). |
| `gearbox` | Manual, Automatic or Semi-automatic. |
| `bodyType` | Sedan, Estate, Hatchback, SUV, Coupe, Convertible, Minivan, Van, Pickup or Stretch limousine. |
| `color` | Exterior color in English. |
| `euroStandard` | Emission standard, like Euro 6. |
| `batteryKwh` | Battery capacity of electric and plug-in cars. |
| `rangeKm` | *(Details)* WLTP range on one charge (electric cars). |
| `condition` | *(Details)* Used, New or Damaged. |
| `vin` | *(Details)* Vehicle identification number, when the seller gave it. |
| `country`, `region`, `city` | Where the car is: country, Bulgarian province (or Abroad) and town, in Latin letters. |
| `location` | *(Details)* The car's location line as the ad shows it. |
| `sellerType`, `sellerName` | `Private` or `Dealer`, and the dealer's name. |
| `sellerAddress`, `sellerSinceYear` | *(Details)* Dealer's address and the year it joined Mobile.bg. |
| `description` | The seller's text (Bulgarian): the start of it, or all of it with Details. |
| `photosCount` | Number of photos. |
| `views` | *(Details)* How many times the ad was viewed. |
| `promotion`, `newListing` | Paid placement: BEST, TOP or VIP (null for regular ads), and whether the site marks the ad as new. |
| `url` | Ad page on Mobile.bg. |
| `sellerUrl` | Dealer's page on Mobile.bg (dealers only). |
| `phones` | *(Details)* The seller's phone numbers in international format (+359...). |
| `features` | Equipment and extras in English, like Navigation, 4x4, Leather interior or Service book. |
| `featuresByGroup` | *(Details)* Features sorted into Safety, Comfort, Exterior, Interior, Protection, Special and Other. |
| `priceHistory` | *(Details)* Every price change: date, change in euros and new price. |
| `images` | *(Details)* All photos, full size. |
| `productionDate` | Month and year made (YYYY-MM). |
| `editedAt` | *(Details)* When the seller last edited the ad, Bulgaria time (YYYY-MM-DDTHH:MM). |
| `scrapedAt` | When this row was saved. |
| `error` | Only present when a row failed. The fields that loaded are still there. |

Fields marked *Details* only appear when that add-on is on.

#### Example row (trimmed)

```json
{
  "imageUrl": "https://cdn2.focus.bg/mobile/photosorg/509/1/11789159720056509_hB.webp",
  "sellerLogo": "https://cdn2.focus.bg/mobile/images/houseslogos/h17767058374828935.pic?17938298499",
  "id": "11789159720056509",
  "title": "BMW 320 M SPORT-SHADOW LINE / 166000KM/",
  "make": "BMW",
  "model": "320",
  "modification": "M SPORT-SHADOW LINE / 166000KM/",
  "year": 2019,
  "price": 23999,
  "priceText": "23 999 €",
  "currency": "EUR",
  "vat": "No VAT charged",
  "priceChange": "down",
  "originalPrice": 25000,
  "mileageKm": 166000,
  "fuel": "Diesel",
  "powerHp": 190,
  "engineCc": 2000,
  "gearbox": "Automatic",
  "bodyType": "Sedan",
  "color": "Black",
  "euroStandard": "Euro 6",
  "condition": "Used",
  "country": "Bulgaria",
  "region": "Dupnitsa",
  "city": "Dupnitsa",
  "location": "Dupnitsa",
  "sellerType": "Dealer",
  "sellerName": "M AUTO",
  "sellerAddress": "гр. Дупница, Дупница",
  "sellerSinceYear": 2026,
  "description": "Shadow line, M sport. Топ състояние, обслужена! Дистроник, дигитален километраж, парктроник, камера, асистент за паркиране, за внезапно спиране, следене на маркировката и много ...",
  "photosCount": 17,
  "views": 2402,
  "promotion": "TOP",
  "newListing": true,
  "url": "https://www.mobile.bg/obiava-11789159720056509-bmw-320-m-sport-shadow-line-166000km",
  "sellerUrl": "https://mauto16.mobile.bg",
  "phones": ["+359899422666"],
  "features": ["4/5 doors", "Auto start-stop", "Apple CarPlay / Android Auto"],
  "featuresByGroup": { "Safety": ["GPS tracking system", "Adaptive headlights", "ABS"], "Other": ["Fully serviced", "Newly imported", "Registered"], "Exterior": ["4/5 doors", "LED headlights", "Alloy wheels"], "Protection": ["Alarm", "Comprehensive insurance (casco)", "Central locking"], "Interior": ["Leather interior"], "Comfort": ["Apple CarPlay / Android Auto", "Auto start-stop", "Bluetooth / hands-free"] },
  "priceHistory": [{ "date": "2026-10-21T06:43", "change": -1, "price": 24999 }],
  "images": [
    "https://cdn2.focus.bg/mobile/photosorg/509/1/big1/11789159720056509_hB.webp",
    "https://cdn2.focus.bg/mobile/photosorg/509/1/big1/11789159720056509_vv.webp",
    "https://cdn2.focus.bg/mobile/photosorg/509/1/big1/11789159720056509_Gk.webp"
  ],
  "productionDate": "2019-08",
  "editedAt": "2026-11-04T06:51",
  "scrapedAt": "2026-11-04T22:04:11.821Z"
}
```

### ⚙️ Input

| Section | What it's for |
| --- | --- |
| **Maximum results** | Always first, caps the whole run. Empty means no limit. |
| **What to scrape** | Makes, models, regions, towns and radius around the towns. |
| **Filters** | Condition, fuel, gearbox, body type, color, minimum price (EUR), maximum price (EUR), year from, year to, maximum km, minimum power (hp), maximum power (hp), minimum engine size (cc), maximum engine size (cc), emission standard, features, seller, with photos only, with video only, with VIN only, VAT itemized only and sort. |
| **Add-ons** | Details. |
| **Monitoring** | Only new cars and monitor name. |
| **Links** | Links instead of the fields above. Filters are ignored with links. |

#### Input examples

**Every BMW 320 and Audi A4 in Sofia and Plovdiv, with the seller's phones and VIN:**

```json
{
  "models": ["BMW 320", "Audi A4"],
  "regions": ["Sofia", "Plovdiv"],
  "includeDetails": true
}
```

**Diesel automatics from 2018, between 10,000 and 25,000 EUR, under 150,000 km:**

```json
{
  "fuel": "Diesel",
  "gearbox": "Automatic",
  "minYear": 2018,
  "minPrice": 10000,
  "maxPrice": 25000,
  "maxMileage": 150000
}
```

**SUVs with 4x4, navigation and a panoramic roof within 30 km of Varna, from dealers:**

```json
{
  "bodyType": "SUV",
  "features": ["4x4", "Navigation", "Panoramic roof"],
  "cities": ["Varna"],
  "radiusKm": "30",
  "sellerType": "dealer"
}
```

**Every electric car with its battery and WLTP range:**

```json
{
  "fuel": "Electric",
  "includeDetails": true
}
```

**Damaged cars with a VIN, newest first:**

```json
{
  "condition": ["damaged"],
  "withVinOnly": true,
  "sort": "newest",
  "includeDetails": true
}
```

**New ads every day (schedule this run):**

```json
{
  "onlyNew": true,
  "monitorName": "daily-ads"
}
```

**Links (filters are ignored):**

```json
{
  "startUrls": [
    { "url": "https://www.mobile.bg/obiavi/avtomobili-dzhipove/bmw/320/oblast-sofiya" },
    { "url": "https://www.mobile.bg/obiava-11788890948912064-bmw-320-d-m-pack-face-pano-xdrive-8-zf" }
  ],
  "includeDetails": true
}
```

### 🔗 Related scrapers

> - [CRautos Scraper](https://apify.com/normdata/crautos-scraper): Costa Rica Used Cars & Seller Phones.
> - [Moteur.ma Scraper](https://apify.com/normdata/moteur-ma-scraper): Morocco Used Cars & Seller Phones.
> - [Patiotuerca Scraper](https://apify.com/normdata/patiotuerca-scraper): Ecuador Used Cars & Dealer Phones.
> - [8891 Scraper](https://apify.com/normdata/auto8891-scraper): Taiwan Used Cars: Prices, Mileage, Dealers.

### ❓ FAQ and troubleshooting

#### Is there a Mobile.bg API? Do I need an API key?

> Mobile.bg has no public data API for this. This Actor works as a Mobile.bg API alternative: it reads the public pages and gives you clean JSON, CSV or Excel, with no API key, no login and no code to maintain. You can also call it from your own code with the Apify API, or from an AI agent through MCP:
> `claude mcp add --transport http apify "https://mcp.apify.com?tools=normdata/mobile-bg-scraper"`

#### Why do I get only 10 cars?

> On the Apify free plan each run saves up to 10 results, so you can try it before paying. Any paid plan removes the limit.

#### How many cars are there?

> About 241,000 cars and SUVs as of November 2026.

#### Are prices in euros?

> Yes. Bulgaria uses the euro, and `vat` says whether VAT is included, excluded, or not charged.

#### Are fuel, gearbox and features in Bulgarian?

> No, in English (Petrol, Diesel, Manual, Automatic, Navigation...). Provinces and towns are in Latin letters. Make and model stay as Mobile.bg writes them, and the seller's text stays in Bulgarian.

#### Few or no results

> Write models with their make ("BMW 320", "VW Golf"); the log says which names were skipped. Loosen a filter if nothing matches.

#### A car a little under the minimum price

> The site compares prices with VAT included, so a car priced "VAT excluded" can show a lower number than your filter.

#### Is this an official Mobile.bg tool?

> No. It is independent and not affiliated with Mobile.bg. It reads only data Mobile.bg publishes on its public pages, at a moderate pace. Use the data in line with Mobile.bg's terms and the laws that apply to you.

### 📧 Contact

Need a scraper for a different site, or found something wrong with this one? norm.data.scrapers@gmail.com

# Actor input Schema

## `maxItems` (type: `integer`):

Stop after this many cars in total. Leave empty for no limit. The Apify Free plan is always capped at 10.

## `makes` (type: `array`):

Car makes (213 on Mobile.bg; type to search).

## `models` (type: `array`):

Make and model, like BMW 320, Volkswagen Golf, Mercedes-Benz E 220 or Toyota RAV4.

## `regions` (type: `array`):

Bulgarian province where the car is, or Abroad (cars for sale outside Bulgaria).

## `cities` (type: `array`):

Town or village in Bulgaria, like Sofia, Plovdiv, Varna or Burgas (Latin or Cyrillic). Pick a region too when the name exists in more than one.

## `radiusKm` (type: `string`):

Also include cars this far from the towns above.

## `condition` (type: `array`):

Leave empty for what the site shows by default: used, new and damaged cars.

## `fuel` (type: `string`):

Engine type.

## `gearbox` (type: `string`):

Manual, automatic or semi-automatic.

## `bodyType` (type: `string`):

Body style.

## `color` (type: `string`):

Exterior color.

## `minPrice` (type: `integer`):

Only cars from this price, in euros. The site compares prices with VAT included.

## `maxPrice` (type: `integer`):

Only cars up to this price, in euros. The site compares prices with VAT included.

## `minYear` (type: `integer`):

Only cars made in this year or later.

## `maxYear` (type: `integer`):

Only cars made in this year or earlier.

## `maxMileage` (type: `integer`):

Only cars with at most this many kilometers.

## `minPowerHp` (type: `integer`):

Only cars with at least this much horsepower.

## `maxPowerHp` (type: `integer`):

Only cars with at most this much horsepower.

## `minEngineCc` (type: `integer`):

Only cars with at least this displacement in cm³.

## `maxEngineCc` (type: `integer`):

Only cars with at most this displacement in cm³.

## `euroStandard` (type: `string`):

Only cars with this Euro standard or better.

## `features` (type: `array`):

Only cars that have all of these (96 features, like Navigation, Leather interior, 4x4, Panoramic roof, Service book).

## `sellerType` (type: `string`):

Private sellers or dealers only.

## `withPhotosOnly` (type: `boolean`):

Only ads with photos.

## `withVideoOnly` (type: `boolean`):

Only ads with a video.

## `withVinOnly` (type: `boolean`):

Only ads where the seller gave the VIN.

## `vatItemizedOnly` (type: `boolean`):

Only cars sold with VAT shown separately (useful for companies).

## `sort` (type: `string`):

Order of the results (the site's own sorting). Split searches are saved by make, model, year and price instead.

## `includeDetails` (type: `boolean`):

Opens each car's own page for the seller's phone numbers, VIN, condition, price history (first price and every change), views, last edit time, exact location, dealer address and member-since year, features by group, WLTP range for electric cars and all photos.

## `onlyNew` (type: `boolean`):

Skip cars saved by earlier runs with the same monitor name.

## `monitorName` (type: `string`):

Runs with the same name share their history. Use a different name for each schedule.

## `startUrls` (type: `array`):

Mobile.bg car search pages with any filters set on the site (mobile.bg/obiavi/avtomobili-dzhipove/bmw/320/oblast-sofiya) or car pages (mobile.bg/obiava-11788890948912064-bmw-320-d). Filters are ignored with links.

## Actor input object example

```json
{
  "maxItems": 10,
  "models": [
    "BMW 320"
  ],
  "sort": "newest",
  "includeDetails": true
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxItems": 10,
    "models": [
        "BMW 320"
    ],
    "sort": "newest",
    "includeDetails": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("normdata/mobile-bg-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "maxItems": 10,
    "models": ["BMW 320"],
    "sort": "newest",
    "includeDetails": True,
}

# Run the Actor and wait for it to finish
run = client.actor("normdata/mobile-bg-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxItems": 10,
  "models": [
    "BMW 320"
  ],
  "sort": "newest",
  "includeDetails": true
}' |
apify call normdata/mobile-bg-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,normdata/mobile-bg-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/7FA7O7RHXa3WV9Ggo/builds/V0BLhCesgrPtpNPiM/openapi.json
