Imot.bg Scraper - Bulgaria Property Listings & Prices
Pricing
from $3.52 / 1,000 property searches
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Ü
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Imot.bg Scraper - Bulgaria Property Listings & Prices 🚀
🎉 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
| Field | Type | Required | Description |
|---|---|---|---|
operation | string | No | search (default) or detail |
locations | array | No | Imot.bg areas, e.g. grad-sofiya, oblast-burgas — defaults to Sofia |
dealType | string | No | prodazhbi for sale (default) or naemi for rent |
propertyTypes | array | No | Imot.bg property types; empty means every type |
maxResults | integer | No | Whole-run listing budget, default 100 |
includeDetails | boolean | No | Open each advert for the full text, all photos and agency contacts |
minPrice / maxPrice | integer | No | Price bounds in euros; 0 means no bound |
minArea / maxArea | integer | No | Area bounds in square metres; 0 means no bound |
onlyPriceReduced | boolean | No | Keep only adverts Imot.bg flags as reduced |
onlyNewListings | boolean | No | Keep only adverts carrying the "НОВА ОБЯВА" badge |
onlyPrivateSellers | boolean | No | Keep only owner adverts, with no agency behind them |
searchUrls | array | No | Imot.bg search addresses, including district pages |
listingUrls | array | No | Imot.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:
| Field | Type | Description |
|---|---|---|
listingId | string | Imot.bg advert number |
propertyTitle | string | The advert headline, in Bulgarian |
url | string | Canonical advert address |
price | number | Asking price, or monthly rent for a rental |
currency | string | Reported, never assumed |
pricePerSqm | number | Price divided by area, computed on every row |
priceChange | string | reduced or increased, as Imot.bg flags it |
area / landArea | number | Built area and plot, both in square metres |
floor / totalFloors | number | Floor number and floors in the building |
heating / construction | string | Heating type and construction, as the advert states them |
constructionYear | number | Year the building was commissioned |
locationText / region / district | string | Where the property is |
isPrivateSeller | boolean | True when there is no agency behind the advert |
contactPhone | string | The number printed on the advert |
agencyName / agencyPhones / agencyAddress | string, array | The agency and how to reach it |
photos / photoCount | array, number | Photo URLs and how many there are |
descriptionText | string | The agent's full advert text (includeDetails) |
publishedAt / updatedAt | string | When it was posted, or last edited (includeDetails) |
viewCount | number | How 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 ApifyClientclient = 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)
- Trigger: a daily schedule, or a webhook from your own system
- HTTP Request: call the Actor's run-sync endpoint with your saved input
- Process: filter the returned rows on price per square metre or district
- 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
PAID Tier (Production Ready)
- 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.
❓ 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
⚖️ Is it legal to scrape data?
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
Join our active support community
- For issues or questions, open an issue on the Actor's issues page
- Check SIÁN Agency Store for more automation tools
- 📧 apify@sian-agency.online
Built by SIÁN Agency | More Tools