Imot.bg Scraper - Bulgaria Property Listings & Prices avatar

Imot.bg Scraper - Bulgaria Property Listings & Prices

Pricing

from $3.52 / 1,000 property searches

Go to Apify Store
Imot.bg Scraper - Bulgaria Property Listings & Prices

Imot.bg Scraper - Bulgaria Property Listings & Prices

Scrape Imot.bg listings across Bulgaria: asking price, area, floor, construction year, photos, agency contacts and price cuts. Sale and rental, in Bulgarian.

Pricing

from $3.52 / 1,000 property searches

Rating

0.0

(0)

Developer

SIÁN OÜ

SIÁN OÜ

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Imot.bg Scraper - Bulgaria Property Listings & Prices 🚀

Store SIÁN Agency Store Njuškalo Scraper Store Sreality Scraper Store Otodom Scraper

🎉 Every Imot.bg advert, in Bulgarian, with the price cut already flagged

For analysts pricing the Bulgarian market, agencies sourcing stock, and anyone tired of scrolling 25 pages by hand

🔎 What is the Imot.bg Bulgaria Property Scraper — and when should you use it?

The Imot.bg Bulgaria Property Scraper turns public Imot.bg property adverts from anywhere in Bulgaria into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

Use it when you need: Bulgarian sale and rental adverts as rows: asking price or monthly rent, price per square metre, built area, plot size, floor and building height, heating, construction type and year, photos, the contact phone and the estate agency behind the advert. Imot.bg's own price-move flag comes through too, so an advert it is currently marking as reduced is labelled on arrival. Switch on full details and each row also carries the untruncated advert text, every photo, the feature list, the publication or last-edit date, the view count and the agency's office phones, address, website and years on the portal.

Use something else when: the property is not in Bulgaria. Use Njuškalo Scraper for Croatia's biggest classifieds site, with the same sale-and-rent row shape. Use Sreality Scraper for the Czech market leader, including price per square metre and agency contacts. Use Otodom Scraper for Poland, sale and rent, from the country's dominant portal. This actor covers the public listing sections of imot.bg — Продажби and Наеми, plus the Greece section Imot.bg publishes for Bulgarian buyers. The wanted-ad sections (Купува, Търси да наеме) are not on the main portal and are out of scope, and so is sold history, because the site publishes only what is currently on the market.

🤖 Use with AI agents

Already connected to the Apify MCP server? Just ask for this Actor by name: sian.agency/imot-property-scraper

Your agent can pay for its own runs. This Actor is eligible for agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

I want property adverts and asking prices from Imot.bg using the Apify Actor `sian.agency/imot-property-scraper`.
Use it when I need: Bulgarian sale and rental adverts as rows: asking price or monthly rent, price per square metre, built area, plot size, floor and building height, heating, construction type and year, photos, the contact phone and the estate agency behind the advert. Imot.bg's own price-move flag comes through too, so an advert it is currently marking as reduced is labelled on arrival. Switch on full details and each row also carries the untruncated advert text, every photo, the feature list, the publication or last-edit date, the view count and the agency's office phones, address, website and years on the portal.
Don't use it when: the property is not in Bulgaria — use njuskalo-property-scraper or sreality-property-scraper or otodom-property-scraper instead.
How to call it: give `locations` a list of Imot.bg areas (`grad-sofiya`, `oblast-burgas`, `grad-plovdiv` — the picker lists all 27 cities, all 27 regions and the Greece section) and set `dealType` to `prodazhbi` for sale or `naemi` for rent. Add `propertyTypes` to pick flats by room count, houses, plots, offices and the rest; leaving it empty sweeps every type, and naming types is also how a big city is covered past Imot.bg's 1,000-per-search ceiling, because each type is searched separately. Narrow with `minPrice`, `maxPrice`, `minArea`, `maxArea`, `onlyPriceReduced`, `onlyNewListings` or `onlyPrivateSellers` — anything a filter excludes is never saved and never billed. `includeDetails` opens each advert for its full text, every photo and the agency's contacts, for an extra charge per listing. To expand adverts you already have, set `operation` to `detail` and pass `listingUrls`; to reach a district page the picker does not list, paste its imot.bg address into `searchUrls`.
Start with this input:
{
"operation": "search",
"dealType": "prodazhbi",
"locations": [
"grad-sofiya"
],
"propertyTypes": [
"dvustaen",
"tristaen"
],
"maxResults": 200
}
Ask me which Bulgarian cities or regions to cover, whether they want sale or rental adverts, and whether the full advert text and agency contact details are worth the extra per-listing charge, then run the Actor and summarise the results as a table.

