Halooglasi APIhalooglasi.com ↗
Search and retrieve property listings from halooglasi.com. Filter by price, rooms, area, and location. Full listing details including amenities, coordinates, and images.
What is the Halooglasi API?
The Halooglasi.com API exposes 2 endpoints for accessing property listings from Serbia's largest real estate classifieds platform. search_listings returns paginated listing cards with price, area, rooms, floor, location, and images, while get_listing_detail delivers complete property records including geo coordinates, heating type, amenities, full image arrays, and advertiser information.
curl -X GET 'https://api.parse.bot/scraper/3bbacfa0-c2f5-4d19-a3d1-77950ce0d67e/search_listings?page=1&rooms=2%2C3&sort_by=date&category=prodaja-stanova&location=beograd&per_page=5' \ -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 halooglasi-com-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: HaloOglasi SDK — search Serbian property listings, drill into details."""
from parse_apis.halo_oglasi_property_listings_api import HaloOglasi, Category, Sort, ListingNotFound
client = HaloOglasi()
# Search apartments for sale in Belgrade, sorted by price ascending
for listing in client.listingsummaries.search(
category=Category.PRODAJA_STANOVA,
location="beograd",
sort_by=Sort.PRICE_ASC,
min_price="50000",
max_price="150000",
rooms="2,3",
limit=5,
):
print(listing.title, listing.price_eur, listing.area_m2, listing.neighborhood)
# Drill into the first result for full property details
summary = client.listingsummaries.search(
category=Category.PRODAJA_STANOVA,
location="beograd",
limit=1,
).first()
if summary:
detail = summary.details()
print(detail.title, detail.price_eur, detail.area_m2)
print(detail.heating, detail.floor_info, detail.property_type)
print(detail.amenities)
print(detail.latitude, detail.longitude)
# Handle a removed listing gracefully
try:
bad = client.listingsummaries.search(category=Category.PRODAJA_KUCA, limit=1).first()
if bad:
bad.details()
except ListingNotFound as exc:
print(f"Listing gone: {exc.listing_url}")
print("exercised: listingsummaries.search / details / ListingNotFound error handling")
Search property listings with filters and pagination. Returns listing cards with key metadata (price, area, rooms, floor, location, description, images). Paginates via integer page counter. Default sort is newest-first; price sorting available ascending/descending.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (1-based) |
| rooms | string | Room count filter, comma-separated (e.g., '2,3,4') |
| sort_by | string | Sort order. |
| category | string | Property category slug. |
| location | string | Location slug for URL taxonomy (e.g., 'beograd', 'novi-sad') |
| max_area | string | Maximum area in m² |
| min_area | string | Minimum area in m² |
| per_page | integer | Results per page (max 50) |
| max_price | string | Maximum price in EUR |
| min_price | string | Minimum price in EUR |
| location_id | string | Numeric location ID for filtering (e.g., '35112' for Beograd). Get from get_listing_detail city_id/municipality_id fields. |
{
"type": "object",
"fields": {
"page": "integer, current page number",
"count": "integer, number of listings returned on this page",
"listings": "array of listing summary objects",
"per_page": "integer, results per page",
"total_count": "integer, total number of matching listings",
"total_pages": "integer, total number of pages"
}
}About the Halooglasi API
Search Listings
The search_listings endpoint accepts filters for location (e.g., 'beograd', 'novi-sad'), rooms (comma-separated values like '2,3,4'), min_area and max_area in square meters, category as a property type slug, and sort_by for ordering by newest or price. Results are paginated using a 1-based page integer with up to 50 results per page via per_page. Each response includes total_count, total_pages, and a listings array of summary objects with key fields: price, area, room count, floor, location, short description, and image URLs.
Listing Detail
The get_listing_detail endpoint takes a listing_url directly from the url field returned in search_listings results. The full response adds fields not present in search cards: street, city_id, area_m2 as a number, images as a complete array of full-resolution URLs, geo coordinates for mapping, heating type, amenities list, and a full text description. The city_id field is useful for constructing location-scoped follow-up queries.
Coverage and Pagination
The API covers listings across Serbian cities indexed under halooglasi.com's real estate taxonomy, spanning apartments, houses, and other property categories. Pagination is integer-based and consistent — total_pages and total_count in the search response let you walk all results programmatically. Default sort is newest-first; price-ascending and price-descending are available via sort_by.
The Halooglasi API is a managed, monitored endpoint for halooglasi.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when halooglasi.com 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 halooglasi.com 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 Belgrade apartment prices over time using
search_listingswithlocation='beograd'and price fields - Build a property alert system that polls
search_listingsnewest-first and triggers on new listing IDs - Aggregate room-count distributions across Novi Sad listings using the
roomsfilter andtotal_count - Map property listings geographically using
get_listing_detailgeo coordinates andstreetfields - Compare price-per-m² across neighborhoods by combining
area_m2and price from detail responses - Compile a full image dataset for a listing by extracting the
imagesarray fromget_listing_detail - Filter studio and one-room apartments in a price range for a rental market analysis dashboard
| 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 halooglasi.com have an official developer API?+
What does `get_listing_detail` return beyond what appears in search results?+
get_listing_detail adds several fields absent from search_listings summary cards: geo coordinates, a full images array with complete URLs, street name, city_id, heating type, amenities, and a full property description. The listing_url input should come directly from the url field in search_listings results.Does the API cover rental listings or only property sales?+
category parameter in search_listings accepts property category slugs, which can target rentals or sales depending on the slug supplied. Both listing types are accessible. If you need to enumerate all available category slugs, you can fork the API on Parse and revise it to add a categories discovery endpoint.Can I filter listings by exact municipality or micro-location below the city level?+
location parameter accepts city-level slugs such as 'beograd' or 'novi-sad'. Sub-city filtering at the municipality or neighborhood level is not currently exposed as a distinct parameter. You can fork the API on Parse and revise it to add finer-grained location filtering if halooglasi.com's URL taxonomy supports it.Are contact details or seller phone numbers returned by the API?+
get_listing_detail responses, but direct phone numbers gated behind a reveal action on the source site are not currently returned. The API covers the publicly visible advertiser metadata. You can fork it on Parse and revise the endpoint to surface additional contact fields if they become accessible.