# Nehnutelnosti.sk 🧡 🏡 Real Estate Scraper (`nogards95/nehnutelnosti-sk-scraper`) Actor

Scrapes property listings from nehnutelnosti.sk — prices, area, location, GPS, photos, agent and agency details.

- **URL**: https://apify.com/nogards95/nehnutelnosti-sk-scraper.md
- **Developed by:** [Nogards](https://apify.com/nogards95) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Nehnutelnosti.sk Real Estate Scraper

**For real estate analysts, investors and agencies who track the Slovak market** and need listings from nehnutelnosti.sk — the largest property portal in Slovakia — as structured data instead of browser tabs. Point it at a category, a location and sale-or-rent; get back every matching listing as JSON, CSV or Excel — ready for a pricing model, a dashboard, or a daily new-listings alert. Covers apartments, houses, land, commercial space, warehouses and cottages, for sale and for rent, across the whole country.

🇬🇧 **English** · [🇸🇰 Slovenská verzia](#nehnutelnostisk-scraper--slovenská-verzia)

### What you get

- **Every listing on the search**, with price, price per m², floor area, room count, condition, full regional address (down to *okres*) and all listing photos.
- **Agency intelligence** — the agent, and the full agency record behind them: name, website and office address. Useful for competitor and lead-gen work.
- **Full detail on demand** — switch on *Fetch full listing details* to add the complete description text, the whole attribute table (ownership, orientation, year of reconstruction, elevator…) and approximate GPS coordinates.

It reads the structured data the site itself renders, over plain HTTP — no headless browser. Around 30 listings per request, a few seconds for a typical run.

Because it runs on Apify you can **schedule** it, call it over the **API**, and connect it to **Google Sheets, Slack or Zapier** without hosting anything.

### What you can do with nehnutelnosti.sk data

- **Market research** — track asking prices and price per m² across cities and *okresy* over time.
- **Investment sourcing** — filter by price and area and pull matching properties the day they are listed.
- **Competitor monitoring** — see which agencies list what, where, and at what price.
- **Lead generation** — build a map of active agents and agencies in a region.
- **Valuation models** — feed real asking prices into pricing and analytics.

### What data can this Actor extract?

Every listing carries these fields. The ones marked **detail** are only filled when *Fetch full listing details* is on.

| Field | Type | Description |
|---|---|---|
| `id` | string | Listing ID on nehnutelnosti.sk |
| `url` | string | Direct link to the listing |
| `title` | string | Listing headline |
| `transactionType` | string | `Predaj` (sale) or `Prenájom` (rent) |
| `category` / `subCategory` | string | e.g. `APARTMENTS` / `THREE_ROOM_APARTMENT` |
| `price.amount` | number | Price in EUR (`null` when the seller hides it) |
| `price.currency` | string | Always `EUR` |
| `price.raw` | string | Price as displayed, e.g. `255 000 €`, `Info v RK` or `Cena dohodou` |
| `price.unitPrice` | string | Price per m², e.g. `3 541,67 €/m²` |
| `price.onRequest` | boolean | `true` when the price is only available on request |
| `area` | number | Floor area in m² |
| `rooms` | number | Number of rooms, when published (`null` otherwise) |
| `condition` | string | Property condition, e.g. `Novostavba`, `Kompletná rekonštrukcia` |
| `location` | object | `address`, `street`, `city`, `district`, `county`, `country` |
| `location.latitude` / `longitude` | number | **Detail** — approximate GPS; the site fuzzes the point to a radius |
| `location.approxRadius` | number | **Detail** — radius in metres the position was rounded to (typically 200) |
| `photos` | array | Photo URLs — a few per listing from the search, all of them in **detail** mode |
| `videoUrls` | array | YouTube / video URLs attached to the listing |
| `flags` | object | `isTop`, `isPremium`, `hasVideo`, `hasFloorPlan`, `hasInspections3d` |
| `advertiser` | object | `name`, `type` (`AGENT`), `phone` (`null`), `phoneRedacted` (`true` — see FAQ), `agency` |
| `advertiser.agency` | object | `name`, `website`, `address` of the real estate office |
| `description` | string | Full listing text — always in **detail** mode; from the search only for some listings |
| `attributes` | array | **Detail** — `{label, value}` table: ownership, heating, orientation, year of reconstruction, cellars… |
| `hasElevator` | boolean | **Detail** — `true` / `false` / `null` |
| `isActive` | boolean | **Detail** — whether the listing is still live |
| `createdAt` / `updatedAt` / `publishedAt` | string | Listing timestamps, ISO 8601 (`publishedAt` is **detail** only) |
| `scrapedAt` | string | When this Actor collected the row, ISO 8601 |
| `detailFetched` | boolean | `true` if the detail page was read for this row |

Listings whose price is hidden (`Info v RK`) are kept, with `price.onRequest: true` and the displayed text in `price.raw` — they are not dropped from the dataset.

### How to scrape nehnutelnosti.sk

1. Click **Try for free** to open the Actor.
2. Choose a **Property category** — `byty` for apartments, `domy` for houses, `pozemky` for land, `komercne-priestory` for commercial, `sklady` for warehouses, `chaty` for cottages.
3. Enter a **Location** slug such as `bratislava`, `kosice` or `bratislava-stare-mesto`, or use `slovensko` to search the whole country.
4. Pick **For sale** or **For rent**, and optionally set price and area limits.
5. Set **Maximum listings** so the run stays within the size you want.
6. Click **Start** and, when it finishes, download the data from the **Output** tab.

#### Finding the right category and location slugs

The simplest way is to run the search on the website and copy the values out of the address bar. A nehnutelnosti.sk search URL looks like:

```
https://www.nehnutelnosti.sk/vysledky/byty/bratislava/predaj
                                      ^^^^^ ^^^^^^^^^^ ^^^^^^
                                   category  location  transaction
```

Room-specific slugs such as `1-izbove-byty` or `3-izbove-byty` work too. You can also paste that whole URL into **Start URLs**, which overrides the individual fields — useful for reproducing a search you have already refined on the site.

### How much will it cost to scrape nehnutelnosti.sk?

The Actor uses plain HTTP requests rather than a headless browser, so platform usage stays low and runs finish quickly.

| Listings | Requests | Approx. run time |
|---|---|---|
| 50 | 2 | a few seconds |
| 200 | 7 | under 30 seconds |
| 1,000 | 34 | under a minute |
| 5,000 | 167 | 1–2 minutes |

#### Pricing

Pay per result. Two rates:

| What you pay for | Rate |
|---|---|
| **Listing** — price, area, rooms, condition, location, photos, agent and agency | **$1.20** / 1,000 |
| **Detailed listing** — everything above plus full description, approximate GPS, all photos and the complete attribute table | **$3.00** / 1,000 |

Platform usage is included — you are not billed separately for compute. The exact rates for your subscription tier are shown on the Actor's pricing page.

The detailed rate applies **only** when *Fetch full listing details* is on and the detail page was actually read. If a detail page cannot be read, that listing falls back to the basic rate.

| Example run | Approx. cost |
|---|---|
| 1,000 basic listings | $1.20 |
| 1,000 detailed listings | $3.00 |
| 200 basic listings | $0.24 |

Turning on **Fetch full listing details** also adds one request per listing (1,000 listings → about 1,034 requests instead of 34), so those runs take considerably longer. Leave it off when you only need prices, areas and locations.

### Input

See the **Input** tab for all options. The most important ones:

| Input | Description |
|---|---|
| `category`, `location`, `transactionType` | Define the search, mirroring the site's own URL structure |
| `priceMin` / `priceMax`, `areaMin` / `areaMax` | Applied by the website itself, so they also reduce run time |
| `maxItems` | Hard cap on collected listings (`0` = no limit) |
| `includeFullDetail` | Visit each listing page for the full description, approximate GPS, all photos and attributes |
| `startUrls` | nehnutelnosti.sk search URLs *or* individual `/detail/...` listing URLs to use instead of the fields above |
| `proxyConfiguration` | Off by default — the site has no anti-bot protection. Enable only if a very large run hits rate limits |

Example — a filtered search:

```json
{
  "category": "byty",
  "location": "bratislava",
  "transactionType": "predaj",
  "priceMin": 100000,
  "priceMax": 200000,
  "maxItems": 500,
  "includeFullDetail": false
}
```

Example — scrape specific listings you already have URLs for:

```json
{
  "startUrls": [
    { "url": "https://www.nehnutelnosti.sk/detail/JuH80iLjwjC/velkorysy-rekonstruovany-mezanin" }
  ],
  "includeFullDetail": true
}
```

### Output

You can download the dataset in various formats such as **JSON, HTML, CSV, or Excel**.

This is one item from a detail-mode run (`includeFullDetail: true`); long arrays and text are trimmed for display.

```json
{
  "id": "JuH80iLjwjC",
  "url": "https://www.nehnutelnosti.sk/detail/JuH80iLjwjC/velkorysy-rekonstruovany-mezanin-117-m2-pri-horskom-parku-so-zahradou-a-parkovanim",
  "title": "Veľkorysý rekonštruovaný mezanín (117 m²) pri Horskom parku so záhradou a parkovaním",
  "transactionType": "Predaj",
  "category": "APARTMENTS",
  "subCategory": "THREE_ROOM_APARTMENT",
  "price": {
    "amount": 449900,
    "currency": "EUR",
    "raw": "449 900 €",
    "unitPrice": "3 845,3 €/m²",
    "onRequest": false
  },
  "area": 117,
  "rooms": 3,
  "condition": "Kompletná rekonštrukcia",
  "location": {
    "address": "Brnianska, Bratislava-Staré Mesto, okres Bratislava I",
    "street": "Brnianska",
    "city": "Bratislava-Staré Mesto",
    "district": "okres Bratislava I",
    "county": "Bratislavský kraj",
    "country": "Slovensko",
    "latitude": 48.163711522456,
    "longitude": 17.086727383316,
    "approxRadius": 200
  },
  "flags": { "isTop": false, "isPremium": true, "hasVideo": false, "hasFloorPlan": false, "hasInspections3d": true },
  "photos": ["https://img.unitedclassifieds.sk/foto/…", "…and 34 more"],
  "advertiser": {
    "name": "Bc. Ing. Lukáš Husár",
    "type": "AGENT",
    "phone": null,
    "phoneRedacted": true,
    "agency": {
      "name": "Resido Concept",
      "website": "https://www.resido.sk",
      "address": "Twin City A, Karadžičova 2, Bratislava-Staré Mesto"
    }
  },
  "description": "Resido Concept Vám ponúka na predaj veľkorysý a kompletne zrekonštruovaný 3-izbový mezanín …",
  "attributes": [
    { "label": "Vlastníctvo", "value": "Osobné" },
    { "label": "Vykurovanie", "value": "Lokálne" },
    { "label": "Telekomunikácie", "value": "Internet, Káblová TV" },
    { "label": "Zariadenie", "value": "Zariadené kompletne" }
  ],
  "hasElevator": false,
  "createdAt": "2026-08-14T18:44:59.122Z",
  "updatedAt": "2026-08-28T14:30:55.489Z",
  "scrapedAt": "2026-08-28T14:45:53.963Z",
  "detailFetched": true
}
```

### Tips

- **Keep runs cheap and fast** — leave *Fetch full listing details* off when you only need prices, areas and locations. Search pages already carry most numeric fields.
- **Descriptions** — search pages deliver descriptions for only some listings, because the site streams the rest separately. Turn on *Fetch full listing details* to get all of them, plus approximate GPS and the full attribute table.
- **Narrow with filters** — price and area filters are applied by the website, so they cut both the result count and the run time.
- **Monitor new listings** — schedule a daily run and sort by `createdAt` to spot fresh listings.
- **Large runs** — narrow with the price/area filters first; a single country-wide search can return tens of thousands of listings.

### Can I use it as an API?

Yes. Run it programmatically with the [Apify API](https://docs.apify.com/api/v2):

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("nogards95/nehnutelnosti-sk-scraper").call(run_input={
    "category": "byty",
    "location": "bratislava",
    "transactionType": "predaj",
    "maxItems": 200,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["price"]["raw"], item["location"]["city"])
```

### FAQ

**Do I need a proxy?**
No. nehnutelnosti.sk has no anti-bot protection and answers plain HTTP requests, so the proxy is off by default. You can enable Apify Proxy if a very large run starts hitting rate limits, but it is not needed for normal use.

**Why is `price.amount` sometimes `null`?**
Some sellers publish no price and show `Info v RK` ("ask the agency") or `Cena dohodou` ("price negotiable") instead. Those listings have `price.onRequest: true` and the displayed text in `price.raw`.

**Why is there no phone number?**
The website sends only a masked stub (`+421  ...`) and reveals the digits after a click in the browser. The Actor does not attempt to unmask it: `advertiser.phone` is `null` and `advertiser.phoneRedacted` is `true`. The agency website and office address are still available.

**Why do some listings have no GPS coordinates?**
Coordinates appear only in detail mode (`includeFullDetail: true`), and only when the seller published a position. They are deliberately approximate — the site rounds the point to a radius, reported in `location.approxRadius` metres.

**Can it scrape reality.sk or topreality.sk?**
Not yet. They belong to the same group and the parsing layer was written to be reusable, but support is not implemented or tested.

**The Actor suddenly returns no results — what now?**
The site embeds its data in a Next.js payload that can change between deploys. The Actor logs a clear warning when the expected structure is missing. Please report it via the Issues tab.

### Disclaimer

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.

Listing contact details are published by agents and agencies for the purpose of being contacted about the property. Use them accordingly, and respect the website's Terms of Service.

### Support

Found a bug or need a field that is not extracted yet? Open an issue on the Actor's **Issues** tab.

***

## 🇸🇰 Nehnutelnosti.sk Scraper — slovenská verzia

[🇬🇧 English version](#nehnutelnostisk-real-estate-scraper) · 🇸🇰 **Slovenčina**

**Pre analytikov trhu, investorov a realitné kancelárie na Slovensku**, ktorí potrebujú inzeráty z nehnutelnosti.sk — najväčšieho realitného portálu na Slovensku — ako štruktúrované dáta namiesto otvorených záložiek. Zadáte kategóriu, lokalitu a predaj/prenájom a dostanete každý zodpovedajúci inzerát ako JSON, CSV alebo Excel — pripravený pre cenový model, dashboard alebo denné upozornenie na nové inzeráty. Pokrýva byty, domy, pozemky, komerčné priestory, sklady aj chaty, na predaj aj na prenájom, v rámci celej SR.

### Čo získate

- **Každý inzerát vo výsledkoch** — cena, cena za m², výmera, počet izieb, stav, celá adresa (až po *okres*) a fotografie.
- **Dáta o kanceláriách** — maklér a kompletný záznam kancelárie za ním: názov, web a adresa pobočky. Vhodné na sledovanie konkurencie a získavanie kontaktov.
- **Kompletný detail na požiadanie** — voľbou *Fetch full listing details* pridáte celý text popisu, celú tabuľku parametrov (vlastníctvo, orientácia, rok rekonštrukcie, výťah…) a približné GPS súradnice.

Číta štruktúrované dáta, ktoré web sám vykresľuje, cez bežné HTTP — bez prehliadača. Približne 30 inzerátov na požiadavku, typický beh za pár sekúnd.

Keďže beží na Apify, môžete ho **plánovať**, volať cez **API** a prepojiť s **Google Sheets, Slack či Zapier** bez vlastnej infraštruktúry.

### Na čo použiť dáta z nehnutelnosti.sk

- **Prieskum trhu** — sledujte ponukové ceny a cenu za m² naprieč mestami a okresmi v čase.
- **Vyhľadávanie investícií** — filtrujte podľa ceny a výmery a získajte nehnuteľnosti hneď v deň zverejnenia.
- **Sledovanie konkurencie** — zistite, ktoré kancelárie inzerujú čo, kde a za koľko.
- **Získavanie kontaktov** — zmapujte aktívnych maklérov a kancelárie v regióne.
- **Cenové modely** — použite reálne ponukové ceny v oceňovaní a analytike.

### Aké dáta Actor získa?

Polia označené **detail** sa vyplnia len pri zapnutej voľbe *Fetch full listing details*.

| Pole | Typ | Popis |
|---|---|---|
| `id` | string | ID inzerátu na nehnutelnosti.sk |
| `url` | string | Priamy odkaz na inzerát |
| `title` | string | Nadpis inzerátu |
| `transactionType` | string | `Predaj` alebo `Prenájom` |
| `category` / `subCategory` | string | napr. `APARTMENTS` / `THREE_ROOM_APARTMENT` |
| `price.amount` | number | Cena v EUR (`null`, ak ju predajca skryl) |
| `price.currency` | string | Vždy `EUR` |
| `price.raw` | string | Cena tak, ako je zobrazená, napr. `255 000 €`, `Info v RK` alebo `Cena dohodou` |
| `price.unitPrice` | string | Cena za m², napr. `3 541,67 €/m²` |
| `price.onRequest` | boolean | `true`, ak je cena len na vyžiadanie |
| `area` | number | Úžitková plocha v m² |
| `rooms` | number | Počet izieb, ak je uvedený (inak `null`) |
| `condition` | string | Stav nehnuteľnosti, napr. `Novostavba`, `Kompletná rekonštrukcia` |
| `location` | object | `address`, `street`, `city`, `district`, `county`, `country` |
| `location.latitude` / `longitude` | number | **detail** — približné GPS; web polohu zaokrúhľuje na okruh |
| `location.approxRadius` | number | **detail** — okruh v metroch, na ktorý bola poloha zaokrúhlená (zvyčajne 200) |
| `photos` | array | Odkazy na fotografie — vo výsledkoch niekoľko, v režime **detail** všetky |
| `videoUrls` | array | Odkazy na YouTube / video pripojené k inzerátu |
| `flags` | object | `isTop`, `isPremium`, `hasVideo`, `hasFloorPlan`, `hasInspections3d` |
| `advertiser` | object | `name`, `type` (`AGENT`), `phone` (`null`), `phoneRedacted` (`true` — pozri FAQ), `agency` |
| `advertiser.agency` | object | `name`, `website`, `address` realitnej kancelárie |
| `description` | string | Kompletný text inzerátu — v režime **detail** vždy; z výsledkov len k časti inzerátov |
| `attributes` | array | **detail** — tabuľka `{label, value}`: vlastníctvo, kúrenie, orientácia, rok rekonštrukcie, pivnice… |
| `hasElevator` | boolean | **detail** — `true` / `false` / `null` |
| `isActive` | boolean | **detail** — či je inzerát stále aktívny |
| `createdAt` / `updatedAt` / `publishedAt` | string | Časové značky inzerátu, ISO 8601 (`publishedAt` len **detail**) |
| `scrapedAt` | string | Kedy Actor tento riadok zozbieral, ISO 8601 |
| `detailFetched` | boolean | `true`, ak sa pre tento riadok načítala stránka detailu |

Inzeráty so skrytou cenou (`Info v RK`) zostávajú v datasete — s `price.onRequest: true` a pôvodným textom v `price.raw`.

### Ako zbierať dáta z nehnutelnosti.sk

1. Kliknite na **Try for free** a otvorte Actor.
2. Zvoľte **kategóriu nehnuteľnosti** — `byty`, `domy`, `pozemky`, `komercne-priestory`, `sklady` alebo `chaty`.
3. Zadajte **lokalitu**, napríklad `bratislava`, `kosice` alebo `bratislava-stare-mesto`, alebo použite `slovensko` pre celú SR.
4. Vyberte **predaj** alebo **prenájom** a voliteľne nastavte rozsah ceny a výmery.
5. Nastavte **maximálny počet inzerátov**, aby beh nepresiahol želaný rozsah.
6. Kliknite na **Start** a po dokončení stiahnite dáta zo záložky **Output**.

#### Ako nájsť správne hodnoty kategórie a lokality

Najjednoduchšie je spustiť vyhľadávanie na webe a skopírovať hodnoty z adresného riadka:

```
https://www.nehnutelnosti.sk/vysledky/byty/bratislava/predaj
                                      ^^^^^ ^^^^^^^^^^ ^^^^^^
                                   kategória lokalita  transakcia
```

Fungujú aj hodnoty podľa počtu izieb, napríklad `1-izbove-byty` či `3-izbove-byty`. Celú adresu môžete vložiť aj do poľa **Start URLs**, čím sa nahradia jednotlivé polia — hodí sa na zopakovanie vyhľadávania, ktoré ste si už na webe doladili.

### Koľko stojí zber dát z nehnutelnosti.sk?

Actor používa bežné HTTP požiadavky namiesto prehliadača, takže spotreba platformy je nízka a behy sú rýchle.

| Inzeráty | Požiadavky | Približný čas |
|---|---|---|
| 50 | 2 | pár sekúnd |
| 200 | 7 | do 30 sekúnd |
| 1 000 | 34 | do minúty |
| 5 000 | 167 | 1–2 minúty |

#### Cenník

Platíte za výsledok. Dve sadzby:

| Za čo platíte | Cena |
|---|---|
| **Inzerát** — cena, výmera, izby, stav, lokalita, fotografie, maklér a kancelária | **$1,20** / 1 000 |
| **Podrobný inzerát** — všetko vyššie plus kompletný popis, približné GPS, všetky fotografie a celá tabuľka parametrov | **$3,00** / 1 000 |

Spotreba platformy je zahrnutá — výpočtový čas sa neúčtuje osobitne. Presné sadzby pre vaše predplatné nájdete na stránke s cenami Actora.

Podrobná sadzba sa účtuje **len** vtedy, keď je zapnutá voľba *Fetch full listing details* a stránku inzerátu sa naozaj podarilo načítať. Ak ju načítať nemožno, inzerát sa účtuje základnou sadzbou.

| Ukážkový beh | Približná cena |
|---|---|
| 1 000 základných inzerátov | $1,20 |
| 1 000 podrobných inzerátov | $3,00 |
| 200 základných inzerátov | $0,24 |

Zapnutie voľby **Fetch full listing details** zároveň pridá jednu požiadavku na každý inzerát (1 000 inzerátov → približne 1 034 požiadaviek namiesto 34), takže takéto behy trvajú výrazne dlhšie. Ak potrebujete len ceny, výmery a lokality, nechajte ju vypnutú.

### Vstup

Všetky možnosti nájdete v záložke **Input**. Tie najdôležitejšie:

| Vstup | Popis |
|---|---|
| `category`, `location`, `transactionType` | Definujú vyhľadávanie podľa štruktúry adries webu |
| `priceMin` / `priceMax`, `areaMin` / `areaMax` | Aplikuje ich priamo web, takže skracujú aj čas behu |
| `maxItems` | Pevný strop počtu inzerátov (`0` = bez limitu) |
| `includeFullDetail` | Navštívi stránku každého inzerátu kvôli kompletnému popisu, približným GPS, všetkým fotkám a parametrom |
| `startUrls` | Adresy vyhľadávania z nehnutelnosti.sk *alebo* jednotlivé `/detail/...` adresy inzerátov namiesto polí vyššie |
| `proxyConfiguration` | Predvolene vypnuté — web nemá ochranu proti botom. Zapnite len ak veľmi veľký beh naráža na limity |

### Výstup

Dataset si môžete stiahnuť vo formátoch **JSON, HTML, CSV alebo Excel**. Ukážku výstupu nájdete v [anglickej časti](#output).

### Tipy

- **Nižšia cena a vyššia rýchlosť** — ak potrebujete len ceny, výmery a lokality, nechajte *Fetch full listing details* vypnuté.
- **Popisy** — vo výsledkoch vyhľadávania web posiela popisy len k časti inzerátov. Kompletné popisy, GPS súradnice aj tabuľku parametrov získate zapnutím *Fetch full listing details*.
- **Zúžte výber filtrami** — filtre ceny a výmery aplikuje samotný web, takže znižujú počet výsledkov aj čas behu.
- **Sledovanie nových inzerátov** — naplánujte denný beh a zoraďte podľa `createdAt`.
- **Veľké behy** — najprv zúžte výber filtrami ceny/výmery; jedno celoslovenské vyhľadávanie môže vrátiť desaťtisíce inzerátov.

### Časté otázky

**Potrebujem proxy?**
Nie. nehnutelnosti.sk nemá ochranu proti botom a odpovedá na bežné HTTP požiadavky, takže proxy je predvolene vypnuté. Apify Proxy môžete zapnúť, ak veľmi veľký beh začne narážať na limity, ale pri bežnom používaní nie je potrebné.

**Prečo je `price.amount` niekedy `null`?**
Niektorí predajcovia cenu nezverejňujú a namiesto nej zobrazujú `Info v RK` alebo `Cena dohodou`. Takéto inzeráty majú `price.onRequest: true` a pôvodný text v `price.raw`.

**Prečo tam nie je telefónne číslo?**
Web posiela len maskovaný útržok (`+421  ...`) a číslice odhalí až po kliknutí v prehliadači. Actor sa ho nepokúša odmaskovať: `advertiser.phone` je `null` a `advertiser.phoneRedacted` je `true`. Web a adresa kancelárie sú k dispozícii.

**Prečo niektoré inzeráty nemajú GPS súradnice?**
Súradnice sú dostupné len v režime detailu (`includeFullDetail: true`) a len ak predajca polohu zverejnil. Sú zámerne približné — web ich zaokrúhľuje na okruh uvedený v `location.approxRadius` (v metroch).

**Zvláda aj reality.sk alebo topreality.sk?**
Zatiaľ nie. Patria do rovnakej skupiny a parsovacia vrstva je pripravená na znovupoužitie, no podpora nie je implementovaná ani otestovaná.

**Actor zrazu nevracia žiadne výsledky — čo teraz?**
Web vkladá dáta do Next.js payloadu, ktorý sa môže pri nasadení zmeniť. Actor v takom prípade zapíše zrozumiteľné varovanie do logu. Nahláste to prosím cez záložku Issues.

### Upozornenie

Naše Actory sú etické a nezískavajú súkromné údaje používateľov. Získavajú len to, čo sa používateľ rozhodol zverejniť. Vaše výsledky však môžu obsahovať osobné údaje, ktoré sú v Európskej únii chránené nariadením GDPR a inde obdobnými predpismi. Osobné údaje by ste nemali zbierať bez oprávneného dôvodu. Ak si nie ste istí, poraďte sa s právnikom.

Kontaktné údaje v inzerátoch zverejňujú makléri a kancelárie preto, aby ich bolo možné kontaktovať ohľadom nehnuteľnosti. Používajte ich zodpovedne a rešpektujte podmienky používania webu.

# Actor input Schema

## `category` (type: `string`):

URL slug of the property category, as used by nehnutelnosti.sk. Common values: byty (apartments), domy (houses), pozemky (land), komercne-priestory (commercial), sklady (warehouses), chaty (cottages). Room-specific slugs also work, e.g. 1-izbove-byty, 2-izbove-byty, 3-izbove-byty.

## `location` (type: `string`):

URL slug of the location, e.g. bratislava, kosice, bratislava-stare-mesto, okres-bratislava-i. Use 'slovensko' to search the whole country. Tip: run the search on the website and copy the slug out of the address bar.

## `transactionType` (type: `string`):

Whether to scrape properties for sale or for rent.

## `maxItems` (type: `integer`):

Stop after collecting this many listings. Set to 0 to scrape every result the search returns — use with care, a country-wide search can return tens of thousands.

## `includeFullDetail` (type: `boolean`):

Visit each listing's own page to collect the complete description, approximate GPS coordinates, all photos and the full attribute table. This costs one extra request per listing, so runs take noticeably longer and are billed at the higher rate. Without it, descriptions are only available for some listings.

## `priceMin` (type: `integer`):

Lower price bound. Leave at 0 for no minimum.

## `priceMax` (type: `integer`):

Upper price bound. Leave at 0 for no maximum.

## `areaMin` (type: `integer`):

Lower area bound in square metres. Leave at 0 for no minimum.

## `areaMax` (type: `integer`):

Upper area bound in square metres. Leave at 0 for no maximum.

## `startUrls` (type: `array`):

nehnutelnosti.sk search URLs or individual /detail/... listing URLs. When provided, these replace the category / location / transaction fields above — handy for reusing a filtered search you built on the website.

## `proxyConfiguration` (type: `object`):

nehnutelnosti.sk has no anti-bot protection, so a proxy is not needed and off by default. Enable Apify Proxy only if a very large run starts hitting rate limits.

## Actor input object example

```json
{
  "category": "byty",
  "location": "bratislava",
  "transactionType": "predaj",
  "maxItems": 200,
  "includeFullDetail": false,
  "priceMin": 0,
  "priceMax": 0,
  "areaMin": 0,
  "areaMax": 0,
  "startUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `listings` (type: `string`):

All scraped property listings as JSON.

## `listingsCsv` (type: `string`):

The same listings exported as CSV for spreadsheets.

## `runOverview` (type: `string`):

Details and log of this run in Apify Console.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "category": "byty",
    "location": "bratislava",
    "maxItems": 200
};

// Run the Actor and wait for it to finish
const run = await client.actor("nogards95/nehnutelnosti-sk-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "category": "byty",
    "location": "bratislava",
    "maxItems": 200,
}

# Run the Actor and wait for it to finish
run = client.actor("nogards95/nehnutelnosti-sk-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "category": "byty",
  "location": "bratislava",
  "maxItems": 200
}' |
apify call nogards95/nehnutelnosti-sk-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nogards95/nehnutelnosti-sk-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/2qpjLaqWSxp8C0UzT/builds/OXr54h9KERkOSVsV0/openapi.json
