# Boliga.dk Scraper — Denmark Real Estate & Agent Leads (`logiover/boliga-scraper`) Actor

Scrape Boliga.dk Danish real estate via its clean JSON API: price, address, zip, m², rooms, build year, energy class, square-meter price and the estate agent (name + reg id) behind every listing. No login, no API key. Great for Denmark property data & estate-agent leads.

- **URL**: https://apify.com/logiover/boliga-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (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 $1.99 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

<div align="center">

<img src="https://cdn-icons-png.flaticon.com/128/619/619153.png" width="92" alt="Boliga Scraper"/>

## 🏠 Boliga Scraper — Denmark Real Estate Data & Estate-Agent Leads

#### Scrape **boliga.dk** Danish property listings — price, address, zip, m², rooms, build year, energy class, m²-price **and the estate agent** behind every listing

<p>
<img src="https://img.shields.io/badge/✓_NO_LOGIN-no_API_key-2ea44f?style=for-the-badge&labelColor=0b3d2e"/>
<img src="https://img.shields.io/badge/🇩🇰_BOLIGA.DK-clean_JSON_API-c8102e?style=for-the-badge&labelColor=7a0a1c"/>
<img src="https://img.shields.io/badge/🏠_ALL_OF-Denmark-1f6feb?style=for-the-badge&labelColor=0b2e6b"/>
</p>
<p>
<img src="https://img.shields.io/badge/Price-DKK_+_m²--price-008060?style=flat-square"/>
<img src="https://img.shields.io/badge/Agent_leads-name_+_reg_id-e91e63?style=flat-square"/>
<img src="https://img.shields.io/badge/Energy_class-A--G-4caf50?style=flat-square"/>
<img src="https://img.shields.io/badge/Geo-lat_+_lng-9c27b0?style=flat-square"/>
<img src="https://img.shields.io/badge/Export-JSON·CSV·Excel·API-f59e0b?style=flat-square"/>
</p>

<br/>

