Halo Oglasi Scraper - Serbia Property Listings
Pricing
from $1.76 / 1,000 property searches
Halo Oglasi Scraper - Serbia Property Listings
Scrape halooglasi.com property listings across Serbia: asking price and price per m2, area, rooms, floor, heating, condition, street, geo coordinates, seller type and agency. Halo Oglasi nekretnine data in JSON, CSV or Excel.
Pricing
from $1.76 / 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
4 days ago
Last modified
Categories
Share
Halo Oglasi Scraper – Serbia Property Listings & Prices 🚀
🎉 20 complete adverts per request — sale AND rent, from Serbia's biggest classifieds portal
Built for valuation analysts, brokerage scouts and prop-tech teams working the Serbian market
🔎 What is the Halo Oglasi Scraper — and when should you use it?
The Halo Oglasi Scraper turns halooglasi.com property adverts from any of 179 Serbian cities, across eleven property categories 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: Serbian property adverts as rows: asking price or monthly rent in euros, price per m2, area, room count, floor, seller segment, publish date, and the full city, municipality, neighbourhood and street chain. The advert id is stable, so scheduled runs deduplicate cleanly. Switch to Property Detail and each row also carries latitude and longitude, heating, build type, condition, monthly utility cost, the amenity list and every photo. Detail rows add the advert's own view counter, the portal's neighbourhood price-per-m2 benchmark, and the advertising agency with its profile and register number. The portal's own filters are inputs too, so price band, area band, room ladder, seller segment, build type, condition, heating and a posted-within window all apply before anything is charged.
Use something else when: the advert is on the other Serbian property portal, or you need a market outside Serbia. Use 4zida Scraper for 4zida.rs, Serbia's dedicated property portal. It is the larger corpus, but a different one: two markets enumerated completely on both sites measured only 50.8% to 61.7% overlap. Use Imovirtual Scraper for the Portuguese market, listings and the agents behind them. This actor reads the public property vertical of halooglasi.com and nothing else: apartments, houses, land, retail premises, commercial buildings, hospitality premises, rooms and garages, for sale and to rent, across all 179 municipalities the portal indexes. It does not read the site's cars, jobs or general classifieds sections. It does not return seller phone numbers, which the portal masks behind its own click. Join the 4zida actor on street plus price when you want the union of both portals.
🤖 Use with AI agents
Already connected to the Apify MCP server? Just ask for this Actor by name: sian.agency/halooglasi-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 from halooglasi.com, Serbia's biggest classifieds portal using the Apify Actor `sian.agency/halooglasi-property-scraper`.Use it when I need: Serbian property adverts as rows: asking price or monthly rent in euros, price per m2, area, room count, floor, seller segment, publish date, and the full city, municipality, neighbourhood and street chain. The advert id is stable, so scheduled runs deduplicate cleanly. Switch to Property Detail and each row also carries latitude and longitude, heating, build type, condition, monthly utility cost, the amenity list and every photo. Detail rows add the advert's own view counter, the portal's neighbourhood price-per-m2 benchmark, and the advertising agency with its profile and register number. The portal's own filters are inputs too, so price band, area band, room ladder, seller segment, build type, condition, heating and a posted-within window all apply before anything is charged.Don't use it when: the advert is on the other Serbian property portal, or you need a market outside Serbia — use 4zida-property-scraper or imovirtual-property-scraper instead.How to call it: set `category` to one of the eleven property sections (`prodaja-stanova` for apartments to buy, `izdavanje-stanova` to rent, `prodaja-kuca` for houses, `prodaja-zemljista` for land) and `city` to a Serbian municipality slug (`beograd`, `novi-sad`, `nis`, `kragujevac`), or `any` for the whole country. `minPrice`/`maxPrice`, `minArea`/`maxArea`, `minRooms`/`maxRooms`, `sellerType`, `buildingType`, `condition`, `heating` and `postedWithinHours` become the portal's own filters. To reach a neighbourhood or a street, paste the portal's search address into `searchUrls` as {url} objects. For the full record switch `operation` to `detail` and pass advert links in `listingUrls`.Start with this input:{"operation": "search","category": "prodaja-stanova","city": "beograd","minPrice": 80000,"maxPrice": 150000,"sellerType": "owner","maxResults": 100}Ask me which Serbian cities to cover, whether they want the sale or the rental section, and whether the coordinates, heating, condition and agency block are worth switching to Property Detail, then run the Actor and summarise the results as a table.
Things you can ask your agent for:
- Pull every Belgrade apartment for sale between 80,000 and 150,000 euros listed by the owner rather than an agency, and summarise the median price per m2 by neighbourhood
- Track new Novi Sad rentals daily: run izdavanje-stanova with postedWithinHours set to 24 and list only what appeared overnight
- Build an agency lead list for Nis: sweep prodaja-stanova, then run Property Detail on the results and deduplicate by advertiserName to get one row per agency with its profile and register number
Machine-readable API, MCP config and OpenAPI definition for this Actor are published at apify.com/sian.agency/halooglasi-property-scraper.md.
📋 Overview
halooglasi.com is where Serbia looks for property — 201,000 brand searches a month, 22,200 on the property vertical alone. This actor turns that vertical into rows: about 31,500 live adverts across eleven categories, 179 municipalities, sale and rent, in euros.
What you get:
- ✅ 20 complete records per request — the result card already carries price, price per m², area, rooms, floor, seller segment, publish date and the full city › municipality › neighbourhood › street chain. No advert has to be opened for a usable row.
- ⚡ The portal's filters are your filters — price band, area band, the Serbian room ladder, seller segment, build type, condition, heating and a posted-within window all run on the portal. A daily new-listing sweep charges you for the handful that appeared overnight.
- 🎯 Values read from the portal's own data, not off the page — asking prices print European-style and room counts print as decimals on the same card, so a naive parser reports thirty rooms. This one reads the structured record.
- 💰 $2 per 1,000 adverts — a third under the next-cheapest halooglasi actor on the Store. The full detail record is priced separately and stays optional.
- 💎 Fields the other halooglasi actors do not return — coordinates, heating, condition, monthly utility cost and every photo with the seller's own captions. Plus the advert's view counter, the portal's neighbourhood €/m² benchmark, and the agency register number.
- ✨ Eleven categories — flats, houses, land in ari with a converted m², retail premises, commercial buildings, hospitality premises, rooms and garages.
✨ Features
- 🏢 Eleven property categories: apartments, houses, land, retail premises, commercial buildings, hospitality premises, rooms and garages — sale and rent.
- 📍 179 Serbian municipalities: Beograd, Novi Sad, Niš and Kragujevac down to towns with a single page of stock, plus a nationwide sweep.
- 🎚️ Eight portal-side filters: price, area, rooms, seller segment, build type, condition, heating and posted-within.
- 🙋 Owner-only stock in one click: the vlasnik segment isolates private sellers — the fee-free corner of the market.
- 🏗️ Developer pipeline: novogradnja plus the investitor segment returns new-build units with their activation dates.
- 🧭 Coordinates on every detail row: latitude and longitude straight from the advert, ready for a map or a radius join.
- 📊 The portal's own €/m² benchmark: what comparable stock in that micro-location and room count has been asking.
- 🖼️ Every photo, with captions: the whole gallery, carrying the seller's own room labels.
- 🔗 Paste any search address: neighbourhood, street and map slices are honoured exactly as the portal built them.
- 🇷🇸 Latin and Cyrillic: text comes back as the seller wrote it, and Cyrillic place names resolve.
🎬 Quick Start
Pick a category, pick a city, press Start. The default run reads Belgrade apartments for sale. Everything else — price bands, seller segment, freshness — narrows the search on the portal before a single row is charged.
curl -X POST "https://api.apify.com/v2/acts/sian.agency~halooglasi-property-scraper/runs?token=YOUR_TOKEN" \-H 'Content-Type: application/json' \-d '{"operation":"search","category":"prodaja-stanova","city":"beograd","maxResults":100}'
🚀 Getting Started (3 Simple Steps)
Step 1: Choose the section
Set Property category — prodaja-stanova for apartments to buy, izdavanje-stanova to rent, prodaja-kuca for houses, prodaja-zemljista for land.
Step 2: Choose the place
Pick a City from the portal's own list of 179 municipalities, or any for the whole country. For a neighbourhood or a street, paste the portal's search address into Search URLs instead.
Step 3: Narrow it, then run
Add a price band, an area band, a seller segment or a posted-within window, set Max listings, and press Start.
That's it. What you end up with:
- One row per advert, with price, area, rooms, floor and the full location chain
- A CSV, JSON or Excel export you can open in a spreadsheet
- An HTML run report showing what was returned and what it cost
📥 Input Configuration
| Field | Type | Required | Description |
|---|---|---|---|
operation | select | No | search (default) or detail |
category | select | No | One of eleven property sections; default prodaja-stanova |
city | select | No | Serbian municipality slug; default beograd, any for nationwide |
searchUrls | array | No | Paste portal search addresses verbatim as {"url": "…"} objects |
maxResults | integer | No | Whole-run row budget; default 100 |
minPrice / maxPrice | integer | No | Asking price or monthly rent, in euros |
minArea / maxArea | integer | No | Floor area in m² |
minRooms / maxRooms | select | No | The Serbian room ladder, 0.5 (garsonjera) to 5+ |
sellerType | select | No | owner, agency or developer |
buildingType | select | No | old (stara gradnja) or new (novogradnja) |
condition | select | No | original, renovated, lux or needs-work |
heating | select | No | Central, electric, storage heater, gas, underfloor, tiled stove, heat pump |
postedWithinHours | select | No | 24, 72 or 168 |
listingUrls | array | No | For detail: advert addresses as {"url": "…"} objects |
Example — owner-listed Belgrade flats in a price band:
{"operation": "search","category": "prodaja-stanova","city": "beograd","minPrice": 80000,"maxPrice": 150000,"sellerType": "owner","maxResults": 100}
Example — the full record for adverts you already have:
{"operation": "detail","listingUrls": [{ "url": "https://www.halooglasi.com/nekretnine/prodaja-stanova/blok-21-novi-beograd/5425647093652" }]}
📤 Output
Rows land in the Apify dataset with 48 fields. The Output tab opens on a Property Search view and carries a second view for Property Detail.
| Field | Type | Description |
|---|---|---|
listingId | string | The portal's 13-digit advert number, stable across runs |
url | string | The advert page |
titleText | string | The seller's headline |
dealType | string | sale or rent, derived from the category |
price | number | Asking price or monthly rent |
currency | string | EUR — the portal quotes property in euros throughout |
pricePerSqm | number | Price per square metre |
areaValue / areaUnit / areaM2 | number / string / number | The portal's own value and unit, plus a converted m² (land is in ari) |
rooms | number | The Serbian room count: 0.5 for a garsonjera, 3 for a trosoban |
floor / totalFloors | string / integer | The portal's floor token (PR, VPR, 7) and floors in the building |
city / municipality / neighbourhood / street | string | The full location chain |
latitude / longitude | number | Detail rows only |
sellerType | string | owner, agency or developer |
buildingType / condition / heating | string | Detail rows only |
monthlyUtilities | number | Monthly utility cost in euros, where the seller published it |
features | array | Amenity list — lift, terrace, parking, registered title, and the rest |
viewCount | integer | The advert's own view counter |
areaAveragePricePerSqm | number | The portal's benchmark for that micro-location and room count |
advertiserName / advertiserProfileUrl / advertiserRegistryNumber | string | The agency behind the advert |
publishedDate / expiresDate | string | ISO dates |
Example row (Property Search):
{"operation": "search","listingId": "5425647591123","url": "https://www.halooglasi.com/nekretnine/prodaja-stanova/centar-preko-lepenice-svetao-43-m-lodja-lift/5425647591123","titleText": "Centar preko Lepenice – svetao 43 m² + lođa, lift","dealType": "sale","category": "prodaja-stanova","price": 82900,"currency": "EUR","pricePerSqm": 1928,"areaValue": 43,"areaUnit": "m2","areaM2": 43,"rooms": 1,"floor": "III","totalFloors": 5,"city": "Kragujevac","municipality": "Gradska lokacija","neighbourhood": "Centar preko Lepenice","street": "Maglićka","sellerType": "owner","photoCount": 6,"publishedDate": "2026-08-28","status": "success"}
💼 Use Cases & Examples
1. Serbian market pricing and €/m² benchmarks
Valuation analysts building a price series the portal only publishes quarterly.
Input: prodaja-stanova for Beograd, Novi Sad, Niš and Kragujevac
Output: asking price, price per m², area, floor, condition and build type per advert, plus the portal's neighbourhood benchmark on detail rows
Use: the spread every valuation conversation starts from, in euros, with no currency conversion
2. Rental yield screening
Investors comparing purchase price against achievable rent.
Input: the same city run twice — prodaja-stanova and izdavanje-stanova
Output: two exports that join on area and neighbourhood
Use: yield modelling where both sides come from one portal, so the stock definitions match
3. Owner-listed stock without the agency fee
Buyers and buying agents hunting fee-free deals.
Input: sellerType: "owner"
Output: private sellers only — 8 of 193 adverts on a live Kragujevac check
Use: every row repeats its own sellerType, so the filter is checkable against the data rather than trusted
4. Developer and new-build pipeline tracking
Prop-tech and investment teams watching what is being activated.
Input: buildingType: "new" plus sellerType: "developer"
Output: new construction with its publish date
Use: the units a developer released this week, before they reach the aggregators
5. Agency stock and market-share mapping
Brokerage scouts and prop-tech sales teams.
Input: a city sweep, then Property Detail on the results Output: advertiser name, logo, profile page and register number on every row Use: group a city by advertiser to see who holds the stock, where, and at which price band
6. New-listing alerts and daily diffs
Anyone who wants tomorrow's stock, not today's whole city.
Input: postedWithinHours: "24" on a daily schedule
Output: only what appeared overnight — five adverts, not 193
Use: the freshness filter runs on the portal, so the small number is what you pay for
7. Land, retail and commercial premises
Developers and commercial agents.
Input: prodaja-zemljista, prodaja-lokala, izdavanje-lokala, prodaja-poslovnih-zgrada
Output: the same row shape, with land measured in ari and converted to m²
Use: site-finding and commercial comparables on the same filter grammar as residential
🔗 Integration Examples
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('sian.agency/halooglasi-property-scraper').call({operation: 'search',category: 'prodaja-stanova',city: 'novi-sad',minRooms: '2.0',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/halooglasi-property-scraper').call(run_input={'operation': 'search','category': 'izdavanje-stanova','city': 'beograd','postedWithinHours': '24',})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item['titleText'], item['price'], item['neighbourhood'])
cURL
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~halooglasi-property-scraper/runs?token=YOUR_TOKEN' \-H 'Content-Type: application/json' \-d '{"operation":"search","category":"prodaja-kuca","city":"kragujevac","maxResults":50}'
Automation Workflows (N8N / Zapier / Make)
- Trigger: a daily schedule
- HTTP Request: run the actor with
postedWithinHours: "24" - Process: diff
listingIdagainst yesterday's set - Action: post new adverts to Slack, or append them to a sheet
📊 Performance & Pricing
FREE Tier (try it now)
- 25 adverts per run, full feature access, same data quality
- 5 adverts per run on Property Detail
- No credit card required
PAID Tier (production)
- Unlimited adverts per run, to the last page of any search
- Pay per successful advert — errors, withdrawn adverts and empty searches cost nothing
💰 $2.00 per 1,000 adverts on Property Search, a third below the next halooglasi actor on the Store. Property Detail is a separate opt-in at $12.00 per 1,000, because each one is its own page request.
❓ Frequently Asked Questions
Q: Does this cover halooglasi.com's cars, jobs and general classifieds? A: No, and deliberately so. It reads the property vertical only — eleven categories covering apartments, houses, land, retail premises, commercial buildings, hospitality premises, rooms and garages, for sale and to rent.
Q: How is this different from a 4zida.rs scraper? A: Different corpus, different portal. Two Serbian markets enumerated completely on both sites measured 50.8% to 61.7% overlap, so roughly 40% of halooglasi's apartment stock is not on 4zida at all. The two also use unrelated advert-id spaces, so nothing joins across them without matching on address and price.
Q: Are prices in euros or dinars? A: Euros. halooglasi quotes property in EUR throughout, sales and rentals alike, and every row carries the currency the portal printed.
Q: What does Property Detail add? A: Coordinates, heating, build type, condition, monthly utility cost, the amenity list and the full seller description. It also carries every photo rather than one, the advert's own view counter, the portal's neighbourhood €/m² benchmark, and the agency with its logo, profile and register number.
Q: Can I scrape a neighbourhood or a single street? A: Yes. The city list covers the portal's 179 municipalities; anything finer is reached by pasting the portal's own search address into Search URLs, filters included.
Q: Is Cyrillic handled? A: Yes. Serbian adverts arrive in both Latin and Cyrillic and both come back as the seller wrote them. Cyrillic place names resolve to the right city.
Q: Are seller phone numbers included? A: No. The portal masks them behind a click on its own page. Detail rows carry the advertising agency's name, profile page and register number, which is what identifies a professional seller.
Q: How deep can a search go? A: To the last page. The nationwide sale-apartments set runs 812 pages, and the run walks it until your Max listings is reached, removing duplicates across pages first.
🐞 Troubleshooting
A run returns fewer adverts than the city has
- Max listings is a whole-run budget. Raise it, or narrow the search so the rows you want come first.
- FREE accounts stop at 25 adverts per run by design.
"is not a city Halo Oglasi indexes"
- Pick the city from the list rather than typing it. Neighbourhoods and streets are not municipalities — paste the portal's search address into Search URLs for those.
A detail row comes back as unavailable
- The seller took the advert down. Re-run the search that produced it to pick up what is live now. You are not charged for it.
"challenging automated requests right now"
- The portal throttled the run. Narrow the search with a price or area band, or space scheduled runs further apart.
A filter seems to have no effect
- Room, condition and heating filters apply to residential categories. Land, garages and commercial premises do not carry those attributes.
⚖️ 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.
Halo Oglasi is a trademark of Halo oglasi d.o.o. This actor is not affiliated with, endorsed by or sponsored by Halo Oglasi, and reads only pages that are already public.
🤝 Support
Join our active support community
- For issues or questions, open an issue on the actor page
- Check the SIÁN Agency Store for more automation tools
- 📧 apify@sian-agency.online
Built by SIÁN Agency | More Tools