Things you can ask your agent for:

  • Pull every two-bedroom flat for sale in Sofia under €200,000 and rank the districts by median price per square metre.
  • Find owner-listed apartments in Varna whose price Imot.bg is currently flagging as reduced, with a phone number for each.
  • Give me this week's new adverts in Plovdiv and Burgas with the agency name and office phone.

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at apify.com/sian.agency/imot-property-scraper.md.

📋 Overview

Imot.bg is where Bulgaria's property market actually happens. Around 170,000 sale adverts and 38,000 rentals sit on it, from national agency chains down to owners posting a phone number. This Actor reads it the way the site publishes it and hands you the rows.

Why professionals choose us:

  • The full advert, not a summary: 50 fields per listing, including plot size, heating, construction type, build year and the agency's own phones, address and website
  • 40 listings per request: a 1,000-listing sweep of Sofia is 25 requests and finishes in under a minute
  • 🎯 Cyrillic that survives the trip: Imot.bg publishes in windows-1251, and this Actor decodes it from the page's own declaration, so Bulgarian text arrives readable in JSON, CSV and Excel alike
  • 💰 $4.00 per 1,000 listings: 20% under the field leader, with a richer row and no per-run surprise
  • 💎 Price cuts flagged on arrival: Imot.bg marks the direction of each advert's last price move, and this Actor reads that flag, so a reductions-only run works the first time you press Start
  • NEW: filter to owner adverts only and get the listings with no agency behind them, phone number included

✨ Features

  • 🔍 Two operations in one Actor: search Imot.bg's listing pages, or expand specific adverts by URL
  • 🇧🇬 Every area Imot.bg indexes: 27 cities, 27 regions and the Greece section, picked from a list rather than typed
  • 🏠 All 22 property types: flats by room count, houses, floors of houses, maisonettes, villas, plots, farmland, garages, shops, offices, warehouses, industrial premises, restaurants and hotels
  • 🤝 Sale and rent in the same Actor: one bill, one dataset, one schedule
  • 📉 Price-cut filter: keep only the adverts Imot.bg is currently flagging as reduced
  • 👤 Owner-advert filter: skip the agencies and keep the for-sale-by-owner listings
  • 🆕 New-advert filter: keep only the cards carrying Imot.bg's own "НОВА ОБЯВА" badge
  • 📊 Price per square metre computed for you: on every row, sale or rental, no spreadsheet formula needed
  • 📄 Full details as a paid add-on: untruncated advert text, every photo, the feature list, the publication or edit date, the view count and the agency's office contacts
  • 🔗 Paste a URL instead: any Imot.bg search address works, including district pages the form does not reach

🎬 Quick Start

Pick a city, pick whether you want sales or rentals, press Start. The defaults return Sofia sale listings, so a run with no configuration at all still gives you real data. Everything below is optional narrowing.

curl -X POST 'https://api.apify.com/v2/acts/sian.agency~imot-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation":"search","dealType":"prodazhbi","locations":["grad-sofiya"],"maxResults":100}'

🚀 Getting Started (3 Simple Steps)

Step 1: Choose your areas

Pick one or more cities and regions from the list. A city entry covers the city and its neighbourhoods; the matching region entry covers the towns and villages around it.

Step 2: Choose sale or rent, and the property types

Leave the property-type list empty to sweep everything, or pick the types you care about. Each type is searched separately, which is also how you get past Imot.bg's 1,000-listing ceiling on a big city.

Step 3: Press Start, then export

Watch the run log count the pages. When it finishes, download JSON, CSV or Excel from the dataset, or open the HTML report for a summary with the advert links already collected.

That's it! In under a minute, you'll have:

  • Every matching listing with price, area, floor, build year and agency
  • Price per square metre already calculated on each row
  • A copy-ready list of advert links and contact numbers

📥 Input Configuration

FieldTypeRequiredDescription
operationstringNosearch (default) or detail
locationsarrayNoImot.bg areas, e.g. grad-sofiya, oblast-burgas — defaults to Sofia
dealTypestringNoprodazhbi for sale (default) or naemi for rent
propertyTypesarrayNoImot.bg property types; empty means every type
maxResultsintegerNoWhole-run listing budget, default 100
includeDetailsbooleanNoOpen each advert for the full text, all photos and agency contacts
minPrice / maxPriceintegerNoPrice bounds in euros; 0 means no bound
minArea / maxAreaintegerNoArea bounds in square metres; 0 means no bound
onlyPriceReducedbooleanNoKeep only adverts Imot.bg flags as reduced
onlyNewListingsbooleanNoKeep only adverts carrying the "НОВА ОБЯВА" badge
onlyPrivateSellersbooleanNoKeep only owner adverts, with no agency behind them
searchUrlsarrayNoImot.bg search addresses, including district pages
listingUrlsarrayNoImot.bg advert addresses, for the detail operation

