How to Scrape Imot.bg Bulgaria Real Estate Listings in 2026
Extract property listings from imot.bg, Bulgaria's top real estate portal — price in EUR/BGN, area, floor, construction type, agency contact and photos, with the windows-1251 trap solved.
Imot.bg is Bulgaria’s number-one real-estate portal, the default place to list and find property in Sofia, Plovdiv, Varna, Burgas and Ruse. For anyone analyzing the Bulgarian housing market, building an agency lead database, or feeding a property aggregator, it’s the source. But imot.bg is an older portal with two specific traps that break naive scrapers immediately: a legacy text encoding that turns Cyrillic into garbage, and dual-currency pricing. This guide covers how the site is structured and how to pull clean, correctly-decoded listing data at scale in 2026.
The windows-1251 trap
Before anything else, the encoding. Imot.bg does not serve UTF-8 — it uses windows-1251, the legacy Cyrillic codepage. If you fetch a page and decode it as UTF-8 (the default in basically every HTTP client), every Bulgarian character — city names, descriptions, agency names — comes out as mojibake. Half the homegrown imot.bg scrapers that “kind of work” are silently corrupting their location and description fields and nobody notices until a Bulgarian speaker reads the output.
The fix is to decode the response bytes as windows-1251 explicitly before parsing. Get that one step right and the rest of the page is straightforward; get it wrong and the entire dataset is unusable for anything text-based.
▶ Run the Imot.bg Scraper — Bulgaria’s #1 property portal across all cities and types, sale and rent. Returns price in EUR/BGN, area, floor, construction type, agency contact and photos — with windows-1251 Cyrillic decoded correctly and optional English translation.
What’s worth extracting
Per listing, imot.bg exposes a rich set of fields, especially when you enable detail-page enrichment:
- Pricing — price in both EUR and BGN, plus a computed price-per-square-meter.
- Size and layout — area in m², room count, floor and total building height.
- Construction — construction type (brick, panel, EPK) and year built — the fields Bulgarian buyers actually filter on.
- Description — full Bulgarian text, with optional English translation for the title, location and description.
- Contact — agency name, phone number and profile link, plus a private-seller indicator.
- Media — every listing photo and a designated cover image.
- Identity and time — listing ID and URL, publication and scrape timestamps.
How extraction works
Imot.bg is parseable with direct HTTP fetches — no login required and no headless browser needed. The flow:
- Target by city + property category, or supply pre-filtered imot.bg search URLs.
- Fetch result pages and walk pagination automatically.
- Decode each response from windows-1251.
- Optionally follow into detail pages to enrich each record with construction type, year built, full description and all photos.
- Parse dual-currency price text into structured EUR/BGN values and compute price-per-m².
Optional proxy configuration handles higher-volume jobs, and when English output is enabled, an external translation API renders Cyrillic titles, locations and descriptions into English — useful for expat-facing products and cross-border investors.
A clean per-listing schema
{
"listing_id": "1a7b39f2",
"url": "https://www.imot.bg/...",
"transaction": "sale",
"property_type": "2-room apartment",
"price_eur": 118000,
"price_bgn": 230800,
"area_m2": 72,
"price_per_m2_eur": 1639,
"rooms": 2,
"floor": "5/8",
"construction_type": "brick (тухла)",
"year_built": 2019,
"location_bg": "София, кв. Лозенец",
"location_en": "Sofia, Lozenets district",
"description_bg": "...",
"description_en": "...",
"agency": {
"name": "Address Real Estate",
"phone": "+359 ...",
"profile_url": "https://www.imot.bg/...",
"is_private_seller": false
},
"cover_image": "https://imot.bg/.../cover.jpg",
"images": ["https://imot.bg/.../1.jpg"],
"published_at": "2026-05-20",
"scraped_at": "2026-05-27T09:00:00Z"
}
Schema choices worth making early:
- Store both
price_eurandprice_bgn. Bulgaria quotes in both; pinning one and discarding the other loses information and complicates comparison across listings. - Always compute
price_per_m2_eur. It’s the metric that makes neighborhood pricing comparable. - Keep
location_bgalongsidelocation_en. The original Cyrillic is the canonical join key; the translation is a convenience, not a replacement. - Persist
year_builtandconstruction_type. New-construction filtering and panel-vs-brick analysis are core Bulgarian market dimensions. - Capture
is_private_seller. It’s the dividing line between an agency-lead dataset and a private-listing dataset.
Typical use cases
- Investor inventory tracking — monitor residential and commercial supply across Sofia, Plovdiv, Varna, Burgas and Ruse.
- Price-per-m² analysis — neighborhood-level pricing comparisons and trend tracking.
- Agency lead databases — build a contact list of agencies with names, phone numbers and profile links (filter out private sellers, or keep only them, depending on your goal).
- New-construction monitoring — filter by
year_builtto surface recent developments. - Relocation and expat research — the English-translation mode makes Cyrillic listings readable for foreign buyers and relocation services.
- Aggregator and CRM feeds — push fresh imot.bg records into a property portal, comparison site, or sales CRM.
Cost math
Pricing is pay-per-event with a negligible per-run start fee and no per-result charge — the marginal cost of each listing is effectively zero, so you pay for compute and any proxy bandwidth. Because it’s HTTP-only with no browser, a full Sofia apartments-for-sale sweep runs fast and cheap. The one variable cost to watch is translation: enabling English output calls an external translation API per field, so turn it on only when you actually need English, not as a default.
Against a DIY build you avoid: discovering the windows-1251 encoding the hard way (after shipping corrupted data), the dual-currency parsing, detail-page enrichment plumbing, and the agency-contact extraction.
Common pitfalls
- UTF-8 decoding corrupts everything. This is the number-one imot.bg mistake — decode as windows-1251 or your Cyrillic fields are garbage.
- Dual currency confusion. A price field may be EUR or BGN depending on context; parse both and don’t assume the smaller number is the discount.
- Detail pages cost extra requests. Construction type, year built, full description and full photo sets often live on the detail page, not the result card — enrichment doubles request volume, so enable it deliberately.
- Translation is an external API. It adds latency and a per-field cost; leave it off unless an English-facing product needs it.
- Private vs agency. Don’t lump them together — flag
is_private_sellerso each downstream use can filter correctly. - Older portal, looser markup. Imot.bg’s HTML is legacy; expect occasional irregular cards and rely on robust parsing rather than brittle fixed selectors.
Wrapping up
Imot.bg isn’t defended by a modern bot stack — its real barrier is age: a 1990s-era encoding and dual-currency quirks that quietly wreck naive scrapers. For a single Sofia snapshot you could hand-roll it, as long as you remember the windows-1251 decode. For a clean, dual-currency, optionally-translated feed across all Bulgarian cities with agency contacts and full photo sets, use a scraper that already handles the encoding, currency and enrichment correctly.
▶ Open the Imot.bg Bulgaria Real Estate Scraper on Apify — structured EUR/BGN listings with agency contacts, photos and optional English translation. Pay-per-event, start on Apify’s free credit.
Related guides
How to Scrape Bazaraki.com Cyprus Classifieds in 2026
Extract cars, real estate, electronics and jobs from Bazaraki.com — Cyprus's #1 marketplace. Filter by category, city and price, with coordinates and seller data.
How to Scrape Etuovi.com Finland Real Estate in 2026
Extract Finnish property listings from Etuovi.com via its internal search API — price, area, rooms, build year, energy class, GPS and agency data, no proxy needed.
How to Scrape Finn.no Listings in 2026
Extract Norway's Finn.no classifieds — real estate, used cars, jobs and marketplace items — via internal JSON APIs. Prices, specs, GPS, images and seller data at scale.