imobiliare APIimobiliare.ro ↗
Access real-time apartment rental listings from imobiliare.ro. Filter by city, zone, and price range. Returns prices, locations, room counts, and seller type.
What is the imobiliare API?
The imobiliare.ro API provides access to rental apartment listings across Romania through 2 endpoints. The search_apartments_for_rent endpoint returns paginated results — up to 30 listings per page — including price, location, room count, seller type, and listing URL, with filters for city, zone, and EUR price range. A companion search_locations endpoint resolves valid city and zone slugs needed for filtering.
curl -X GET 'https://api.parse.bot/scraper/209dc279-0def-4b60-a612-bc01a1fecaa6/search_locations?query=Cluj' \ -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 imobiliare-ro-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.
"""Walkthrough: Imobiliare.ro SDK - search apartments for rent in Romania."""
from parse_apis.imobiliare_ro_api import Imobiliare, LocationNotFound
client = Imobiliare()
# Discover locations matching "Cluj" to find valid city/zone slugs.
for loc in client.locations.search(query="Cluj", limit=3):
print(loc.label, loc.listings_count)
# Search apartments for rent in Bucuresti with a price filter.
for apt in client.apartments.search(city="bucuresti", min_price="400", max_price="800", limit=5):
print(apt.title, apt.price, apt.currency, apt.area)
# Drill into a specific zone search.
apt = client.apartments.search(city="cluj-napoca", zone="manastur", limit=1).first()
if apt:
print(apt.listing_id, apt.title, apt.price, apt.seller_type)
# Handle location not found error.
try:
for a in client.apartments.search(city="nonexistent-city-xyz", limit=1):
print(a.title)
except LocationNotFound as exc:
print(f"Location not found: {exc}")
print("exercised: locations.search / apartments.search (city, zone, price filter)")
Search for locations (counties, cities, zones, streets) by name. Returns matching locations organized by type, each with a location_id and listings_count. Use this to discover valid city and zone slugs for the search_apartments_for_rent endpoint.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Location name to search for (e.g. 'Cluj', 'Bucuresti', 'Pipera'). |
{
"type": "object",
"fields": {
"zones": "array of zone location objects",
"cities": "array of city location objects",
"streets": "array of street location objects",
"counties": "array of county location objects"
},
"sample": {
"zones": [
{
"depth": 3,
"label": "Manastur",
"id_tree": "11115_11335_11365",
"subtext": "Cluj-Napoca, Judetul Cluj",
"parent_id": 11335,
"location_id": 11365,
"has_children": false,
"parent_stack": [
{
"depth": 1,
"label": "Judetul Cluj",
"id_tree": "11115",
"location_id": 11115
},
{
"depth": 2,
"label": "Cluj-Napoca",
"id_tree": "11115_11335",
"location_id": 11335
}
],
"listings_count": 1890
}
],
"cities": [
{
"depth": 2,
"label": "Cluj-Napoca",
"id_tree": "11115_11335",
"subtext": "Judetul Cluj",
"parent_id": 11115,
"location_id": 11335,
"has_children": true,
"parent_stack": [
{
"depth": 1,
"label": "Judetul Cluj",
"id_tree": "11115",
"location_id": 11115
}
],
"listings_count": 14570
}
],
"streets": [
{
"depth": 3,
"label": "Strada Paris",
"id_tree": "11115_11335_35032",
"subtext": "Cluj-Napoca, Judetul Cluj",
"parent_id": 11335,
"location_id": 35032,
"has_children": false,
"parent_stack": [
{
"depth": 1,
"label": "Judetul Cluj",
"id_tree": "11115",
"location_id": 11115
},
{
"depth": 2,
"label": "Cluj-Napoca",
"id_tree": "11115_11335",
"location_id": 11335
}
],
"listings_count": 886
}
],
"counties": [
{
"depth": 1,
"label": "Judetul Cluj",
"id_tree": "11115",
"subtext": "",
"parent_id": 0,
"location_id": 11115,
"has_children": true,
"parent_stack": [],
"listings_count": 21695
}
]
}
}About the imobiliare API
Endpoints and Data Coverage
The API exposes two endpoints. search_locations accepts a query string such as 'Cluj' or 'Pipera' and returns matching location objects organized into four arrays: zones, cities, streets, and counties. Each object includes a location_id and a listings_count, making it the correct starting point for discovering valid slug values before querying listings.
Searching and Filtering Rentals
search_apartments_for_rent takes a required city slug (e.g. 'bucuresti', 'cluj-napoca', 'timisoara') and optional parameters: zone (neighborhood slug), min_price and max_price in EUR, and page for pagination. The response includes total_results, total_pages, results_on_page, and the current page number alongside an items array. Each item in items carries price, location details, room count, seller type, and a direct listing URL back to imobiliare.ro.
Pagination and Slug Discovery
Each page returns up to 30 listings. Use total_pages to iterate through all results for a given query. Because the city and zone parameters require exact URL slugs, always run search_locations first to confirm the correct slug — for example, 'manastur' for a Cluj neighborhood or 'floreasca' for a Bucharest zone. Passing an unrecognized slug will return zero results without an error.
The imobiliare API is a managed, monitored endpoint for imobiliare.ro — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when imobiliare.ro 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 imobiliare.ro 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?+
- Build a rental price index by city and zone using the
min_price/max_pricefilters andtotal_resultscounts. - Monitor new listings in a specific Bucharest neighborhood by polling
search_apartments_for_rentwith azoneslug. - Compare average rents across Romanian cities by iterating
search_apartments_for_rentfor multiple city slugs. - Populate a relocation tool with live rental options filtered by budget in EUR.
- Resolve user-entered neighborhood names to valid zone slugs via
search_locationsbefore running a filtered search. - Track seller type distribution (agency vs. private owner) across listing results for market research.
- Aggregate room count data from
itemsto analyze studio vs. multi-room rental availability by city.
| 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 imobiliare.ro have an official developer API?+
What does the `search_locations` endpoint return, and why would I use it before searching listings?+
search_locations returns arrays of matching counties, cities, zones, and streets for a given query string, each with a location_id and listings_count. The search_apartments_for_rent endpoint requires exact city and zone URL slugs. Running search_locations first is the reliable way to confirm those slugs — for example, verifying that 'cluj-napoca' is the correct slug before passing it as the city parameter.Does the API cover property listings for sale, or only rentals?+
search_apartments_for_rent. Sale listings, houses, commercial properties, and land are not included. You can fork this API on Parse and revise it to add an endpoint targeting those listing categories.Are prices always returned in EUR, and what happens if a listing uses RON?+
min_price and max_price filter parameters are denominated in EUR, consistent with how imobiliare.ro surfaces most rental prices. Listings that use RON on the source site may not match EUR-based price filters as expected, so results near the edges of a price range should be treated as approximate.Can I retrieve contact details or phone numbers for individual landlords or agencies?+
items array includes seller type and a listing URL, but direct contact information is not exposed. You can fork this API on Parse and revise it to add an endpoint that fetches individual listing detail pages where contact data may appear.