Boliga Denmark Real Estate Scraper
Pricing
from $0.70 / 1,000 dataset items
Boliga Denmark Real Estate Scraper
Scrape property listings from Boliga.dk (Denmark). Search by zip code, free text, or result URLs. Optionally fetch full listing details including agent contact, BBR building data, sales history, and price analytics.
Pricing
from $0.70 / 1,000 dataset items
Rating
0.0
(0)
Developer
Data Scrapers
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Boliga Scraper creates a structured dataset of property listings collected from Boliga in Denmark. Each dataset item is one home and can include the street, city, zip code, price, rooms, living area, property type, energy class, and listing URL. Query the source with a zip code, a place name, or a Boliga result URL, limit the run with maxItems, and retrieve records through the Apify Dataset API or export them as JSON, CSV, Excel, XML, or another supported format.
Dataset at a glance
| Property | Value |
|---|---|
| Source | boliga.dk |
| Record unit | One property listing |
| Input methods | searchQueries, startUrls, price and size filters |
| Main identifiers | id and url |
| Delivery | Apify Dataset and API |
| Export formats | JSON, CSV, Excel, XML, and other Apify dataset exports |
| Update model | Fresh records per Actor run |
| Pricing | $1.00 per 1,000 listings. Optional details from $2.00 per 1,000. |
Coverage and available records
The Actor searches Boliga by zip code, place name, or a copied result or listing URL. The saved sample is a villa in Hobro, zip 9500.
Supported:
- Zip codes and free-text places
- Property type, price, rooms, size, lot size, year built, days on market, and energy class filters
- Broker, self-sale, and foreclosure exclusions
- A result cap through
maxItems.0means no cap
Not currently collected unless extractDetails is true:
- Agent contact, building records, sales history, and the full photo gallery
- Those extra pages charge
listing-details
Data dictionary
Fields match a saved search result. Prices are Danish kroner.
| Field | Type | Nullable | Description | Example |
|---|---|---|---|---|
id | number | No | Boliga listing id. Best field for deduplication. | 2352957 |
url | string | Yes | Public address URL. | https://www.boliga.dk/adresse/godt-gemt-2-9500-hobro-1451200001 |
street | string | Yes | Street and number. | Godt Gemt 2 |
city | string | Yes | City name. | Hobro |
zipCode | number | Yes | Postal code. | 9500 |
price | number | Yes | Asking price in DKK. | 645000 |
rooms | number | Yes | Room count. | 3 |
size | number | Yes | Living area in square meters. | 127 |
propertyTypeName | string | Yes | Type label. | Villa |
energyClass | string | Yes | Energy label. | D |
latitude | number | Yes | Latitude. | Present on the saved row |
longitude | number | Yes | Longitude. | Present on the saved row |
squaremeterPrice | number | Yes | Price per square meter. | Present on the saved row |
Example dataset record
{"id": 2352957,"url": "https://www.boliga.dk/adresse/godt-gemt-2-9500-hobro-1451200001","street": "Godt Gemt 2","city": "Hobro","zipCode": 9500,"price": 645000,"rooms": 3.0,"size": 127,"propertyTypeName": "Villa","energyClass": "D"}
The saved row came from a zip 9500 search with extractDetails off.
Query and input reference
| Input | Type | Required | Default | Accepted values | Description |
|---|---|---|---|---|---|
startUrls | array | No | [{"url": "https://www.boliga.dk/resultat?searchTab=0&sort=daysForSale-a&zipCodes=9500"}] | Paste Boliga search result URLs (e.g. | |
searchQueries | array | No | ["9500"] | Danish zip codes (e.g. | |
propertyTypes | array | No | `` | villa, raekkehus, ejerlejlighed, fritidshus, andelsbolig, landejendom, helaarsgrund, fritidsgrund | Leave empty for all property types. |
priceMin | integer | No | `` | Minimum asking price in Danish kroner. | |
priceMax | integer | No | `` | Maximum asking price in Danish kroner. | |
roomsMin | integer | No | `` | Minimum number of rooms. | |
roomsMax | integer | No | `` | Maximum number of rooms. | |
sizeMin | integer | No | `` | Minimum living area in square meters. | |
sizeMax | integer | No | `` | Maximum living area in square meters. | |
lotSizeMin | integer | No | `` | Minimum plot/lot size in square meters. | |
lotSizeMax | integer | No | `` | Maximum plot/lot size in square meters. | |
buildYearMin | integer | No | `` | Minimum construction year. | |
buildYearMax | integer | No | `` | Maximum construction year. | |
daysForSaleMin | integer | No | `` | Minimum days the listing has been on the market. | |
daysForSaleMax | integer | No | `` | Maximum days the listing has been on the market. | |
energyClassMin | string | No | `` | Minimum energy label (e.g. | |
energyClassMax | string | No | `` | Maximum energy label (e.g. | |
zipCodes | string | No | `` | Comma-separated Danish zip codes applied to all search queries (e.g. | |
municipality | integer | No | `` | Danish municipality code (kommunekode), e.g. | |
sort | string | No | daysForSale-a | daysForSale-a, daysForSale-d, price-a, price-d, views-d, squaremeterPrice-a, squaremeterPrice-d, rooms-d, size-d, buildYear-d | How to sort search results. |
hideBrokerListings | boolean | No | False | Exclude standard broker listings from results. | |
hideSelfSale | boolean | No | False | Exclude private / self-sale listings. | |
hideForeclosure | boolean | No | False | Exclude foreclosure listings. | |
extractDetails | boolean | No | False | When enabled, fetches full listing details for each result (agent contact, BBR building data, sales history, price analytics, full photo gallery). | |
detailConcurrency | integer | No | 10 | Maximum number of listings processed in parallel when detail extraction is enabled. | |
maxItems | integer | No | 0 | Maximum number of listings to scrape (0 = unlimited). | |
proxyConfiguration | object | No | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} | Proxy settings. |
A run needs searchQueries or startUrls.
Minimal request:
{"searchQueries": ["9500"],"maxItems": 10}
Retrieve the data through the API
- Start
datascrapers/boliga-dk-scraperwith the JSON input. - Wait until the run finishes, or call the synchronous dataset endpoint.
- Read items from the run's default dataset.
- Paginate with dataset
offsetandlimit.
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("datascrapers/boliga-dk-scraper").call(run_input={"searchQueries": ["9500"],"maxItems": 10,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["id"], item["street"], item["price"])
Other languages are listed on the Actor's API tab. This is the Apify Actor API, not a Boliga API.
Data quality and record handling
- One dataset item is one listing. Each pushed listing charges one
dataset-itemevent. - Deduplicate on
id. extractDetailscharges onelisting-detailsevent per enriched listing.- Prices are kroner as returned by Boliga. The Actor does not convert them.
roomscan be a decimal.
Pricing and cost examples
The price file sets $1.00 per 1,000 listings and $2.00 per 1,000 listing details on the free plan. Bronze, Silver, and Gold rates are lower. Platinum and Diamond use the Gold rate.
| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
dataset-item per 1,000 | $1.00 | $0.90 | $0.80 | $0.70 |
listing-details per 1,000 | $2.00 | $1.70 | $1.50 | $1.30 |
A free-plan run of 1,000 listings with details is $3.00 in events. Platform usage, including compute and proxy, is billed separately by Apify.
Limitations and responsible data use
- Coverage is the search the input requests, not every Danish address.
- Place names must match Boliga's search. Zip codes are the more stable filter.
- Asking prices change. This dataset is not a historical archive unless
extractDetailsreturns the sales history for that run. - You are responsible for complying with Boliga's terms and applicable law.
Dataset questions
What does one dataset item represent?
One Boliga property listing from a search or listing URL.
Which field should I use as a unique identifier?
Use id.
Are fields nullable or conditional?
Yes. Detail-only blocks are present when extractDetails is enabled and the listing page returns them.
Can I retrieve the records as CSV or JSON?
Yes. Export the default dataset as JSON, CSV, Excel, XML, or another Apify format.
How do I paginate large datasets?
Use limit and offset on the dataset items endpoint. maxItems limits how many rows the run saves.
Does the Actor return historical data?
The search row is the current listing. Sales history is conditional on extractDetails.
What counts as a billable result?
One dataset-item event per saved listing, plus one listing-details event when detail extraction runs for that listing.
Related datasets from Data Scrapers
- Bezrealitky Scraper collects Czech sale and rent offers.
- BNP Paribas Real Estate Scraper collects German commercial property listings.
- Boligsiden Scraper collects Danish for-sale, sold, and rental rows.
- Booli Scraper collects Swedish for-sale and sold homes.
- Apartments Scraper collects US rental listings.
- Bayut Scraper collects UAE property listings.
Data Scrapers support
Questions about this dataset: stardustspotlight@gmail.com
