Pricing
from $1.50 / 1,000 results
Boliga.dk Scraper
Scrape real estate listings from Boliga.dk β Denmark's leading property portal with 30,000+ active listings. Returns price (DKK), area (mΒ²), rooms, municipality, GPS coordinates, property type, energy rating and listing date for sale listings.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Actor stats
1
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Extract structured property listings from Boliga.dk β Denmark's leading real estate portal. Filter by property type, municipality, and price range. No API key or account required.
Why this scraper?
π Complete listing data in one run
Get every key field per listing β address, price, size, rooms, build year, energy class, agent name, publish date, and coordinates β without needing a Boliga account or API contract.
πΊοΈ Flexible geographic targeting
Filter by Danish municipality code (e.g. 101 for Copenhagen, 751 for Aarhus, 461 for Odense) or paste a Boliga search URL directly as a startUrl to replicate any filter combination from the site.
π·οΈ Nine property types supported
Villa, apartment, townhouse, bungalow, farm, holiday home, allotment house, co-housing, and cooperative β select one or leave empty to scrape all types.
πΆ Price range filtering
Set minimum and/or maximum asking price in DKK to target a specific segment of the market.
π Optional detail enrichment
Enable fetchDetails to add premium image sets, estate agent homepage URLs, and the direct agency listing page per property.
π Max listing age filter
Use daysOld to restrict results to recently published listings β ideal for daily monitoring runs or alerting pipelines.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
transaction | String | sale | Transaction type. Currently only sale is supported. |
propertyType | String | (all) | Filter by property type: villa, apartment, townhouse, bungalow, farm, holiday, allotment, cohousing, cooperative. Leave empty for all types. |
municipalityId | Integer | (none) | Danish municipality code. E.g. 101 = Copenhagen, 751 = Aarhus, 461 = Odense, 147 = Frederiksberg, 630 = Vejle. |
minPrice | Integer | (none) | Minimum asking price in DKK. |
maxPrice | Integer | (none) | Maximum asking price in DKK. |
daysOld | Integer | (none) | Only return listings published within the last N days. |
fetchDetails | Boolean | false | Fetch the detail page per listing to retrieve premium images, estate URL, and full agent info. Slower and slightly higher cost. |
maxItems | Integer | 100 | Maximum number of listings to return. Boliga's API caps results at 300 per filtered query; use narrower filters (e.g. by municipality or price range) to access larger result sets. |
startUrls | Array | [] | Paste one or more Boliga.dk search result URLs. Filter parameters (municipality, property type, price) are parsed directly from the URL query string and take precedence over individual inputs above. |
Output schema
Always present
| Field | Type | Description |
|---|---|---|
id | String | Boliga internal listing ID. |
url | String | Full URL to the listing page on boliga.dk. |
operationType | String | Always sale in the current version. |
propertyType | String | Human-readable property type label (e.g. Villa, Apartment). |
title | String | Auto-generated title combining property type, rooms, and size (e.g. Villa, 5 rooms, 140 mΒ²). |
priceText | String | Formatted asking price string in Danish locale (e.g. DKK 3.495.000). |
priceAmount | Integer | Asking price as a plain number in DKK. |
priceCurrency | String | Always DKK. |
squaremeterPrice | Integer|null | Price per mΒ² in DKK. Null if not provided by the API. |
downPayment | Integer|null | Required down payment in DKK. Null if not provided. |
monthlyExpenses | Integer|null | Estimated monthly net expenses in DKK. Null if not available. |
street | String|null | Street address including house number. |
city | String | City name. |
zipCode | String|null | Danish postal code. |
municipality | String|null | Municipality name. |
country | String | Always DK. |
latitude | Float|null | GPS latitude. |
longitude | Float|null | GPS longitude. |
bedrooms | Integer|null | Number of rooms (Boliga does not distinguish rooms from bedrooms). |
bathrooms | null | Not available from Boliga β always null. |
surfaceTotal | Integer|null | Living area in mΒ². |
lotAreaM2 | Integer|null | Lot/land area in mΒ². Present for villas and farms. |
basementM2 | Integer|null | Basement area in mΒ². Null if no basement or not reported. |
surfaceUnit | String | Always mΒ². |
buildYear | Integer|null | Year the property was built. |
energyClass | String|null | Danish energy rating label (AβG). |
floor | Integer|null | Floor number. Relevant for apartments and co-housing. |
features | Array | List of notable features derived from available fields (e.g. ["Energy class B", "Built 1965", "Floor 2"]). |
daysForSale | Integer|null | Number of days the listing has been active on boliga.dk. |
images | Array | List of image URLs. At least one thumbnail is always present. |
agencyName | String|null | Name of the estate agency handling the listing. |
agencyUrl | null | Not available without fetchDetails. |
estateUrl | null | Not available without fetchDetails. |
publishDate | String|null | Publish date in YYYY-MM-DD format. |
publishDateISO | String|null | Full ISO 8601 publish timestamp. |
source | String | Always boliga.dk. |
scrapedAt | String | ISO 8601 timestamp of when the item was scraped. |
contentHash | String | 16-character MD5 hash of id + priceAmount + surfaceTotal. Use for change detection across runs. |
With fetchDetails: true
| Field | Type | Description |
|---|---|---|
images | Array | Replaced with the full premium image set from the detail page (higher resolution, more images). |
agencyUrl | String|null | Estate agency homepage URL. |
estateUrl | String|null | Direct URL to the listing on the agency's own website. |
Example output record
{"id":"4217893","url":"https://www.boliga.dk/bolig/4217893/roskildevej-45","operationType":"sale","propertyType":"Villa","title":"Villa, 5 rooms, 147 mΒ²","priceText":"DKK 3.495.000","priceAmount":3495000,"priceCurrency":"DKK","squaremeterPrice":23776,"downPayment":349500,"monthlyExpenses":9840,"street":"Roskildevej 45","city":"Roskilde","zipCode":"4000","municipality":"Roskilde","country":"DK","latitude":55.6423,"longitude":12.0852,"bedrooms":5,"bathrooms":null,"surfaceTotal":147,"lotAreaM2":620,"basementM2":null,"surfaceUnit":"mΒ²","buildYear":1967,"energyClass":"C","floor":null,"features":["Energy class C","Built 1967"],"daysForSale":12,"images":["https://i.boliga.org/dk/800x/4217/4217893.jpg"],"agencyName":"EDC Roskilde","agencyUrl":null,"estateUrl":null,"publishDate":"2026-05-27","publishDateISO":"2026-05-27T08:14:00.000Z","source":"boliga.dk","scrapedAt":"2026-06-07T10:22:41.153Z","contentHash":"a3f9c12b8d1e4f7a"}
Examples
Apartments in Copenhagen under DKK 3,000,000:
{"propertyType":"apartment","municipalityId":101,"maxPrice":3000000,"maxItems":200}
Villas for sale in Aarhus β recent listings only:
{"propertyType":"villa","municipalityId":751,"daysOld":14,"maxItems":100}
Using a Boliga search URL directly (startUrls mode):
{"startUrls":[{"url":"https://www.boliga.dk/resultat?salesTypeId=1&propertyType=2&municipality=147&priceMax=2500000"}],"maxItems":50}
Daily feed β new listings across all property types in Odense:
{"municipalityId":461,"daysOld":1,"maxItems":500}
π° Pricing
$1.50 per 1,000 results β you only pay for successfully retrieved listings. Failed retries are never charged.
| Results | Cost |
|---|---|
| 100 | ~$0.15 |
| 1,000 | ~$1.50 |
| 10,000 | ~$15.00 |
| 100,000 | ~$150.00 |
Flat-rate data subscription services typically charge $29β$149/month regardless of usage.
Use the Max items cap in the input to control your spend exactly.
Performance
| Run size | Approx. time | Memory |
|---|---|---|
| 100 listings | ~30 seconds | 256 MB |
| 500 listings | ~2β3 minutes | 256 MB |
| 1,000 listings (1 query) | ~4β5 minutes | 256 MB |
| 1,000 listings + fetchDetails | ~10β15 minutes | 256 MB |
Boliga's API caps each filtered query at approximately 300 results. For larger extractions, combine multiple queries (different municipalities or property types) using startUrls.
Known limitations
- 300-result cap per query: Boliga's API returns a maximum of ~300 listings per unique filter combination. To extract more, split by municipality, property type, or price range and pass multiple search URLs via
startUrls. - Sale only: The
transactionfield currently supportssaleonly. Rental listings are not available via the same API endpoint. - No bathroom count: Boliga does not expose bathroom counts in its API response. The
bathroomsfield is always null. - Municipality codes required: Geographic filtering requires the numeric municipality code, not a free-text city name. A full list of Danish municipality codes is available on the Danish Government's municipality page.
daysOldfilter is client-side: The scraper fetches pages in reverse-chronological order and stops whendaysForSaleexceeds the limit. On very active markets, this is efficient; on quiet ones, a few extra pages may be fetched before the cutoff is reached.
Technical details
- Source: boliga.dk β Denmark's largest property portal
- Memory: 256 MB
- Retry: Automatic retry on network errors with exponential backoff, 3 attempts per request, Retry-After header respected
- Proxy: Danish residential proxy β required for Boliga's API (datacenter IPs are blocked)
Need a custom scraper?
Unfenced Group builds Apify actors for any website β for free.
If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results β we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.
Get in touch: www.unfencedgroup.nl
