# Boligsiden Scraper - Denmark Real Estate Data (`benthepythondev/boligsiden-scraper`) Actor

Scrape Boligsiden.dk (Denmark's #1 property portal): price, price per m², size, rooms, year built, energy label, coordinates, photos AND the estate agent's name, e-mail and phone. Homes and apartments for sale or rent by type, zip code or municipality. Reliable JSON API, no browser.

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

## Pricing

from $4.00 / 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 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

## 🇩🇰 Boligsiden Scraper - Denmark Real Estate Data

Scrape **Boligsiden.dk**, Denmark's #1 real-estate portal, and turn any search into a clean, structured dataset of properties for sale or rent. For every listing you get the **price, price per m², living area, number of rooms, year built, energy label, GPS coordinates, photos** and — crucially for lead generation — the **estate agent's name, e-mail and phone number**. Paste a Boligsiden search URL, choose how many results you want, and go. Export to JSON/CSV/Excel, run on a schedule, call via API, or connect to Make, Zapier or n8n.

### 🔎 What is the Boligsiden Scraper?

Boligsiden.dk aggregates practically every home on the Danish market from all the big estate-agent chains (EDC, home, Danbolig, Nybolig, RealMæglerne and more). This actor reads Boligsiden's own public data feed, so the results are fast, complete and always up to date — no browser, no CAPTCHAs, no missing fields.

Give it a search URL such as *villas for sale in Aarhus* or *apartments for rent in Copenhagen* and it returns one tidy row per property, ready for analysis, a CRM, a price model or an outreach list.

#### What data does it extract?

- **Full address** — street, house number, zip code, city, municipality, region and GPS latitude/longitude
- **Price** — cash price, price per m², monthly owner expense and any recent price change
- **Property facts** — type, living area, weighted area, lot size, rooms, bathrooms, toilets, floors, year built and energy label
- **Estate agent (lead-gen)** — agency name, contact e-mail, phone number, CVR company number and office address
- **Media & content** — listing photos, floor-plan image, marketing title and full description
- **Listing meta** — days on market, next open house, status, Boligsiden URL and the agent's own listing URL

### ⬇️ Input

| Field | Type | Description |
|-------|------|-------------|
| `searchUrls` | array | One or more Boligsiden search-results URLs. Copy them from your browser after filtering on boligsiden.dk (for sale `/tilsalg` or rent `/til-leje`, by type, zip code or municipality). Leave empty for the newest homes for sale across all of Denmark. |
| `maxResults` | integer | Maximum number of listings to return per search URL (default 40). |

#### Example input

```json
{
  "searchUrls": [
    "https://www.boligsiden.dk/tilsalg/villa/aarhus-c-8000",
    "https://www.boligsiden.dk/tilsalg/ejerlejlighed"
  ],
  "maxResults": 100
}
```

### ⬆️ Output

Each dataset item looks like this (real fields the actor emits):

```json
{
  "id": "a2fb47e3-6ff0-4d86-b5b6-3dacc8c0d618",
  "url": "https://www.boligsiden.dk/bolig/nordre-frihavnsgade-15-2-tv-2100-koebenhavn-oe-01015044__15__2__tv",
  "realtor_case_url": "https://home.dk/sag/6200002833",
  "property_type": "condo",
  "status": "open",
  "price": 6995000,
  "currency": "DKK",
  "price_per_m2": 78596,
  "price_change_percentage": 0,
  "monthly_expense": 5573,
  "area_m2": 89,
  "weighted_area_m2": 91,
  "lot_size": null,
  "rooms": 4,
  "bathrooms": 1,
  "toilets": 1,
  "floors": 2,
  "year_built": 1902,
  "energy_label": "c",
  "has_balcony": true,
  "has_elevator": false,
  "has_terrace": false,
  "days_on_market": 12,
  "address": "Nordre Frihavnsgade 15, 2100 København Ø",
  "road": "Nordre Frihavnsgade",
  "house_number": "15",
  "zip": 2100,
  "city": "København Ø",
  "municipality": "København",
  "province": "Byen København",
  "latitude": 55.700718,
  "longitude": 12.579353,
  "description_title": "Lys 4-værelses med altan",
  "agent_name": "EDC Poul Erik Bech, Østerbro og Nordhavn",
  "agency": "EDC Poul Erik Bech, Østerbro og Nordhavn",
  "agent_email": "531@edc.dk",
  "agent_phone": "35550531",
  "agent_cvr": "12345678",
  "agent_address": "Østerbrogade 100",
  "agent_zip": 2100,
  "agent_city": "København Ø",
  "image": "https://images.boligsiden.dk/images/case/.../1440x960/....webp",
  "num_images": 5,
  "floor_plan": "https://billeder.edc.dk/.../floorplan.jpg",
  "search": "https://www.boligsiden.dk/tilsalg/ejerlejlighed"
}
```

### 💡 Use cases

- 🏠 **Real-estate lead generation** — build targeted lists of estate agents (name, e-mail, phone) by area or property type for outreach and partnerships.
- 📊 **Market analysis & valuation** — track asking prices, price per m², energy labels and days-on-market across Danish municipalities to power AVMs and reports.
- 🔔 **Deal & price-drop monitoring** — schedule the actor to spot new listings and price changes the moment they hit the market.
- 🗺️ **Data enrichment & mapping** — feed clean address, coordinates and property attributes into your CRM, GIS or investment dashboard.

### ❓ FAQ

**Which Boligsiden searches are supported?**
Any search-results URL from boligsiden.dk — homes for sale (`/tilsalg`) or rent (`/til-leje`), filtered by property type, zip code or municipality. Just paste the URL you see in your browser.

**How do I scrape a specific city or area?**
Filter on boligsiden.dk until you see the listings you want, then copy the URL from the address bar into `searchUrls`. City/area URLs like `.../villa/aarhus-c-8000` and municipality searches are handled automatically.

**Does it include the estate agent's contact details?**
Yes. Every listing includes the agency name, and where Boligsiden publishes it, the office e-mail, phone number, CVR number and address — ideal for B2B lead generation.

**How many listings can I get?**
As many as the search contains — set `maxResults`. The actor paginates through the whole result set (thousands of listings) for you.

**How fresh is the data?**
It is pulled live from Boligsiden on every run, so it reflects the current market. Schedule the actor to keep a dataset continuously up to date.

**In what formats can I export?**
JSON, CSV, Excel, XML or HTML from the Apify console or API, and you can push straight to Make, Zapier, n8n, Google Sheets or your own database.

**Do I need proxies or an account?**
No. The actor works out of the box; it can optionally route through Apify's Danish residential proxies for extra resilience, but that is not required.

**Is scraping Boligsiden legal?**
The actor only collects publicly available listing information. You are responsible for using the data in line with Boligsiden's terms, the GDPR and any applicable marketing laws (e.g. consent rules under the ePrivacy/CAN-SPAM style regulations) — especially when contacting agents. Do not use personal data for unlawful purposes.

### 🔗 You might also like

- 🇸🇪 **Hemnet Scraper** — Sweden's #1 property portal
- 🇳🇴 **Finn.no Real Estate Scraper** — Norway's biggest marketplace
- 🇳🇱 **Pararius Scraper** — Netherlands rental listings
- 🇳🇱 **Funda Scraper** — Netherlands #1 property portal
- 🇩🇪 **Kleinanzeigen Immobilien Scraper** — German property listings
- 🏘️ **Zillow, Rightmove, Idealista & Immobiliare scrapers** — more countries in the same lead-gen format

**Keywords:** boligsiden scraper, boligsiden.dk, denmark real estate scraper, danish property data, boliger til salg, ejendomsmægler leads, denmark housing api, scrape boligsiden, real estate lead generation denmark, property listings denmark, danish estate agent emails, boligsiden api, apartments for sale denmark, villa til salg, denmark rental listings, copenhagen real estate data, aarhus property scraper, energy label denmark, price per m2 denmark, real estate crm data.

# Actor input Schema

## `searchUrls` (type: `array`):

Paste one or more Boligsiden search-results URLs (copy them from your browser after filtering on boligsiden.dk). Works for homes for sale (/tilsalg) or rent (/til-leje), by property type (villa, ejerlejlighed, raekkehus, fritidsbolig, …), zip code or municipality. Leave empty for the newest homes for sale across all of Denmark.

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

Maximum number of listings to return per search URL.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.boligsiden.dk/tilsalg"
  ],
  "maxResults": 10
}
```

# 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 = {
    "searchUrls": [
        "https://www.boligsiden.dk/tilsalg"
    ],
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("benthepythondev/boligsiden-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 = {
    "searchUrls": ["https://www.boligsiden.dk/tilsalg"],
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("benthepythondev/boligsiden-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 '{
  "searchUrls": [
    "https://www.boligsiden.dk/tilsalg"
  ],
  "maxResults": 10
}' |
apify call benthepythondev/boligsiden-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/dfHNPm7ZmwyDJSwjq/builds/UtFz9BKAf13DZX0XU/openapi.json