Example:

{
"operation": "search",
"dealType": "prodazhbi",
"locations": ["grad-sofiya"],
"propertyTypes": ["dvustaen", "tristaen"],
"maxPrice": 200000,
"maxResults": 500
}

Owner adverts with a price cut, across three cities:

{
"operation": "search",
"dealType": "prodazhbi",
"locations": ["grad-sofiya", "grad-plovdiv", "grad-varna"],
"onlyPrivateSellers": true,
"onlyPriceReduced": true,
"maxResults": 1000
}

Expand specific adverts:

{
"operation": "detail",
"listingUrls": [
{ "url": "https://www.imot.bg/obiava-1a178660257911771-prodava-ednostaen-apartament-grad-sofiya-banishora" }
]
}

📤 Output

Results are saved to the Apify dataset with 50+ fields, including:

FieldTypeDescription
listingIdstringImot.bg advert number
propertyTitlestringThe advert headline, in Bulgarian
urlstringCanonical advert address
pricenumberAsking price, or monthly rent for a rental
currencystringReported, never assumed
pricePerSqmnumberPrice divided by area, computed on every row
priceChangestringreduced or increased, as Imot.bg flags it
area / landAreanumberBuilt area and plot, both in square metres
floor / totalFloorsnumberFloor number and floors in the building
heating / constructionstringHeating type and construction, as the advert states them
constructionYearnumberYear the building was commissioned
locationText / region / districtstringWhere the property is
isPrivateSellerbooleanTrue when there is no agency behind the advert
contactPhonestringThe number printed on the advert
agencyName / agencyPhones / agencyAddressstring, arrayThe agency and how to reach it
photos / photoCountarray, numberPhoto URLs and how many there are
descriptionTextstringThe agent's full advert text (includeDetails)
publishedAt / updatedAtstringWhen it was posted, or last edited (includeDetails)
viewCountnumberHow many times Imot.bg has served it (includeDetails)

Example:

{
"listingId": "1a178660257911771",
"url": "https://www.imot.bg/obiava-1a178660257911771-prodava-ednostaen-apartament-grad-sofiya-banishora",
"propertyTitle": "Продава 1-СТАЕН",
"locationText": "град София, Банишора",
"dealType": "sale",
"price": 120000,
"currency": "EUR",
"priceText": "120 000 €",
"pricePerSqm": 2666.67,
"area": 45,
"floor": 6,
"totalFloors": 17,
"heating": "ТЕЦ",
"construction": "ЕПК, Въведен в експлоатация 1980 - 1989 г.",
"constructionYear": 1980,
"features": ["ЕПК", "Асансьор"],
"photoCount": 11,
"publishedAt": "2026-08-13T06:29:00.000Z",
"viewCount": 3044,
"contactPhone": "0878301830",
"agencyName": "АГЕНЦИЯ 'СТОЛИЧНИ ИМОТИ'",
"agencyPhones": ["0878301830", "0886101830"],
"agencyMemberSince": 2004,
"isPrivateSeller": false
}

💼 Use Cases & Examples

1. Bulgarian asking-price index

A property analyst measuring what a district really asks per square metre.

Input: one or more cities, all property types, a high maxResults Output: every listing with price, area and price per square metre already computed Use: group by district and build the index that Imot.bg's own page-level average cannot give you

2. Price-cut hunting

A buyer's agent or a flipper who only wants the sellers who have started moving.

Input: onlyPriceReduced: true, a city, an optional price ceiling Output: only the adverts Imot.bg is currently flagging as reduced Use: call the shortlist the same morning, before the reduction is priced in

3. Estate agency lead generation

An agency or a proptech vendor mapping who holds the stock in a district.

Input: a city or region, full details switched on Output: every advert with its agency name, office phones, address, website and years on Imot.bg Use: group by agency, rank by listing count, and approach the ones that dominate your patch

4. For-sale-by-owner sourcing

An investor who wants the sellers no agency has signed yet.

Input: onlyPrivateSellers: true, one or more cities Output: only adverts with no agency behind them, each with the owner's phone number Use: the listings that never reach an agency feed, which is why Bulgarians scroll Imot.bg by hand

5. New listing monitoring

A relocation service or a buying agent who needs to see today's stock today.

Input: onlyNewListings: true on a daily schedule, with your saved areas Output: only the adverts carrying Imot.bg's own new-advert badge Use: keep the IDs you have seen, pay only for what appeared since yesterday

6. Rental yield screening

An investor comparing what a flat costs against what it rents for.

Input: two runs on the same city, one prodazhbi and one naemi Output: sale and rental rows sharing area, room count and district Use: match on area and district for a gross-yield picture no single Imot.bg page shows

7. Land and development sourcing

A developer looking for plots with the right zoning and utilities.

