# Imot.bg Scraper — Bulgaria Property Listings, Prices, No Phones (`highbrow_fame/imot-bg-properties`) Actor

Bulgarian property listings from imot.bg, for sale or to rent: price, area, rooms, floor, building type and year, town and district, agency or private, full description. No phones.

- **URL**: https://apify.com/highbrow_fame/imot-bg-properties.md
- **Developed by:** [yestrue](https://apify.com/highbrow_fame) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.50 / 1,000 property delivereds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Imot.bg Scraper — Bulgaria Property Listings, Prices, No Phones

Get property listings from imot.bg, Bulgaria's largest property portal: price and currency, price per m², area and yard, rooms, floor, building type and year, heating, town, district and region, agency or private seller, the full description, the features, when the listing was published or last edited, and how often it was viewed. For sale and to rent, flats, houses, plots, offices, shops and every other type imot.bg lists. Paste your imot.bg search links — or just type a place.

**Why this one**

- 🔗 **Your search, as you set it up.** Set every filter you like on imot.bg and paste the link. Or type a place here — Sofia, "Varna, Chaika", "Burgas region, Sozopol", in Latin or Cyrillic — and choose sale or rent, property type, price, area and sort below.
- 📚 **Past the 1,000 limit.** imot.bg shows at most 1,000 listings per search, and with its default order those are the paid ones (in a live run, Sofia's first 1,000 three-room flats for sale were all paid listings). Set **Max listings per search** above 1,000 and the search is read in price bands: a live run read 2,000 two-room flats for sale in Sofia from one link, 1,628 of them unpaid listings.
- ⚡ **Fast.** A live test run read Sofia two-room flats for sale, Plovdiv rentals of 60 m² and more, houses up to €200,000 in the Burgas region and rentals in Varna's Chaika district — 5,202 properties, each with its full listing page, in 311 seconds. Without the listing pages, 1,401 properties took 50 seconds.
- 🔒 **No phone numbers, no names of people.** Agencies are named by their company; private sellers by nothing, and without their street. Phone numbers and e-mail addresses in the texts are replaced with `[phone removed]` / `[e-mail removed]`, and the names of brokers and sellers written next to them with `[name removed]`.
- 💸 **You pay only for properties delivered.** A link that is not an imot.bg search, a search page that does not exist, or a place imot.bg does not know comes back as a free record with the reason.

### What you get

For every property:

| Field | What it is |
|---|---|
| `price`, `currency`, `priceOnRequest`, `vat`, `pricePerSqm` | the asking price (EUR; per month for rentals), "price on request", the VAT note (included / excluded / not charged), price per m² |
| `propertyType`, `propertyTypeBg`, `rooms`, `transaction`, `title` | 2-room flat, house, plot, office, … (and imot.bg's own word); rooms for flats; sale or rent |
| `areaSqm`, `yardSqm`, `floor`, `totalFloors` | size (land given in decares is turned into m²), yard, floor (0 = ground floor) of how many |
| `landUse`, `landCategory` | for farmland: arable land, orchard, … and its category (1-10) |
| `construction`, `buildYear`, `buildPeriod`, `completed`, `districtHeating`, `gas` | brick, panel, EPK, …; the year or decade it was built; false while still being built; central heating and gas |
| `town`, `settlementType`, `district`, `region`, `street` | where it is: city, town, village or resort; the district; the region outside the big towns; the street for agency listings only |
| `sellerType`, `agency`, `agencyUrl` | private or agency, the agency's company name and its imot.bg page |
| `publishedAt`, `editedAt`, `views` | when it was published or last edited (Sofia time), and how often it was viewed |
| `description`, `features`, `summary` | the full ad text, the features (lift, furnished, parking, …), the start of the text as shown in the results |
| `promotion`, `image`, `imageCount`, `url`, `listingId` | the paid placement (BEST / TOP / VIP), the first photo, the number of photos, the listing |
| `input`, `place`, `position`, `scrapedAt`, `status`, `error` | which search it came from, and why a search gave nothing |

`pricePerSqm`, `publishedAt`, `editedAt`, `views`, `description` and `features` come from the listing page — keep **Open every listing for its details** ticked (the default). The texts are in Bulgarian, as written on imot.bg.

#### Example

A real record from a live run — two-room flats for sale in Varna up to €150,000, 26 September 2026 (the description is cut here):

```json
{
  "listingId": "1b178816907976718",
  "url": "https://www.imot.bg/obiava-1b178816907976718",
  "transaction": "sale",
  "propertyType": "2-room flat",
  "rooms": 2,
  "price": 134000,
  "currency": "EUR",
  "vat": "not charged",
  "pricePerSqm": 1887,
  "areaSqm": 71,
  "floor": 5,
  "totalFloors": 10,
  "construction": "brick",
  "buildYear": 2025,
  "completed": true,
  "town": "Варна",
  "settlementType": "city",
  "district": "Аспарухово",
  "street": "к-с Саут Бей",
  "sellerType": "agency",
  "agency": "ИНТЕРНЕШЪНЪЛ РИЪЛ ЕСТЕЙТС ООД",
  "agencyUrl": "https://international.imot.bg",
  "promotion": "TOP",
  "imageCount": 7,
  "image": "https://imotstatic3.focus.bg/imot/photosimotbg/1/718/big1/1b178816907976718_fI.jpg",
  "publishedAt": "2026-08-31T12:37:00+03:00",
  "views": 1379,
  "features": ["Тухла", "Асансьор", "Контрол на достъпа", "Охрана", "В затворен комплекс"],
  "description": "ЕКСКЛУЗИВНО от International Real Estates (IRE) - прекрасен двустаен апартамент с морска гледка, на крачки от плажа.\n\nАпартаментът е нов, завършен до ключ…",
  "status": "OK"
}
```

### How to use it

1. Paste **Search links** from imot.bg, one per line — or type **Places** and choose the filters.
2. Set **Max listings per search**. Untick **Open every listing for its details** if you only need the numbers: a live run was nearly three times as fast without it (50 seconds instead of 139 for the same 1,401 properties).
3. Press **Start**, and download the results from the **Output** tab as JSON, CSV or Excel.

To follow new listings in an area, sort by **Newest first**, save your input as a task and schedule it daily.

You can also call it from the Apify API, from Make, Zapier or n8n, or from an AI agent through the Apify MCP server.

### Pricing

You are charged **per property delivered** — see the price on this page. Opening listings for their details costs nothing extra, only time. Links that are not imot.bg searches, search pages that do not exist and places imot.bg does not know are free.

### FAQ

**How many properties per search?** imot.bg itself shows 1,000 at most. Above that, set **Max listings per search** higher and the search is read in price bands of up to 1,000 each, so every listing with a price can be reached. Listings with "price on request" have no price to band by, so a search read in bands leaves them out.

**Which places can I type?** The 27 regional towns (Sofia, Plovdiv, Varna, Burgas, Ruse, Stara Zagora, …) and their regions ("Varna region", "област Варна"), with a district, town or village after a comma: "Sofia, Lozenets", "Plovdiv, Kamenitsa 1", "Burgas region, Sozopol". For anything else, set up the search on imot.bg and paste the link.

**Why are the texts in Bulgarian?** They are the sellers' own words, and place names are kept as imot.bg writes them. The key fields — type, prices, areas, floors, building type, dates, seller type — are numbers or English.

**Why no phone numbers or names?** They are personal data. Every listing has its `url`; buyers and tenants contact the seller on imot.bg.

**Is this affiliated with imot.bg?** No. This is an independent tool that reads public imot.bg listings.

**Like it?** A short review on the Store page helps other people find this Actor. Something missing or broken? Tell us on the Issues tab — we read every one.

# Actor input Schema

## `searchUrls` (type: `array`):

Set up a search on imot.bg with the filters you want and paste the address of the results page (https://www.imot.bg/obiavi/prodazhbi/… or /obiavi/naemi/…). One per line.

## `places` (type: `array`):

Or search here without a link: a regional town (Sofia, Plovdiv, Varna, Burgas…) or a region ("Varna region", "област Пловдив"), optionally with a district, town or village after a comma: "Sofia, Lozenets", "Burgas region, Sozopol". Latin or Cyrillic. The filters below apply.

## `transaction` (type: `string`):

For the places above.

## `propertyType` (type: `string`):

For the places above.

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

Optional. For rent: per month.

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

Optional. For rent: per month.

## `minArea` (type: `integer`):

Optional.

## `maxArea` (type: `integer`):

Optional.

## `sortBy` (type: `string`):

For the places above.

## `maxListingsPerSearch` (type: `integer`):

Stops each search after this many listings. imot.bg shows at most 1,000 per search; above that the search is read in price bands, so every listing with a price can be reached.

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

Adds the full description, the features, when it was published or last edited, the view count, the price per m² and the VAT note, and confirms private or agency. One more page per listing: untick for about twice the speed.

## `maxConcurrency` (type: `integer`):

How many searches to work on at the same time.

## `proxyConfiguration` (type: `object`):

Used only to try again after a network error: the first try goes out directly.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.imot.bg/obiavi/prodazhbi/grad-varna/dvustaen?price_max=150000"
  ],
  "transaction": "sale",
  "propertyType": "any",
  "sortBy": "default",
  "maxListingsPerSearch": 30,
  "includeDetails": true,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Every result as a JSON record, with a status for each input.

## `resultsCsv` (type: `string`):

The same records as CSV, for a spreadsheet.

# 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 = {
    "searchUrls": [
        "https://www.imot.bg/obiavi/prodazhbi/grad-varna/dvustaen?price_max=150000"
    ],
    "maxListingsPerSearch": 30,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("highbrow_fame/imot-bg-properties").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 = {
    "searchUrls": ["https://www.imot.bg/obiavi/prodazhbi/grad-varna/dvustaen?price_max=150000"],
    "maxListingsPerSearch": 30,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("highbrow_fame/imot-bg-properties").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 '{
  "searchUrls": [
    "https://www.imot.bg/obiavi/prodazhbi/grad-varna/dvustaen?price_max=150000"
  ],
  "maxListingsPerSearch": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call highbrow_fame/imot-bg-properties --silent --output-dataset

```

## MCP server setup

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

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/HF7c90HFmAGbLhgnk/builds/M2HjPhPXs0sKWrssR/openapi.json
