imot APIimot.bg ↗
Search Bulgarian property listings for sale and rent, get full listing details, district-level average prices, and filter options from imot.bg via a single API.
What is the imot API?
The imot.bg API provides access to Bulgaria's major real estate marketplace through 5 endpoints covering for-sale listings, rental listings, individual property details, district average prices, and search filter options. The get_listing_details endpoint returns structured data including price in EUR and BGN, area, floor, construction type, photo URLs, contact phone, and a full description text — all from a single listing ID or URL.
curl -X GET 'https://api.parse.bot/scraper/fcccf2c5-b878-42f1-a63a-1d246dfba689/search_listings_for_sale?page=1¤cy=EUR&location=%D0%B3%D1%80%D0%B0%D0%B4+%D0%A1%D0%BE%D1%84%D0%B8%D1%8F&max_area=200&min_area=40&max_price=200000&min_price=50000&sort_order=2&property_types=1-%D0%A1%D0%A2%D0%90%D0%95%D0%9D' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace imot-bg-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.imot_bg_property_listings_api import Imot, PropertyType, Currency
imot = Imot()
# Search for 2-room apartments for sale in Sofia
for listing in imot.listingsummaries.search_for_sale(
location="град София",
property_types=PropertyType.TWO_ROOM,
currency=Currency.EUR,
max_price=200000,
):
print(listing.title, listing.price, listing.info)
# Get full details for the first listing found
detail = listing.details()
print(detail.price, detail.price_per_sqm, detail.description)
break
# Get average prices by district for Sofia
city_prices = imot.cityprices.get(town="София", year="2025")
for district in city_prices.results:
print(district.district, district.prices)
# Get available search filter options
options = imot.searchoptions.get()
print(options.property_types, options.locations)
Search for property listings for sale on imot.bg. Supports filtering by location, price range, area, property type, and pagination. Returns a paginated list of matching listings sorted by newest first by default. Each listing includes an id usable with get_listing_details for full property information.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| currency | string | Currency for prices. |
| location | string | Location filter in Bulgarian (e.g. 'град София', 'Пловдив'). |
| max_area | integer | Maximum area in square meters. |
| min_area | integer | Minimum area in square meters. |
| max_price | integer | Maximum price in the specified currency. |
| min_price | integer | Minimum price in the specified currency. |
| sort_order | integer | Sort order for results. 2 = newest first. |
| property_types | string | Comma-separated property type names in Bulgarian. Accepted values: 1-СТАЕН, 2-СТАЕН, 3-СТАЕН, 4-СТАЕН, МНОГОСТАЕН, МЕЗОНЕТ, АТЕЛИЕ/ТАВАН, ОФИС, МАГАЗИН, ЗАВЕДЕНИЕ, СКЛАД, ХОТЕЛ, ПРОМ.ПОМЕЩЕНИЕ, ЕТАЖ ОТ КЪЩА, КЪЩА, ВИЛА, ПАРЦЕЛ, ГАРАЖ/ПАРКОМЯСТО, ЗЕМЕДЕЛСКА ЗЕМЯ, БИЗНЕС ИМОТ. |
{
"type": "object",
"fields": {
"page": "current page number as string",
"count": "integer total number of listings on this page",
"listings": "array of listing summary objects with id, title, url, price, info"
},
"sample": {
"data": {
"page": "1",
"count": 41,
"listings": [
{
"id": "1a177764345916850",
"url": "https://www.imot.bg/obiava-1a177764345916850-prodava-ednostaen-apartament-grad-sofiya-vrabnitsa-2",
"info": "42 кв.м, 1-ви ет. от 9, ТЕЦ",
"price": "107 000 €209 273.81 лв.",
"title": "Продава 1-СТАЕНград София, Връбница 2"
}
]
},
"status": "success"
}
}About the imot API
Searching Listings
Both search_listings_for_sale and search_listings_for_rent accept location strings in Bulgarian (e.g. 'град София', 'Пловдив'), price range via min_price/max_price, area range via min_area/max_area, a currency parameter, and page for pagination. The rent endpoint additionally accepts a property_types parameter — a comma-separated list of Bulgarian property type names such as 1-СТАЕН, 2-СТАЕН, МНОГОСТ. Both endpoints return a count of listings on the current page and an array of listings objects, each containing an id, title, url, price, and summary info. The id from any result can be passed directly to get_listing_details.
Listing Detail
get_listing_details accepts either a listing_id (e.g. '1a177764345916850') or a full url. It returns the full listing record: title, location, price in both EUR and BGN, price_per_sqm, price_info (VAT status), a parameters object covering area, floor, and construction type, a description string with the seller's full text, a photos array of image URLs, and a phone contact number.
Average Prices by District
get_average_prices accepts a town name in Bulgarian and a four-digit year string. It returns an array of district-level objects each containing a district name and a prices array — all denominated in EUR per square meter. This is useful for benchmarking a specific listing's price against the neighbourhood average.
Filter Discovery
get_search_form_options takes no inputs and returns the current list of valid property_types strings accepted by the search endpoints, plus a locations array when available. Run this first to avoid passing unrecognised filter values to a search call.
The imot API is a managed, monitored endpoint for imot.bg — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when imot.bg changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official imot.bg API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor new for-sale listings in a specific Sofia district by polling
search_listings_for_salewith a location filter andsort_order=2. - Build a rental price comparison tool using
search_listings_for_rentfiltered by area and property type across multiple Bulgarian cities. - Extract structured property data — area, floor, construction type, photos — from individual imot.bg listings via
get_listing_details. - Generate district-level price heatmaps for Bulgarian cities using
get_average_priceswith year-over-year comparisons. - Validate search filter values before executing queries by calling
get_search_form_optionsto retrieve currentproperty_types. - Aggregate contact phone numbers and descriptions from multiple listings for a CRM enrichment pipeline using
get_listing_detailsin batch.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does imot.bg have an official developer API?+
What does `get_listing_details` return that the search endpoints do not?+
get_listing_details returns the full property record: description text, photos array, phone contact number, a parameters object (area, floor, construction type), price_per_sqm, and price_info for VAT status. The search endpoints return only summary fields — id, title, url, price, and info — sufficient to identify a listing but not to inspect it fully.Are average price statistics available for all Bulgarian cities?+
get_average_prices queries imot.bg's statistical aggregation page and returns district-level EUR/sqm data for the city and year you specify. Coverage depends on what imot.bg aggregates; smaller towns with limited transaction volume may return sparse or empty results for some districts.Does the API expose sold/completed transaction history or just active listings?+
get_average_prices. Historical sold transaction records with individual sale prices are not currently exposed. You can fork this API on Parse and revise it to add an endpoint targeting imot.bg's transaction history pages if that data is available on the site.Can I filter for-sale listings by property type the same way rent listings are filtered?+
search_listings_for_rent explicitly supports a property_types parameter accepting values like 1-СТАЕН, 2-СТАЕН, МНОГОСТ. The search_listings_for_sale endpoint description does not list property_types as a supported input. You can fork this API on Parse and revise the for-sale endpoint to add that filter if the underlying page supports it.