# BoligPortal.dk Scraper - Danish Rental Property Listings (`studio-amba/boligportal-dk-scraper`) Actor

Scrape rental property listings from BoligPortal.dk, Denmark's largest rental portal. Search by location, property type, and rent range. No login required.

- **URL**: https://apify.com/studio-amba/boligportal-dk-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

### BoligPortal.dk Scraper

Scrape rental property listings from **BoligPortal.dk** — Denmark's largest rental listings portal. Extract structured data including monthly rent, deposit, address, room count, size, energy rating, and photos for apartments, houses, rooms, and townhouses across Denmark. No login or cookies required.

### How to scrape Boligportal.dk data

Extracting rental listings from BoligPortal.dk manually means clicking through dozens of pages one city at a time. This actor automates that and returns clean, structured JSON data ready for analysis.

1. Go to the [BoligPortal.dk Scraper](https://apify.com/studio-amba/boligportal-dk-scraper) page on Apify Store.
2. Click **Try for free** to open the actor in Apify Console.
3. Enter your search criteria — location, property type, rent range, or leave the defaults for Copenhagen (København).
4. Click **Start** and wait for the run to complete.
5. Download your data in JSON, CSV, Excel, or connect via API.

### Features

- Search by **location** (any Danish city or area, e.g. København, Aarhus, Odense, Aalborg)
- Filter by **property type**: apartment, house, room, townhouse
- Filter by **monthly rent range** (min/max in DKK)
- Returns **25+ fields** per listing including rent, deposit, extra costs, address, coordinates, size, rooms, floor, availability date, and amenity flags (pet-friendly, furnished, social housing)
- Automatic **pagination** — scrape hundreds or thousands of listings in one run
- **No login required** — works without cookies or authentication
- **No browser needed** — the actor reads BoligPortal's own server-rendered JSON payload directly, which keeps runs fast and cheap

### Input options

| Field | Type | Description | Default |
|-------|------|-------------|---------|
| `location` | String | Danish city or area to search (e.g. "København", "Aarhus") | København |
| `searchQuery` | String | Alias for `location` (kept for consistency with other actors) | — |
| `propertyType` | Enum | Property type filter | All types |
| `minRent` | Integer | Minimum monthly rent in DKK | — |
| `maxRent` | Integer | Maximum monthly rent in DKK | — |
| `maxResults` | Integer | Maximum listings to return | 50 |
| `proxyConfiguration` | Object | Proxy settings | Apify default proxy |

#### Property types

| Value | Description |
|-------|-------------|
| `all` | All property types |
| `apartment` | Apartment (lejlighed) |
| `house` | House (hus) |
| `room` | Room (værelse) |
| `townhouse` | Townhouse (rækkehus) |

### Output fields

Each listing contains these fields:

| Field | Type | Description |
|-------|------|-------------|
| `title` | String | Listing title |
| `price` | Number | Monthly rent in DKK |
| `currency` | String | Currency code (DKK) |
| `listingType` | String | Always "rent" — BoligPortal.dk is rental-only |
| `propertyType` | String | apartment, house, room, or townhouse |
| `address` | String | Street address |
| `city` | String | City name |
| `postalCode` | String | Danish 4-digit postal code |
| `latitude` / `longitude` | Number | Coordinates |
| `rooms` | Number | Number of rooms |
| `surface` | Number | Living area in m2 |
| `epcScore` | String | Energy rating (A-G), when available |
| `pricePerSqm` | Number | Rent per m2 (DKK) |
| `monthlyRentExtraCosts` | Number | Monthly additional costs (utilities/aconto) |
| `deposit` | Number | Required deposit in DKK |
| `availableFrom` | String | Date the property becomes available |
| `floor` | Number | Floor number |
| `petFriendly` | Boolean | Whether pets are allowed |
| `furnished` | Boolean | Whether the property is furnished |
| `socialHousing` | Boolean | Whether the listing is social/subsidized housing |
| `imageUrl` / `imageUrls` | String / Array | Listing photo URLs |
| `url` | String | Full BoligPortal.dk listing URL |
| `scrapedAt` | String | ISO timestamp |

### Example output

```json
{
    "title": "6 værelses lejlighed på Islands Brygge i København S udlejes",
    "price": 35000,
    "currency": "DKK",
    "listingType": "rent",
    "propertyType": "apartment",
    "address": "Islands Brygge 118, 2300, København",
    "city": "København",
    "postalCode": "2300",
    "latitude": 55.655,
    "longitude": 12.564,
    "rooms": 6,
    "surface": 176,
    "epcScore": null,
    "pricePerSqm": 199,
    "monthlyRentExtraCosts": 1000,
    "deposit": 105000,
    "availableFrom": "2026-11-15",
    "floor": 2,
    "petFriendly": false,
    "furnished": false,
    "socialHousing": false,
    "imageUrl": "https://image-lambda.boligportal.dk/d2d3eb960e902b13d62f77f480e63cee",
    "url": "https://www.boligportal.dk/lejligheder/k%C3%B8benhavn/176m2-6-vaer-id-5495811",
    "scrapedAt": "2026-08-20T09:08:57.051Z"
}
```

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

### Cost estimation

This actor makes plain HTTP requests (no browser) — no Playwright, no residential proxy required — which keeps runs cheap and fast.

| Listings | Estimated cost | Estimated time |
|----------|---------------|----------------|
| 100 | ~$0.02 | 30-60 sec |
| 500 | ~$0.10 | 2-4 min |
| 1,000 | ~$0.20 | 4-8 min |
| 5,000 | ~$1.00 | 20-30 min |

Costs include compute units and Apify Proxy datacenter traffic. Actual costs may vary with rent-range/property-type filter narrowness (a narrow filter walks more pages per listing returned). Pricing is per result (per scraped listing) plus a small per-run start fee — see the Pricing tab on the actor page for the exact per-item rate.

**Note:** usage cost only settles once a run reports **SUCCEEDED**. Reading the dataset while a run is still in progress will undercount the final cost — check back after the run finishes before relying on the number.

### Tips for best results

- **Use Danish city names** for the location filter (e.g. "København" not "Copenhagen", "Aarhus" not "Arhus")
- **Property type is filtered client-side** — a narrow property type (e.g. only "room") combined with a high `maxResults` may take longer, since the underlying site does not support server-side type filtering
- **Rent range filters** (`minRent`/`maxRent`) do narrow server-side and speed up targeted runs
- Leave `location` empty to search all of Denmark

### Related scrapers

- [Boliga Scraper](https://apify.com/studio-amba/boliga-scraper) — Danish real estate for **sale** (BoligPortal.dk covers rentals only)
- [DBA Scraper](https://apify.com/studio-amba/dba-scraper) — Denmark's largest classifieds site, including housing
- [Hemnet Scraper](https://apify.com/studio-amba/hemnet-scraper) — Swedish real estate listings
- [Finn.no Scraper](https://apify.com/studio-amba/finn-no-scraper) — Norwegian classifieds and real estate
- [Oikotie Scraper](https://apify.com/studio-amba/oikotie-scraper) — Finnish real estate listings

### Integrations

Connect BoligPortal.dk Scraper to other tools and workflows:

- **API access** — Trigger runs programmatically via REST API
- **Webhooks** — Get notified when a run completes
- **Scheduling** — Set up recurring scrapes (daily, weekly)
- **Zapier / Make** — Connect to 3,000+ apps
- **Google Sheets** — Export results directly to spreadsheets

### FAQ

**Is it legal to scrape BoligPortal.dk?**
This actor extracts publicly available data from BoligPortal.dk. Users are responsible for ensuring their use complies with applicable laws, BoligPortal's Terms of Service, and data protection regulations (GDPR).

**How fresh is the data?**
Each run fetches live data directly from BoligPortal.dk. Results reflect the current state of listings at the time of scraping.

**Does this actor cover for-sale properties too?**
No — BoligPortal.dk is a rental-only portal. For Danish for-sale listings, see the [Boliga Scraper](https://apify.com/studio-amba/boliga-scraper).

**What if the scraper returns no results?**
Check that the location spelling matches a real Danish city/area and that your rent range isn't too narrow. If the site's structure changed, open an issue and we'll investigate.

### Support

Found a bug or need a custom feature? Open an issue in the [Issues tab](https://apify.com/studio-amba/boligportal-dk-scraper/issues) and we will respond within 24 hours. For custom scraping solutions, reach out through the same channel.

# Actor input Schema

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

Danish city or area to search (e.g. 'København', 'Aarhus', 'Odense', 'Aalborg'). Leave empty to search all of Denmark.

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

Alias for Location — accepted for consistency with other actors. If both are set, Location wins.

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

Filter by property type.

## `minRent` (type: `integer`):

Minimum monthly rent in DKK.

## `maxRent` (type: `integer`):

Maximum monthly rent in DKK.

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

Maximum number of listings to return.

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

Proxy settings. Default Apify proxy (no group) works fine — BoligPortal.dk does not challenge plain HTTP requests.

## Actor input object example

```json
{
  "location": "København",
  "propertyType": "all",
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "location": "København",
    "maxResults": 5,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/boligportal-dk-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 = {
    "location": "København",
    "maxResults": 5,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/boligportal-dk-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 '{
  "location": "København",
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call studio-amba/boligportal-dk-scraper --silent --output-dataset

```

## MCP server setup

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