Halo Oglasi Scraper - Serbia Property Listings avatar

Halo Oglasi Scraper - Serbia Property Listings

Pricing

from $1.76 / 1,000 property searches

Go to Apify Store
Halo Oglasi Scraper - Serbia Property Listings

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Ü

SIÁN OÜ

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Halo Oglasi Scraper – Serbia Property Listings & Prices 🚀

SIÁN Agency Store 4zida Imovirtual Sreality

🎉 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 categoryprodaja-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

FieldTypeRequiredDescription
operationselectNosearch (default) or detail
categoryselectNoOne of eleven property sections; default prodaja-stanova
cityselectNoSerbian municipality slug; default beograd, any for nationwide
searchUrlsarrayNoPaste portal search addresses verbatim as {"url": "…"} objects
maxResultsintegerNoWhole-run row budget; default 100
minPrice / maxPriceintegerNoAsking price or monthly rent, in euros
minArea / maxAreaintegerNoFloor area in m²
minRooms / maxRoomsselectNoThe Serbian room ladder, 0.5 (garsonjera) to 5+
sellerTypeselectNoowner, agency or developer
buildingTypeselectNoold (stara gradnja) or new (novogradnja)
conditionselectNooriginal, renovated, lux or needs-work
heatingselectNoCentral, electric, storage heater, gas, underfloor, tiled stove, heat pump
postedWithinHoursselectNo24, 72 or 168
listingUrlsarrayNoFor 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.

FieldTypeDescription
listingIdstringThe portal's 13-digit advert number, stable across runs
urlstringThe advert page
titleTextstringThe seller's headline
dealTypestringsale or rent, derived from the category
pricenumberAsking price or monthly rent
currencystringEUR — the portal quotes property in euros throughout
pricePerSqmnumberPrice per square metre
areaValue / areaUnit / areaM2number / string / numberThe portal's own value and unit, plus a converted m² (land is in ari)
roomsnumberThe Serbian room count: 0.5 for a garsonjera, 3 for a trosoban
floor / totalFloorsstring / integerThe portal's floor token (PR, VPR, 7) and floors in the building
city / municipality / neighbourhood / streetstringThe full location chain
latitude / longitudenumberDetail rows only
sellerTypestringowner, agency or developer
buildingType / condition / heatingstringDetail rows only
monthlyUtilitiesnumberMonthly utility cost in euros, where the seller published it
featuresarrayAmenity list — lift, terrace, parking, registered title, and the rest
viewCountintegerThe advert's own view counter
areaAveragePricePerSqmnumberThe portal's benchmark for that micro-location and room count
advertiserName / advertiserProfileUrl / advertiserRegistryNumberstringThe agency behind the advert
publishedDate / expiresDatestringISO 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 ApifyClient
client = 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)

  1. Trigger: a daily schedule
  2. HTTP Request: run the actor with postedWithinHours: "24"
  3. Process: diff listingId against yesterday's set
  4. 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
  • 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.

🔗 View current pricing


❓ 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.

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


Built by SIÁN Agency | More Tools