Input: propertyTypes: ["partsel"] with a region and a plot-size bound Output: plots with their size, price per square metre and the utilities the advert declares Use: shortlist by price per square metre before anyone drives out to look

🔗 Integration Examples

JavaScript/Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('sian.agency/imot-property-scraper').call({
operation: 'search',
dealType: 'prodazhbi',
locations: ['grad-sofiya'],
propertyTypes: ['dvustaen'],
maxResults: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('sian.agency/imot-property-scraper').call(
run_input={
'operation': 'search',
'dealType': 'naemi',
'locations': ['grad-varna'],
'maxResults': 200,
}
)
for item in client.dataset(run['defaultDatasetId']).iterate_items():
print(item['propertyTitle'], item['price'], item['pricePerSqm'])

cURL

curl -X POST 'https://api.apify.com/v2/acts/sian.agency~imot-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation":"search","dealType":"prodazhbi","locations":["grad-plovdiv"],"onlyPriceReduced":true}'

Automation Workflows (N8N / Zapier / Make)

  1. Trigger: a daily schedule, or a webhook from your own system
  2. HTTP Request: call the Actor's run-sync endpoint with your saved input
  3. Process: filter the returned rows on price per square metre or district
  4. Action: append to a sheet, upsert into your CRM, or send the new adverts to Slack

📊 Performance & Pricing

FREE Tier (Try It Now)

  • 25 listings per run, with every field and every filter available
  • No credit card required
  • Enough to check the data before you commit to a sweep
  • Unlimited listings per run, up to Imot.bg's own 1,000-per-search ceiling
  • Pay-per-result: charged per listing saved, never for an advert your filters excluded
  • Full details available as a per-listing add-on, only when you switch it on

💰 $4.00 per 1,000 listings, which is 20% below the leading Imot.bg Actor on the Store. Plot size, heating, construction year, the price-move flag and the agency contacts all sit on the same row.

🔗 View current pricing

❓ Frequently Asked Questions

Q: How many listings can I get per run? A: FREE tier: 25 per run. PAID tier: as many as you budget for, up to the 1,000 Imot.bg serves per search. Wider than that, split the run by property type, by region or by price band.

Q: Will the Bulgarian text come through correctly? A: Yes. Imot.bg is published in windows-1251 rather than UTF-8. This Actor decodes it from the encoding the page itself declares, so Cyrillic arrives intact in the dataset, in every export and in the HTML report.

Q: Are prices in euros or leva? A: Imot.bg quotes in euros, and the currency is reported on every row rather than assumed. A row that ever comes back in another currency says so instead of quietly changing meaning.

Q: What is the difference between a listing row and full details? A: A listing row carries everything on the search card: price, area, floor, heating, build year, the agency, a contact phone and four photos. Full details opens the advert itself and adds the untruncated text, every photo, the feature list, the publication or edit date, the view count and the agency's office contacts.

Q: Can I search a single Sofia neighbourhood? A: Yes, through Search URLs. Open the district page on imot.bg and paste the address. The form covers cities and regions; a pasted address reaches anything the site publishes.

Q: What happens to an advert that has been withdrawn? A: Imot.bg answers a dead advert with a normal-looking page that has nothing in it. The Actor recognises that, writes a row saying the listing could not be found, and does not charge you for it.

Q: What output formats are available? A: JSON, CSV, Excel and XML. Export straight from the Apify dataset, or read them over the API.

Q: Is this legal? A: Yes. Only publicly available adverts are read. See the legal note below.

🐛 Troubleshooting

A run returns fewer listings than the city has adverts

  • Imot.bg serves at most 1,000 results per search and says so on the page
  • Split the run by property type, add the surrounding region, or use a price band
  • District-level Imot.bg addresses pasted into Search URLs each get their own 1,000

A filter returned nothing

  • Check the combination exists: plots and farmland are sale adverts only, rooms and pitches are rentals only
  • Price and area bounds exclude adverts where Imot.bg publishes no number, so a tight bound on a thin market can empty the result
  • Nothing filtered out is charged, so an empty run costs you the run-start fee and nothing else

A listing URL comes back as not found

  • The advert has been sold, rented or withdrawn; Imot.bg keeps the address alive but empties the page
  • Re-run the search to pick up what is live today

Cyrillic looks like question marks in Excel

  • Open the CSV with UTF-8 encoding selected, or use the XLSX export, which carries the encoding itself
  • The JSON export is always UTF-8 and needs no configuration

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the legality of web scraping.

Imot.bg is a trademark of Rezon Media. This Actor is not affiliated with, endorsed by, or sponsored by Imot.bg or Rezon Media.

🤝 Support

Telegram Support

Join our active support community


Built by SIÁN Agency | More Tools