# Bolha Scraper - Slovenia Real Estate Listings (`recordsdata/bolha-scraper`) Actor

Scrape bolha.com real estate: apartments, houses, land, commercial space, garages and rooms for sale or rent in Slovenia and Croatia, with prices, location, photos, agency profiles and market statistics. No login.

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

## Pricing

from $15.43 / 1,000 listing detail records

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![RecordsData](https://api.apify.com/v2/key-value-stores/AAm3a1h3Z9nYfrvh9/records/banner?v=3)

## 🏠 Bolha Scraper - Slovenia Real Estate Listings, Agencies and Prices - RecordsData

> 🚀 **Export bolha.com real estate in minutes.** Search 13,350 live property ads in 18 categories (apartments, houses, land, commercial space, garages, rooms, holiday homes, new builds, luxury), read single ads by address or number, list the real estate agencies and pull ad counts and price statistics per region. Every detailed ad returns price in EUR, address with approximate coordinates, area, rooms, floor, year, energy data, description, all photos and the selling agency. No login, no browser, no proxy.

**Bolha Scraper is an Apify Actor that collects public real estate ads from bolha.com, the largest Slovenian classifieds site: apartments, houses, plots, business premises, garages and rooms for sale or rent, in Slovenia and in Croatia.** A detailed ad has about 50 fields (up to 63), the dataset schema holds 118 columns across five record types, and a 3-ad cloud run finishes in about 4 seconds.

| 🎯 Target audience | 💡 Primary use cases |
|---|---|
| Real estate investors and analysts | Price and price per m2 by region, Slovenian and Croatian coast comparisons |
| Agencies and proptech teams | Competitor stock, agency directory, lead lists of businesses that advertise |
| Relocation and buyer advisers | Shortlists of apartments and houses with photos, floor and energy class |
| Developers and lenders | New build and land monitoring, asking price trends |
| Data teams and researchers | Geocoded property datasets for Slovenia and the Croatian Adriatic |

### 📋 What the Bolha Scraper does

The Actor reads the same public pages every visitor of bolha.com sees. Each page carries its data as embedded JSON, so rows are exact and no browser is needed. Four modes cover the site.

- **search**: ads for a deal type (sale, rent or both), one or more property types and the places you name (a region such as `osrednjeslovenska`, a municipality such as `maribor`, a Croatian county such as `istrska-zupanija`). Without places it reads the 12 Slovenian regions, the Croatian bucket or the whole national list. Filters for price, area, rooms (apartments), photos, seller type and sort order are applied by the site and checked again on every row.
- **urls**: paste ad addresses, store addresses, category addresses or just ad numbers. Several kinds can be mixed.
- **agencies**: real estate stores of bolha.com with name, logo, member since, address, description and live ad counts, plus website and e-mail with **Include agency contact details**.
- **market**: ad count per region and category plus price, price per m2 and area statistics from the first 25 ads (newest first) of each place.

### 📊 Output

Every row has a `recordType`: `listing` (card data, fast), `listing-detail` (full ad page), `changed-listing` (monitor), `agency` or `market-stat`. Fields without a value are left out, never filled with `null`. Column order is fixed: image first, identity and price next, then location, specs, text, media, seller, and `scrapedAt` last.

| Field | Type | Example |
|---|---|---|
| `listingId` | string | 16501926 |
| `recordType` | string | listing-detail |
| `operation` | string | sale |
| `propertyType` | string | apartment |
| `price` / `currency` | number / string | 149000 / EUR |
| `pricePerM2` | number | 2651 |
| `city` / `region` | string | Kranj / Gorenjska |
| `latitude` / `longitude` | number | 46.241148 / 14.356372 |
| `areaBuilt` | number (m2) | 56.2 |
| `rooms`, `floor`, `yearBuilt` | number | 3, 3, 1941 |
| `energyCertificate` | string | when the ad states it |
| `images` | array of URLs | up to all photos |
| `agencyName` | string | CENTURY 21 Slovenija |
| `publishedAt`, `viewCount` | ISO date, number | 2026-10-05T13:15:14.000Z, 370 |

Other groups: price extras (`priceOnRequest`, `previousPrice`, `priceChangePct`), media (`floorPlans`, `videoUrl`), `amenities`, agency fields (`memberSince`, `realEstateListings`) and market fields (`listingCount`, `medianPrice`, `medianPricePerM2`, `privateSellerShare`).

Sample `listing-detail` row from a real cloud run (long text and lists shortened):

```json
{
  "imageUrl": "https://www.bolha.com/image-xlsize/nepremicnine/kranj-slika-62957886.jpg",
  "recordType": "listing-detail",
  "title": "Kranj",
  "listingId": "16501926",
  "url": "https://www.bolha.com/nepremicnine/kranj-oglas-16501926",
  "sourceSite": "bolha.com",
  "country": "SI",
  "countryName": "Slovenia",
  "language": "sl",
  "operation": "sale",
  "propertyType": "apartment",
  "listingType": "FLAT",
  "categoryPath": "/prodaja-stanovanja",
  "status": "active",
  "price": 149000,
  "currency": "EUR",
  "priceOnRequest": false,
  "priceIsPlaceholder": false,
  "priceType": "total",
  "pricePerM2": 2651,
  "address": "Kranj, Gorenjska",
  "city": "Kranj",
  "region": "Gorenjska",
  "latitude": 46.241148,
  "longitude": 14.356372,
  "locationApproximate": true,
  "areaBuilt": 56.2,
  "floor": 3,
  "floorLabel": "3",
  "floors": 3,
  "yearBuilt": 1941,
  "yearRenovated": 2026,
  "condition": "renovated",
  "description": "PRODAJA STANOVANJA: Kranj - Smledniska cesta 1 ...",
  "images": ["https://www.bolha.com/image-xlsize/nepremicnine/kranj-slika-62957886.jpg", "..."],
  "imageCount": 10,
  "publishedAt": "2026-10-05T13:15:14.000Z",
  "viewCount": 370,
  "agencyName": "CENTURY 21 Slovenija",
  "agencyUrl": "https://www.bolha.com/trgovina/cslo-nep",
  "agencyWebsite": "https://c21.si/",
  "isPrivateSeller": false,
  "referenceCode": "1216208-037",
  "scrapedAt": "2026-10-11T09:49:12.977Z"
}
```

### ✨ Why choose this Actor

- 🧩 **Five record types, one dataset**: ads, full ad pages, price changes, agencies and regional statistics, each billed separately so you pay only for what you read.
- 🌍 **Slovenia and Croatia**: about 9 in 10 apartments for sale on bolha.com are in Croatia (4,069 of 4,609 on 2026-10-11). `country` is a code on every row (`SI`, `HR`, and `AT`, `IT`, `RS` for the few ads abroad).
- 🔒 **Private sellers stay private**: their names and phone numbers are never output.
- 🛡️ **Filters you can trust**: every filter is checked against the site's own echo, and ads that a place page adds as fallback are dropped.
- 🔁 **Monitor mode**: scheduled runs return only new ads, or ads whose price changed.
- ⚡ **Light to run**: plain HTTP, no browser, peak memory 48 MB in the cloud.

### 📈 How it compares to alternatives

| | This Actor | studio-amba/bolha-scraper | Manual export |
|---|---|---|---|
| Scope | Real estate section only | All bolha.com categories | Browsing ad by ad |
| Fields per ad | About 50, up to 63 | 11 listed fields | Whatever you copy |
| Property detail | Area, rooms, floor, year, energy, coordinates, photos | Not in its output table | Manual |
| Extras | Agencies, regional stats, price-change monitor | None listed | None |
| Price per 1,000 | $20.00 full ad, $14.29 card (Free plan) | $2.00 | Your time |

Read on 2026-10-11. The other Actor is the only Bolha scraper on the Apify Store, and it costs less per result than we do. It covers every category, so it suits keyword searches outside real estate, but its page lists no coordinates, area, rooms or agency fields. Our price is higher, so pick this Actor only when you need property specifics (coordinates, area, rooms, floor, energy data), Croatian coast ads, agency data or price-change monitoring. Pick the other for cars, electronics, other categories or plain bulk lists. Paid plans lower our rates.

### 💰 Pricing

Pay per event, no monthly fee. Free plan prices (Bronze, Silver and Gold plans pay less):

| Event | Free plan price |
|---|---|
| Listing detail record (full ad) | $0.02000 |
| Listing record (search card) | $0.01429 |
| Changed listing record (monitor) | $0.02286 |
| Agency record | $0.02857 |
| Market stat record | $0.02857 |

Examples on the Free plan: 100 full ads cost $2.00, 1,000 cards cost $14.29, 12 regional market rows cost $0.34. On the Gold plan 1,000 full ads cost $15.43. Invalid input and empty searches charge nothing.

### 🚀 How to use

1. Create a free account at [console.apify.com](https://console.apify.com) and open the Actor.
2. Choose **What to collect**. For a first test keep `search`, pick a property type and a deal type, and set **Maximum items** to 10.
3. Optionally name places (`osrednjeslovenska`, `maribor`, `obalno-kraska`, `istrska-zupanija`) and add price, area or room limits.
4. Press **Start**. Open the dataset when the run finishes and download JSON, CSV, Excel, XML or HTML.
5. To watch a market, turn on **Only new ads** and **Report price changes**, give the search a **Monitor name** and schedule the Actor.

### ⚙️ Input

| Field | Type | Meaning |
|---|---|---|
| `mode` | string | search, urls, agencies or market |
| `propertyTypes` | array | apartment, house, land and more |
| `operation` | string | sale, rent or both |
| `locations` | array | Region, municipality or county slugs |
| `minPrice` / `maxPrice` | number | Limits in EUR |
| `maxItems` | number | Cap on rows (default in the form) |
| `onlyNew`, `trackPriceChanges`, `stateKey` | boolean, boolean, string | Monitor: new ads, price changes, monitor name |
| `scrapeDetails` | boolean | Open every ad for the full row |

A minimal JSON example:

```json
{ "mode": "search", "propertyTypes": ["apartment"], "operation": "sale", "locations": ["osrednjeslovenska"], "minPrice": 100000, "maxPrice": 300000, "maxItems": 50 }
```

### 💼 Business use cases

Investors and analysts track asking prices and price per m2 by region. Agencies and proptech teams watch competitor stock and keep an agency directory. Relocation advisers compare Slovenian regions with Croatian counties in one EUR dataset. Developers and lenders follow new builds, plots and price cuts with monitor mode.

### 🔌 Automating and integrations

Schedule runs in Apify Console and send results to Make, Zapier, n8n, Google Sheets, Slack, Airbyte or your own webhook. The Apify API and the JavaScript and Python clients start runs and read datasets.

### 🤖 Use with AI agents (MCP)

Connect the Apify MCP server (`mcp.apify.com`) to Claude, Cursor or another MCP client and the Actor appears as a tool.

**Tool description:** Scrape bolha.com real estate ads (Slovenia and Croatia) into typed rows with price in EUR, area, rooms, floor, year, approximate coordinates, photos and agency. Also lists agencies and regional price statistics.

**Example agent prompt:** "Get 30 apartments for sale in Maribor under 150,000 EUR from bolha.com and sort them by price per square meter." The agent sends `{ "mode": "search", "propertyTypes": ["apartment"], "operation": "sale", "locations": ["maribor"], "maxPrice": 150000, "maxItems": 30 }` and analyzes the rows.

### ⚠️ Limits and legal

The Actor reads public pages only. bolha.com terms reserve rights to its content, so use the data under them and under the privacy law that applies to you. Coordinates are approximate, listings with placeholder prices are flagged, and only real estate is covered.

### Frequently Asked Questions

#### 🏠 What data can I scrape from bolha.com?

Real estate ads: apartments, houses, land, business premises, garages, rooms, holiday homes, holiday rentals, new builds and luxury properties, for sale or rent, plus the real estate agencies (stores) and ad counts per region. Cars, jobs and other categories of the site are not covered.

#### 🔎 How do I scrape bolha.com listings for one city or region?

Add the place to **Places** using the name from the bolha.com address, for example `maribor`, `ljubljana-center`, `obalno-kraska` or `istrska-zupanija`. A pasted category address such as `https://www.bolha.com/prodaja-hise/maribor` works too. A place without ads returns nothing and a place that does not exist returns one free error row that says so.

#### 🔢 How many listings can one search return?

Everything the site shows. A category page lists 25 ads and goes as deep as the category goes: all 4,609 apartments for sale were read across 185 pages with no duplicates. Raise **Maximum list pages per place** above its default of 100 pages (2,500 ads) for very large places.

#### 🇭🇷 Why do many apartments come from Croatia?

bolha.com lists Croatian ads under "outside Slovenia". Set **Country of the ads** to `SI` for Slovenia, `HR` for Croatia or `all` for the national list, which also holds a few ads in Austria, Italy and Serbia. Each row carries its `country` code.

#### 🛏️ Is there a bedroom count?

No. bolha.com publishes the total number of rooms, so the field is `rooms` (apartments only, also usable as a filter). Bathrooms are returned as `bathrooms` when the ad states them. Ads that give neither simply leave the field out, because empty values are never filled with `null`.

#### 📍 How accurate are the coordinates?

Bolha publishes an approximate point, a circle of about 500 m and never the exact door, and every such row carries `locationApproximate: true`. That is enough for maps, district averages and distance filters, but not for finding a building. Ads without a map pin have no `latitude` or `longitude`.

#### 💶 Which currency and language are used?

Prices are in EUR for Slovenian and Croatian ads, in the `currency` field. Titles and descriptions stay in the language the seller wrote (mostly Slovenian, some Croatian, English or German), `language` names the site language, and fixed values such as amenities, heating and condition are translated to stable English values.

#### 🧑 Does it return names, phones or e-mails?

Private sellers are never named and their phone numbers are never output. Phone numbers and e-mail addresses in ad descriptions are replaced with a marker. Agencies and stores are named, and with **Include agency contact details** you also get their website, business e-mail and address. Agent names that a seller typed into a description cannot be removed.

#### 🏷️ What are placeholder prices?

Some sellers type 1 EUR or 10 EUR for a sale ad. Those rows carry `priceIsPlaceholder: true`, and **Skip placeholder prices** drops them. Ads with price on request carry `priceOnRequest: true` and no `price`.

#### 🔁 How do I get only new ads or price changes?

Turn on **Only new ads** and give the search a **Monitor name**. The first run returns the ads found, later runs return only ads not seen before. With **Report price changes** an ad whose price moved comes back as a `changed-listing` row with `previousPrice`, `priceChange` and `priceChangePct`.

#### 🛡️ Do I need a proxy or an API key?

No. bolha.com answered 120 of 120 test requests from Apify servers without a proxy, so the Actor runs with plain HTTP and no key. An optional datacenter proxy setting exists in the input if you ever see blocks. You only need your Apify account to start runs.

#### 🧪 What happens if my input is wrong or nothing matches?

Invalid input, for example a room for sale, ends the run as succeeded with one free error row that explains the fix, and nothing is charged. A valid search with no matches finishes with no rows and a clear message in the log, also at no charge.

#### 🆓 What do free plans get?

Free plans return up to 10 items per run, which is enough to test every mode and check the fields. Paid plans have no item cap beyond the **Maximum items** you set, and they get lower per-result prices as the plan tier goes up.

#### 📤 Which formats can I export?

JSON, CSV, Excel, XML, HTML and RSS from the dataset page in Apify Console, or through the Apify API and the JavaScript and Python clients. Column order is fixed, with the image first and the scrape time last, so exports line up between runs.

#### ⚖️ Is it legal to scrape bolha.com?

The Actor reads public pages that need no login and does not touch private data. The site terms reserve the rights to its content, so use the data in line with them and with the privacy law that applies to you.

### 🔗 Recommended Actors

- [RecordsData collection](https://apify.com/RecordsData): other real estate and public data scrapers by the same team.

**🆘 Need help?** Write to <contact.punkrecordsdata@gmail.com> or open an issue in the Issues tab.

Last updated: 2026-10-11

> **⚠️ Disclaimer:** This is an independent tool and is not affiliated with, endorsed by or sponsored by Bolha or its owner. Bolha is a trademark of its owner. It collects only publicly available data.

# Actor input Schema

## `mode` (type: `string`):

search = real estate ads for the chosen deal type, property types and places. urls = the bolha.com ad, store or category addresses and ad numbers you list below. agencies = real estate stores (agencies) with logo, profile data and live ad counts. market = ad counts and price statistics per region.

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

Stops after this many rows (all record types together). Free plans are limited to 10 items per run.

## `propertyTypes` (type: `array`):

Which real estate categories to read (search and market modes). Rooms and holiday rentals exist for rent only; new builds, holiday homes and land sales exist for sale. Luxury covers the luxury apartment and house categories.

## `operation` (type: `string`):

Sale, rent or both. Types that do not exist for the chosen deal type are skipped with a warning.

## `country` (type: `string`):

bolha.com lists Slovenian ads and many Croatian ads (about 9 in 10 apartments for sale are Croatian). SI reads the 12 Slovenian regions, HR reads the Croatian bucket, all reads the national list. Ignored when you name places below.

## `locations` (type: `array`):

Optional. Place names as they appear in bolha.com addresses, for example osrednjeslovenska, maribor, ljubljana-center, obalno-kraska, istrska-zupanija or zagreb-mesto. A pasted category address works too. Empty means the whole country chosen above.

## `minPrice` (type: `integer`):

Only ads priced at or above this amount in euro. Leave empty for no limit.

## `maxPrice` (type: `integer`):

Only ads priced at or below this amount in euro. Leave empty for no limit.

## `minAreaM2` (type: `integer`):

Only ads with at least this living, usable or plot area in square metres (the site uses the main area of each category). Leave empty for no limit.

## `maxAreaM2` (type: `integer`):

Only ads with at most this area in square metres. Leave empty for no limit.

## `minRooms` (type: `integer`):

Apartments only: at least this many rooms (1 to 7, counting bedrooms and living room). Other property types ignore it with a warning.

## `maxRooms` (type: `integer`):

Apartments only: at most this many rooms. Other property types ignore it with a warning.

## `withImagesOnly` (type: `boolean`):

Keep only ads that have at least one photo.

## `skipPlaceholderPrices` (type: `boolean`):

Sale ads priced at 100 EUR or less are placeholders (1 EUR, 10 EUR, 'call me'). Turn this on to drop them, which matters when sorting by lowest price.

## `sellerType` (type: `string`):

Keep ads from agencies (stores), from private sellers, or both. Private sellers are never named and their phone numbers are never output.

## `sort` (type: `string`):

Order of the ads inside each place: newest first, oldest first, lowest price first or highest price first.

## `maxSearchPages` (type: `integer`):

Each list page holds 25 ads. Raise it to read very large categories, lower it to stay shallow.

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

urls mode: bolha.com ad addresses (ending in -oglas-1234567), store addresses (bolha.com/trgovina/name) or real estate category addresses (for example https://www.bolha.com/prodaja-hise/maribor).

## `listingIds` (type: `array`):

urls mode: bolha.com ad numbers (5 to 10 digits, the number at the end of an ad address).

## `agencyQuery` (type: `string`):

agencies mode: only stores whose name contains this text (for example remax or nepremicnine). Empty reads every store that advertises real estate.

## `onlyRealEstate` (type: `boolean`):

agencies mode: skip stores that have no real estate ads at the moment.

## `scrapeDetails` (type: `boolean`):

On: open each ad page for the full description, all photos, coordinates, floor, year, energy data and the seller store (listing-detail-record). Off: card data only from the list page, much faster (listing-record).

## `includeContactDetails` (type: `boolean`):

Adds the business website, e-mail and address of the selling store. Phone numbers and private persons are never output.

## `includeRaw` (type: `boolean`):

Adds the untouched site data of each ad in a raw field. Larger rows, mostly for debugging.

## `onlyNew` (type: `boolean`):

Skips every ad seen in an earlier run with the same monitor name, so scheduled runs return only what is new.

## `trackPriceChanges` (type: `boolean`):

Needs Only new ads. An ad seen before with a different price comes back as changed-listing-record with the previous price and the change in percent.

## `stateKey` (type: `string`):

Name of the memory used by Only new ads. Use one name per saved search. Empty derives a name from your filters.

## `resetSeen` (type: `boolean`):

Clears the memory of the monitor name before this run.

## `maxConcurrency` (type: `integer`):

How many ad pages are fetched at the same time (1 to 8). The site is open, 4 is polite and fast.

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

Optional. Empty means direct requests, which work. Add a proxy only if your own network needs one.

## Actor input object example

```json
{
  "mode": "search",
  "maxItems": 10,
  "propertyTypes": [
    "apartment"
  ],
  "operation": "sale",
  "country": "SI",
  "locations": [
    "osrednjeslovenska"
  ],
  "withImagesOnly": false,
  "skipPlaceholderPrices": false,
  "sellerType": "all",
  "sort": "new",
  "maxSearchPages": 100,
  "startUrls": [
    "https://www.bolha.com/prodaja-hise/maribor"
  ],
  "listingIds": [],
  "agencyQuery": "",
  "onlyRealEstate": true,
  "scrapeDetails": true,
  "includeContactDetails": false,
  "includeRaw": false,
  "onlyNew": false,
  "trackPriceChanges": false,
  "stateKey": "",
  "resetSeen": false,
  "maxConcurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Key fields per row

## `fullData` (type: `string`):

Complete dataset with all fields

# 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 = {
    "maxItems": 10,
    "propertyTypes": [
        "apartment"
    ],
    "locations": [
        "osrednjeslovenska"
    ],
    "minPrice": 0,
    "maxPrice": 0,
    "minAreaM2": 0,
    "maxAreaM2": 0,
    "minRooms": 0,
    "maxRooms": 0,
    "startUrls": [
        "https://www.bolha.com/prodaja-hise/maribor"
    ],
    "listingIds": [],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("recordsdata/bolha-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 = {
    "maxItems": 10,
    "propertyTypes": ["apartment"],
    "locations": ["osrednjeslovenska"],
    "minPrice": 0,
    "maxPrice": 0,
    "minAreaM2": 0,
    "maxAreaM2": 0,
    "minRooms": 0,
    "maxRooms": 0,
    "startUrls": ["https://www.bolha.com/prodaja-hise/maribor"],
    "listingIds": [],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("recordsdata/bolha-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 '{
  "maxItems": 10,
  "propertyTypes": [
    "apartment"
  ],
  "locations": [
    "osrednjeslovenska"
  ],
  "minPrice": 0,
  "maxPrice": 0,
  "minAreaM2": 0,
  "maxAreaM2": 0,
  "minRooms": 0,
  "maxRooms": 0,
  "startUrls": [
    "https://www.bolha.com/prodaja-hise/maribor"
  ],
  "listingIds": [],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call recordsdata/bolha-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,recordsdata/bolha-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/Gmm36GCiOgfZZKqqv/builds/7MurMX9jYv00iquCe/openapi.json