**The fastest [boliga.dk scraper](https://www.boliga.dk) to turn any Danish property search into a clean dataset — no login, no API key.** 🏠 Asking price &amp; m²-price (DKK) · 📍 address, city &amp; zip · 📐 living &amp; lot size in m² · 🛏️ rooms · 🏗️ build year · ⚡ energy class · 🧑‍💼 the **estate agent** (name + reg id) behind every listing.

</div>

---

### 🚀 What does the Boliga scraper do?

Boliga is the **#1 real-estate portal in Denmark** — virtually every house, apartment, holiday home and plot for sale in the country runs through it. This **Boliga scraper** talks directly to **Boliga's own clean JSON API**, so you pull fully structured **Denmark real estate data** with **no login and no API key**, and it paginates through the whole result set of any search — fast.

In other words, it works as a **Boliga unofficial API**: Boliga has no public, documented API for developers, so this actor gives you the same listing data as machine-readable rows you can pipe into a spreadsheet, database, dashboard or model.

It's **two tools in one**:

> 🏠 a **Danish property dataset** — for market analytics, price tracking, comps, dashboards &amp; ML — and
> 🎯 a **Denmark estate-agent lead engine** — listings carry the **estate agent's name + registration id**, so one run becomes a targeted agent list.

---

### ✨ Features

| | Feature | Description |
|---|---|---|
| 🔎 | **Multi-filter search** | Filter by zip code(s), municipality, property type, price, size, rooms, build year and sort order — or just paste a boliga.dk search URL. |
| 🎯 | **Estate-agent leads** | Every listing carries the agent registration id; most carry the agent display name — build a Denmark estate-agent lead list in one run. |
| 🇩🇰 | **Nationwide coverage** | Scrape a single zip, a kommune, a price band, or all of Denmark in one go. |
| ⚡ | **Direct JSON API** | Reads Boliga's own JSON API and auto-paginates — fast, lightweight, datacenter proxy is enough. |
| 📤 | **Clean export** | One tidy row per listing — export Boliga data to **CSV, Excel, JSON, HTML** or pull via the Apify API & webhooks. |
| 🔓 | **No login, no key** | Scrape Danish real estate without login, account or API key. |

---

### 📊 What data you get

One clean row per property listing. **Verified output fields:**

| Field | Description |
|-------|-------------|
| `id` | Boliga listing id |
| `url` | Canonical boliga.dk listing URL |
| `address` | Full property address |
| `cleanStreet` | Street part of the address, normalized |
| `city` | City / town name |
| `zipCode` | Danish postal (zip) code |
| `municipality` | Municipality (kommune) name |
| `propertyType` | Human-readable property type label (e.g. Villa, Rækkehus, Ejerlejlighed) |
| `propertyTypeCode` | Numeric Boliga property-type code |
| `price` | Asking price in DKK |
| `squaremeterPrice` | Price per m² in DKK |
| `rooms` | Number of rooms |
| `size` | Living area in m² |
| `lotSize` | Plot / lot size in m² |
| `basementSize` | Basement area in m² |
| `floor` | Floor number |
| `buildYear` | Year the property was built |
| `energyClass` | Energy class (A–G) |
| `daysForSale` | Days the listing has been on the market |
| `createdDate` | Date the listing was created |
| `isForeclosure` | Whether the listing is a foreclosure |
| `isActive` | Whether the listing is currently active |
| `agentDisplayName` | Estate-agent display name *(present for a subset of listings)* |
| `agentRegId` | Estate-agent registration id *(present on virtually all listings)* |
| `isPremiumAgent` | Whether the agent is a premium Boliga agent |
| `downPayment` | Down payment in DKK |
| `latitude` | Geo latitude |
| `longitude` | Geo longitude |
| `image` | Main listing photo URL |
| `evaluationPrice` | Public valuation / evaluation price |
| `lastSoldPrice` | Last recorded sale price |
| `lastSoldDate` | Last recorded sale date |
| `scrapedAt` | Timestamp the row was scraped |

> ℹ️ **Agent data note:** `agentRegId` is present on virtually all listings, while `agentDisplayName` is filled for a subset — so use `agentRegId` as the reliable key and treat the name as best-effort enrichment.

---

### ⚙️ How to use

You have two ways to drive the scraper — **paste a search URL** or **use the structured filter fields**. Either way the actor paginates the full result set up to your `maxResults` cap.

| Field | What it does |
|-------|--------------|
| `searchUrl` | Paste any boliga.dk search URL — its filters (zip, price, property type, sort, etc.) are parsed and applied. Leave empty to use the fields below. |
| `zipCodes` | Danish zip code(s): single (`2100`), comma-separated (`2100,2200`), or a range (`1050-1499`). Empty = all of Denmark. |
| `municipality` | Boliga municipality (kommune) numeric code, e.g. `101` = København. |
| `propertyType` | Property type code(s), comma-separated. `1`=Villa, `2`=Rækkehus, `3`=Ejerlejlighed (condo), `4`=Fritidshus, `6`=Landejendom, etc. Empty = all types. |
| `sort` | Sort order: `date-d` (newest first, default), `price-a` / `price-d`, `sqmprice-a` / `sqmprice-d`. |
| `extraQueryParams` | Advanced — extra Boliga API filter params appended raw, e.g. `salesDateMin=2024-01-01&energyClass=A`. |
| `maxResults` | Global cap across the search. `0` = no limit (a nationwide search can span tens of thousands of listings). |
| `maxResultsPerSearch` | Extra per-search safety cap. `0` = no extra cap. |
| `useProxy` / `proxyConfiguration` | Apify Proxy. **Datacenter** (the default) is plenty for Boliga's API — no residential needed. |

> Price / size / rooms / build-year **min & max** fields (`priceMin`, `priceMax`, `sizeMin`, `sizeMax`, `roomsMin`, `roomsMax`, `buildYearMin`, `buildYearMax`) are also available for fine-grained filtering.

#### Example 1 — Copenhagen condos by zip

```json
{
  "zipCodes": "1050-1499,2100,2200",
  "propertyType": "3",
  "sort": "sqmprice-d",
  "maxResults": 1000
}
````

#### Example 2 — nationwide newest listings

```json
{
  "sort": "date-d",
  "maxResults": 5000
}
```

#### Example 3 — paste a boliga.dk search URL

```json
{
  "searchUrl": "https://www.boliga.dk/resultat?zipcodeFrom=8000&zipcodeTo=8260&propertyType=1&priceMin=2000000",
  "maxResults": 800
}
```

***

### 📤 Example output

One clean row per listing:

```json
{
  "id": 2089413,
  "url": "https://www.boliga.dk/bolig/2089413",
  "address": "Strandvejen 12, 2. tv, 2100 København Ø",
  "cleanStreet": "Strandvejen 12, 2. tv",
  "city": "København Ø",
  "zipCode": "2100",
  "municipality": "København",
  "propertyType": "Ejerlejlighed",
  "propertyTypeCode": 3,
  "price": 4295000,
  "squaremeterPrice": 56513,
  "rooms": 3,
  "size": 76,
  "lotSize": 0,
  "basementSize": 0,
  "floor": 2,
  "buildYear": 1932,
  "energyClass": "C",
  "daysForSale": 41,
  "createdDate": "2026-04-27T00:00:00",
  "isForeclosure": false,
  "isActive": true,
  "agentDisplayName": "EDC København",
  "agentRegId": 1542,
  "isPremiumAgent": true,
  "downPayment": 215000,
  "latitude": 55.7158,
  "longitude": 12.5849,
  "image": "https://i.boliga.org/dk/itemImages/2089413/1.jpg",
  "evaluationPrice": 4100000,
  "lastSoldPrice": 3250000,
  "lastSoldDate": "2018-06-15T00:00:00",
  "scrapedAt": "2026-06-07T12:00:00.000Z"
}
```

***

### 🎯 Use cases

| | Use case | How |
|---|---|---|
| 📊 | **Denmark real-estate market analysis** | Track inventory, asking prices and days-for-sale across zips, kommuner and property types. |
| 🎯 | **Estate-agent lead generation** | Build outreach lists of Danish estate agents by area, price band or property type using `agentRegId` + `agentDisplayName`. |
| 🧮 | **Price-per-m² research** | Compare `squaremeterPrice` across cities and neighbourhoods to map where Denmark is hot or cooling. |
| 💰 | **Investment screening** | Filter foreclosures, low days-for-sale, build year and energy class to surface deals and value plays. |
| 🗂️ | **Portals, dashboards & ML** | Power a Danish property feed, a valuation model (with `evaluationPrice` / `lastSoldPrice`) or a BI dashboard from a scheduled run. |

***

### 🤖 Automate it

Put it on an **Apify Schedule** → a fresh Boliga listings feed every morning, straight to the **Apify API, a webhook, Google Sheet, S3** or your warehouse. Track new listings, price drops and foreclosures across the Danish market on autopilot.

***

### ❓ FAQ

#### Is there a Boliga API?

Boliga has no public, documented developer API. This actor works as a **Boliga unofficial API** — it reads Boliga's own JSON listing data and returns clean, machine-readable rows with no API key, so you get the same data you'd want from an official API without one.

#### Can I scrape boliga.dk without login?

Yes. The scraper reads public boliga.dk listing data **without any login or account**, paginating the full result set of your search through Apify Proxy. No cookies, no token.

#### How do I export Boliga data to Excel / CSV / JSON?

Run the actor on any search (filters or pasted URL), then download the results from the **Output** tab as **CSV, Excel, JSON or HTML** — or pull them straight from the Apify API. Every property and estate-agent field is included, so exporting **Boliga data to CSV or JSON** is a one-click step.

#### Is scraping boliga.dk legal?

The actor collects **publicly available listing data** only. Scraping public data is widely accepted, but you are responsible for complying with Boliga's Terms of Service, applicable Danish/EU regulations, and — especially — how you store and use any **estate-agent details** (e.g. GDPR for personal data).

#### How many listings can I scrape?

As many as your search returns — a single zip is a few hundred, while a **nationwide search can span tens of thousands** of listings. The actor auto-paginates until your `maxResults` cap is hit; set `maxResults` to `0` for no limit.

#### Why is datacenter proxy enough for Boliga?

Boliga exposes a clean JSON API rather than a heavily anti-bot HTML site, so **datacenter proxy (the default) is plenty** — no need for residential proxies, which keeps your runs cheap and fast.

***

<div align="center">

**Boliga Scraper · Boliga.dk Scraper · Boliga API · Boliga Unofficial API · Denmark Real Estate Data · Danish Property Scraper · Denmark Property Data Export · Denmark Estate-Agent Leads · Scrape Danish Real Estate Without Login · Export Boliga Data to CSV / Excel / JSON**

<sub>⚖️ Collects publicly available real-estate listing data only. You are responsible for compliance with Boliga.dk's Terms and applicable laws (including GDPR for any personal / agent data).</sub>

</div>

### 📝 Changelog

#### 2026-06-07

- Docs: comprehensive SEO rewrite — added Boliga unofficial API coverage, full output-field reference, example inputs/output, use cases and FAQ for exporting Boliga data to CSV/Excel/JSON and scraping boliga.dk without login.

# Actor input Schema

## `searchUrl` (type: `string`):

Paste a Boliga.dk search URL — its filters (zip, price, property type, etc.) are parsed and applied. Set your filters on boliga.dk, copy the address-bar URL, paste it here. Leave empty to use the structured filter fields below (or a nationwide recent-listings search).

## `zipCodes` (type: `string`):

Danish zip code(s) to restrict to. Single (e.g. 2100), comma-separated (2100,2200), or a range (1050-1499). Leave empty for all of Denmark.

## `municipality` (type: `string`):

Boliga municipality (kommune) numeric code, e.g. 101 = København. Optional.

## `propertyType` (type: `string`):

Property type code(s), comma-separated. 1=Villa, 2=Rækkehus, 3=Ejerlejlighed (condo), 4=Fritidshus, 5=Andelsbolig, 6=Landejendom, 7=Helårsgrund, 8=Villalejlighed, 10=Houseboat, 12=Fritidsgrund. Leave empty for all types.

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

Minimum asking price in DKK.

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

Maximum asking price in DKK.

## `sizeMin` (type: `integer`):

Minimum living area in m².

## `sizeMax` (type: `integer`):

Maximum living area in m².

## `roomsMin` (type: `integer`):

Minimum number of rooms.

## `roomsMax` (type: `integer`):

Maximum number of rooms.

## `buildYearMin` (type: `integer`):

Earliest construction year.

## `buildYearMax` (type: `integer`):

Latest construction year.

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

Boliga sort order. date-d = newest first (default), price-a / price-d = price asc/desc, sqmprice-a / sqmprice-d = square-meter price.

## `extraQueryParams` (type: `string`):

Any extra Boliga API filter params, raw, e.g. salesDateMin=2024-01-01\&energyClass=A. Appended as-is to the API request.

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

Stop after this many listings. 0 = no limit (a nationwide search can span tens of thousands of listings).

## `maxResultsPerSearch` (type: `integer`):

Additional safety cap for a single search. 0 = no extra cap.

## `useProxy` (type: `boolean`):

Route requests through Apify Proxy. Datacenter (the default) is plenty for Boliga's API — no need for residential.

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

Apify Proxy settings. Datacenter is the default and works fine for Boliga.

## Actor input object example

```json
{
  "sort": "date-d",
  "maxResults": 200,
  "maxResultsPerSearch": 0,
  "useProxy": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `id` (type: `string`):

Boliga listing ID

## `url` (type: `string`):

Public boliga.dk listing URL

## `address` (type: `string`):

Street address

## `cleanStreet` (type: `string`):

Normalized street name

## `city` (type: `string`):

City

## `zipCode` (type: `string`):

Danish zip code

## `municipality` (type: `string`):

Municipality (kommune) code

## `propertyType` (type: `string`):

Human-readable property type

## `propertyTypeCode` (type: `string`):

Raw numeric property type code

## `secondaryPropertyType` (type: `string`):

Secondary property type

## `price` (type: `string`):

Asking price in DKK

## `squaremeterPrice` (type: `string`):

Square-meter price in DKK

## `rooms` (type: `string`):

Number of rooms

## `size` (type: `string`):

Living area in m²

## `lotSize` (type: `string`):

Lot / plot size in m²

## `basementSize` (type: `string`):

Basement size in m²

## `floor` (type: `string`):

Floor number

## `buildYear` (type: `string`):

Year built

## `energyClass` (type: `string`):

Energy class (A-G)

## `daysForSale` (type: `string`):

Days on market

## `createdDate` (type: `string`):

Listing creation date

## `isForeclosure` (type: `string`):

Whether the listing is a foreclosure

## `isActive` (type: `string`):

Whether the listing is active

## `agentDisplayName` (type: `string`):

Estate agent / agency name (when present)

## `agentRegId` (type: `string`):

Estate agent registration ID

## `isPremiumAgent` (type: `string`):

Whether the listing agent is a premium agent

## `downPayment` (type: `string`):

Down payment in DKK

## `net` (type: `string`):

Net monthly cost

## `exp` (type: `string`):

Monthly expenses

## `evaluationPrice` (type: `string`):

Boliga evaluation price

## `lastSoldPrice` (type: `string`):

Last sold price

## `lastSoldDate` (type: `string`):

Last sold date

## `latitude` (type: `string`):

Latitude

## `longitude` (type: `string`):

Longitude

## `area` (type: `string`):

Boliga area code

## `businessArea` (type: `string`):

Business area

## `image` (type: `string`):

Main image URL

## `imagesCount` (type: `string`):

Number of images

## `guid` (type: `string`):

Listing GUID

## `scrapedAt` (type: `string`):

Scraped at

# 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 = {
    "searchUrl": "",
    "zipCodes": "",
    "municipality": "",
    "propertyType": "",
    "extraQueryParams": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/boliga-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 = {
    "searchUrl": "",
    "zipCodes": "",
    "municipality": "",
    "propertyType": "",
    "extraQueryParams": "",
}

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

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

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

```

## CLI example

```bash
echo '{
  "searchUrl": "",
  "zipCodes": "",
  "municipality": "",
  "propertyType": "",
  "extraQueryParams": ""
}' |
apify call logiover/boliga-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=logiover/boliga-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Boliga.dk Scraper — Denmark Real Estate & Agent Leads",
        "description": "Scrape Boliga.dk Danish real estate via its clean JSON API: price, address, zip, m², rooms, build year, energy class, square-meter price and the estate agent (name + reg id) behind every listing. No login, no API key. Great for Denmark property data & estate-agent leads.",
        "version": "1.0",
        "x-build-id": "qmIBWWGSkeg7fhOPr"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/logiover~boliga-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-logiover-boliga-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/logiover~boliga-scraper/runs": {
            "post": {
                "operationId": "runs-sync-logiover-boliga-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/logiover~boliga-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-logiover-boliga-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchUrl": {
                        "title": "Boliga.dk search URL (optional)",
                        "type": "string",
                        "description": "Paste a Boliga.dk search URL — its filters (zip, price, property type, etc.) are parsed and applied. Set your filters on boliga.dk, copy the address-bar URL, paste it here. Leave empty to use the structured filter fields below (or a nationwide recent-listings search)."
                    },
                    "zipCodes": {
                        "title": "Zip codes",
                        "type": "string",
                        "description": "Danish zip code(s) to restrict to. Single (e.g. 2100), comma-separated (2100,2200), or a range (1050-1499). Leave empty for all of Denmark."
                    },
                    "municipality": {
                        "title": "Municipality code",
                        "type": "string",
                        "description": "Boliga municipality (kommune) numeric code, e.g. 101 = København. Optional."
                    },
                    "propertyType": {
                        "title": "Property type code(s)",
                        "type": "string",
                        "description": "Property type code(s), comma-separated. 1=Villa, 2=Rækkehus, 3=Ejerlejlighed (condo), 4=Fritidshus, 5=Andelsbolig, 6=Landejendom, 7=Helårsgrund, 8=Villalejlighed, 10=Houseboat, 12=Fritidsgrund. Leave empty for all types."
                    },
                    "priceMin": {
                        "title": "Min price (DKK)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum asking price in DKK."
                    },
                    "priceMax": {
                        "title": "Max price (DKK)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum asking price in DKK."
                    },
                    "sizeMin": {
                        "title": "Min living size (m²)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum living area in m²."
                    },
                    "sizeMax": {
                        "title": "Max living size (m²)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum living area in m²."
                    },
                    "roomsMin": {
                        "title": "Min rooms",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum number of rooms."
                    },
                    "roomsMax": {
                        "title": "Max rooms",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of rooms."
                    },
                    "buildYearMin": {
                        "title": "Min build year",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Earliest construction year."
                    },
                    "buildYearMax": {
                        "title": "Max build year",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Latest construction year."
                    },
                    "sort": {
                        "title": "Sort",
                        "enum": [
                            "date-d",
                            "date-a",
                            "price-a",
                            "price-d",
                            "sqmprice-a",
                            "sqmprice-d"
                        ],
                        "type": "string",
                        "description": "Boliga sort order. date-d = newest first (default), price-a / price-d = price asc/desc, sqmprice-a / sqmprice-d = square-meter price.",
                        "default": "date-d"
                    },
                    "extraQueryParams": {
                        "title": "Extra query params (advanced)",
                        "type": "string",
                        "description": "Any extra Boliga API filter params, raw, e.g. salesDateMin=2024-01-01&energyClass=A. Appended as-is to the API request."
                    },
                    "maxResults": {
                        "title": "Max results (total)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Stop after this many listings. 0 = no limit (a nationwide search can span tens of thousands of listings).",
                        "default": 200
                    },
                    "maxResultsPerSearch": {
                        "title": "Max results per search",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Additional safety cap for a single search. 0 = no extra cap.",
                        "default": 0
                    },
                    "useProxy": {
                        "title": "Use Apify Proxy",
                        "type": "boolean",
                        "description": "Route requests through Apify Proxy. Datacenter (the default) is plenty for Boliga's API — no need for residential.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy settings. Datacenter is the default and works fine for Boliga.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
