# Nepremicnine Scraper - Slovenian Real Estate Listings (`studio-amba/nepremicnine-scraper`) Actor

Scrape property listings from Nepremicnine.net, Slovenia's largest real estate portal. Extract prices, locations, areas, rooms, images, and agency details for apartments, houses, and commercial properties. No login needed.

- **URL**: https://apify.com/studio-amba/nepremicnine-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 result scrapeds

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/platform/actors/running/actors-in-store#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

## Nepremicnine Scraper

Extract real estate listings from [Nepremicnine.net](https://www.nepremicnine.net), Slovenia's largest and most-visited property portal. The site aggregates hundreds of thousands of active listings from agencies and private sellers across all Slovenian regions, covering apartments, houses, land, commercial properties, and more.

### Why use this actor?

Nepremicnine.net is the dominant real estate platform in Slovenia with over 1.5 million monthly visits. It is the go-to portal for anyone searching for properties to buy or rent across the country. This actor lets you collect structured property data at scale — prices, areas, rooms, floor levels, locations, images, descriptions, and agency details — without manual browsing or login requirements.

Use cases include market analysis, investment research, relocation planning, price monitoring across Slovenian cities, academic housing studies, portfolio tracking, and competitor analysis for real estate agencies.

### How to scrape Nepremicnine.net data

1. Go to the actor's page on the Apify Store
2. Enter a search term such as "Ljubljana stanovanje" (Ljubljana apartment) or paste a Nepremicnine.net search URL directly
3. Set the maximum number of results you want to collect
4. Click "Start" to run the scraper
5. Download results as JSON, CSV, or Excel when complete

The actor handles anti-bot protections automatically using residential proxies and browser fingerprinting. No login or cookies are required.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchQuery` | String | No | Search term — city, region, or keyword. Examples: "Ljubljana stanovanje", "Maribor hisa", "Koper". Defaults to "Ljubljana stanovanje" if empty. |
| `startUrls` | Array | No | Nepremicnine.net search or detail URLs. Overrides searchQuery if provided. |
| `maxResults` | Integer | No | Maximum listings to return (default: 100, max: 10,000) |
| `proxyConfiguration` | Object | No | Proxy settings. Residential proxies are recommended and configured by default. |

#### Slovenian search terms

Common Slovenian property terms you can use in searchQuery:

- **stanovanje** — apartment
- **hisa** / **hiša** — house
- **posest** — estate/property
- **zemljisce** / **zemljišče** — land/plot
- **garaza** / **garaža** — garage
- **poslovni prostor** — commercial space
- **vikend** — holiday home

#### Using start URLs

You can paste filtered search URLs directly from Nepremicnine.net. Examples:

- Apartments for sale in Ljubljana: `https://www.nepremicnine.net/oglasi-prodaja/ljubljana-mesto/stanovanje/`
- Houses for sale under 350,000 EUR: `https://www.nepremicnine.net/oglasi-prodaja/slovenija/hisa/cena-do-350000-eur/`
- Rentals in Maribor: `https://www.nepremicnine.net/oglasi-oddaja/maribor/`
- 2-room apartments in Ljubljana: `https://www.nepremicnine.net/oglasi-prodaja/ljubljana-mesto/stanovanje/2-sobno/`

### Output

Each listing produces a JSON object with the following fields:

| Field | Type | Description |
|-------|------|-------------|
| `listingTitle` | String | Property listing title |
| `price` | Number | Listing price in EUR (null if not available) |
| `currency` | String | Price currency (EUR) |
| `area` | Number | Property area in square meters (null if not available) |
| `rooms` | Number | Number of rooms (null if not available) |
| `floor` | String | Floor number or description (null if not available) |
| `location` | String | Property location (city, region) |
| `propertyType` | String | Type of property: stanovanje, hisa, posest, etc. |
| `transactionType` | String | "sale" or "rent" |
| `imageUrl` | String | Primary listing photo URL |
| `url` | String | Full listing URL on Nepremicnine.net |
| `listingDescription` | String | Short property description |
| `agency` | String | Real estate agency name |
| `scrapedAt` | String | ISO 8601 timestamp |

#### Example output

```json
{
    "listingTitle": "Prodamo 2-sobno stanovanje v centru Ljubljane",
    "price": 189000,
    "currency": "EUR",
    "area": 58.2,
    "rooms": 2,
    "floor": "3. nadstropje",
    "location": "Ljubljana Mesto",
    "propertyType": "stanovanje",
    "transactionType": "sale",
    "imageUrl": "https://www.nepremicnine.net/slike/...",
    "url": "https://www.nepremicnine.net/oglasi-prodaja/lj-center-stanovanje_12345/",
    "listingDescription": "Svetlo, prenovljeno stanovanje v središču mesta...",
    "agency": "RE/MAX Ljubljana",
    "scrapedAt": "2026-06-09T12:00:00.000Z"
}
```

### Tips for best results

- **Use Slovenian keywords** for more precise results. The site's primary language is Slovenian.
- **Residential proxies** are recommended for reliable access. They are pre-configured by default.
- **Start with a small maxResults** (10-20) to verify results before running large jobs.
- **Use filtered URLs** from the site's advanced search for precise targeting (by region, price range, property type, number of rooms).
- The actor extracts data from both search result pages and individual listing pages.

### Cost estimation

The actor uses Playwright (headless browser) for reliable extraction. Approximate costs on the Apify platform:

- \~25 listings per CU (compute unit) with residential proxies
- Scraping 100 listings costs approximately $0.10-0.15
- Scraping 1,000 listings costs approximately $0.80-1.20

Actual costs depend on proxy usage, page load times, and anti-bot challenge frequency.

### Limitations

- The actor respects the site's rate limits. Very large scrapes (10,000+ listings) may take longer due to throttling.
- Some listing details (exact floor, full description) are only available on detail pages. The search results page provides a subset of fields.
- Prices shown as "Po dogovoru" (by agreement) or "Na povpraševanje" (on request) will have a null price value.

### Changelog

- **v0.1** — Initial release. Search by keyword, start URLs, pagination, search + detail page extraction.

# Actor input Schema

## `searchQuery` (type: `string`):

Search term — city, region, or property keyword. Examples: 'Ljubljana stanovanje', 'Maribor hisa', 'Koper'. Defaults to 'Ljubljana stanovanje' if empty.

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

Nepremicnine.net search or listing detail URLs. Overrides searchQuery if provided. Example: https://www.nepremicnine.net/oglasi-prodaja/ljubljana-mesto/stanovanje/

## `maxResults` (type: `integer`):

Maximum number of property listings to scrape.

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

Residential proxies recommended for reliable scraping. Configured by default.

## Actor input object example

```json
{
  "searchQuery": "Ljubljana stanovanje",
  "startUrls": [
    {
      "url": "https://www.nepremicnine.net/oglasi-prodaja/ljubljana-mesto/stanovanje/"
    }
  ],
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "SI"
  }
}
```

# 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 = {
    "searchQuery": "Ljubljana stanovanje",
    "startUrls": [
        {
            "url": "https://www.nepremicnine.net/oglasi-prodaja/ljubljana-mesto/stanovanje/"
        }
    ],
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "SI"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/nepremicnine-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 = {
    "searchQuery": "Ljubljana stanovanje",
    "startUrls": [{ "url": "https://www.nepremicnine.net/oglasi-prodaja/ljubljana-mesto/stanovanje/" }],
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "SI",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/nepremicnine-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 '{
  "searchQuery": "Ljubljana stanovanje",
  "startUrls": [
    {
      "url": "https://www.nepremicnine.net/oglasi-prodaja/ljubljana-mesto/stanovanje/"
    }
  ],
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "SI"
  }
}' |
apify call studio-amba/nepremicnine-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/nepremicnine-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/pQPQUxhfmXZm3qqa0/builds/vqS0Yp3YvhNmU6fos/openapi.json
