How to Scrape Boliga.dk Denmark Real Estate in 2026
Extract Danish property listings from Boliga.dk — asking price, price per m², energy class, GPS and the estate agent behind every listing. No login, no API key.
Boliga.dk is Denmark’s largest real-estate portal, and unlike most property sites it does not hide its data behind an aggressive anti-bot wall. The catch is that there is no public, documented developer API — so if you want the whole market as rows in a spreadsheet, you either click through hundreds of result pages by hand or you talk to Boliga’s own JSON endpoints directly. This guide covers the second path: what Boliga exposes, how its listing API is shaped, and how to pull clean, nationwide property data — including the estate agent behind each listing — without a login or a token.
What’s worth extracting
Boliga carries a rich, consistent record per listing. Once you page through the JSON, each property gives you around 40 fields. Grouped by what you’ll actually query:
- Pricing — asking
priceandsquaremeterPrice(price per m²) in DKK, plusdownPayment, net monthly cost (net), monthly expenses (exp), the publicevaluationPrice, and the last recorded sale (lastSoldPrice/lastSoldDate). - Size and layout — living area (
size), lot size (lotSize), basement size (basementSize),rooms,floorandbuildYear. - Identity and location —
id,url, fulladdress, normalizedcleanStreet,city,zipCode,municipality(kommune), pluslatitude/longitudefor mapping. - Property classification — human-readable
propertyType(Villa, Rækkehus, Ejerlejlighed, holiday home, plot, farm, houseboat) and the rawpropertyTypeCode. - Market signals —
energyClass(A–G),daysForSale,createdDate, and boolean-ishisForeclosure/isActiveflags to surface value plays. - Estate-agent identity —
agentRegId(registration id),agentDisplayNameandisPremiumAgent. This is what turns one property run into a Danish estate-agent lead list. - Media —
image(main photo URL) andimagesCount.
For pure market analysis you mostly need price, size, location and the market-signal fields. For lead generation, agentRegId is the anchor. The README is explicit about one gotcha here, which matters for how you build your lists — see Pitfalls.
How the source actually works
Boliga’s site is a single-page app backed by a clean JSON listing API. The actor reads that endpoint and auto-paginates the full result set of any search — no browser, no headless Chrome, no DOM parsing. That’s why it runs cheap on datacenter proxy: there’s no JavaScript challenge to solve, just a JSON API to page through.
You have two ways to target a search. The first is to hand it a Boliga search URL and let it parse the filters out:
{
"searchUrl": "https://www.boliga.dk/resultat?zipcodeFrom=8000&zipcodeTo=8260&propertyType=1&priceMin=2000000",
"maxResults": 800
}
The second is to drive the structured filters directly. The property-type codes are worth memorizing because Boliga uses numeric codes, not names: 1=Villa, 2=Rækkehus, 3=Ejerlejlighed (condo), 4=Fritidshus (holiday home), 5=Andelsbolig (cooperative), 6=Landejendom (farm), 7=Helårsgrund (plot), 8=Villalejlighed, 10=Houseboat, 12=Fritidsgrund. A Copenhagen-condos-by-most-expensive-per-m² query looks like:
{
"zipCodes": "1050-1499,2100,2200",
"propertyType": "3",
"sort": "sqmprice-d",
"maxResults": 1000
}
zipCodes accepts a single code (2100), a comma list (2100,2200), or a range (1050-1499). Leave every filter empty and you get the newest listings across all of Denmark. sort supports date-d (newest, default), date-a, price-a / price-d, and sqmprice-a / sqmprice-d. There’s also an extraQueryParams escape hatch for advanced Boliga filters like salesDateMin=2024-01-01&energyClass=A appended raw.
▶ Open the Boliga.dk Scraper on Apify — one run returns every listing for a zip, a kommune or all of Denmark, with price, m²-price, energy class, GPS and the estate agent. No login, no API key. Export to JSON, CSV or Excel.
The access reality
The honest friction with Boliga is different from a site like Booking.com or a hardened real-estate portal. There’s no Akamai, no JA4 fingerprinting, no rotating challenge page. The friction is:
- No official API. There’s no documented contract, no versioning, no rate-limit header telling you what’s allowed. You’re reading the same JSON the front-end reads, which means the shape can shift when Boliga ships a redesign. A managed actor absorbs that maintenance.
- Pagination is the real work. A single zip is a few hundred listings; a nationwide search can span tens of thousands. You have to page through the entire result set correctly, respect the API’s page size, and stop at your
maxResultscap — setmaxResultsto0for no limit. - Politeness. Because there’s no published rate limit, the safe move is to pace requests and route through proxy rather than hammer the endpoint from a single IP. Datacenter proxy is enough here — you don’t need to pay for residential.
- DKK only. All prices come back in Danish kroner. There’s no currency parameter; if you want EUR you normalize downstream.
The naive approach — one curl against a result URL — gets you the first page and nothing else, and you’ll misread the pagination scheme within an hour. The value of a managed scraper is that the pagination, proxy and field-normalization logic is solved once.
Example output
One flat row per listing, ready for a spreadsheet or a warehouse. A trimmed sample:
{
"id": "2089413",
"url": "https://www.boliga.dk/bolig/2089413",
"address": "Strandvejen 12, 2. tv, 2100 København Ø",
"city": "København Ø",
"zipCode": "2100",
"municipality": "København",
"propertyType": "Ejerlejlighed",
"price": "4295000",
"squaremeterPrice": "56513",
"rooms": "3",
"size": "76",
"buildYear": "1932",
"energyClass": "C",
"daysForSale": "41",
"isForeclosure": "false",
"agentDisplayName": "EDC København",
"agentRegId": "1542",
"isPremiumAgent": "true",
"evaluationPrice": "4100000",
"lastSoldPrice": "3250000",
"latitude": "55.7158",
"longitude": "12.5849",
"scrapedAt": "2026-06-07T12:00:00.000Z"
}
Note that numeric-looking fields (price, size, latitude) arrive as strings. Cast them on ingest if you’re doing math.
Typical use cases
What people actually build on Boliga data:
- Denmark market analysis — track inventory, asking prices, m²-prices and
daysForSaleacross zips, kommuner and property types over time. - Price-per-m² heatmaps — compare
squaremeterPricebetween neighbourhoods and cities to map where Denmark is heating up or cooling. - Investment and foreclosure screening — filter on
isForeclosure, lowdaysForSale, build year and energy class, then compareevaluationPriceandlastSoldPriceagainst the asking price to find value. - Estate-agent lead generation — build outreach lists of Danish agents by area, price band or property type using
agentRegId+agentDisplayName. - Price tracking and alerts — re-run on a schedule and diff against the prior dataset to catch new listings and price drops.
- Portals, dashboards and ML — feed a Danish property feed, a BI dashboard or a valuation model from a scheduled run.
The common thread is freshness. A snapshot from last quarter is a curiosity; a daily-refreshed feed across the whole country is sellable infrastructure.
Cost and effort: build vs. managed
Building this yourself is not as painful as beating an anti-bot stack, but it’s not free either. You need to reverse the JSON endpoint, get the property-type codes and zip-range syntax right, implement correct pagination to the tens-of-thousands ceiling, add retry logic, and re-check it every time Boliga tweaks its front-end contract. Call it a day or two for a working MVP plus recurring babysitting.
The managed actor runs on pay-per-result: a per-run start fee plus a fraction of a cent per listing row, with no monthly subscription and no Boliga API fees (there are none to pay). Datacenter proxy keeps runs cheap. For a scheduled Denmark-wide refresh you’re looking at low single digits of dollars per run, and maxResults lets you cap any run inside a budget. The trade-off is the usual one: a managed scraper is opinionated about output schema, but you inherit someone else’s maintenance instead of carrying your own.
Common pitfalls
Specific to Boliga, worth knowing before you commit a pipeline:
agentDisplayNameis sparse,agentRegIdis not. The README is explicit:agentRegIdis present on virtually every listing, whileagentDisplayNameis filled only for a subset. UseagentRegIdas the reliable join key and treat the name as best-effort enrichment — don’t drop agent-less rows just because the display name is blank.- Everything is a string. Price, size, coordinates and flags come back as strings (e.g.
isForeclosureis"false", not a boolean). Parse them explicitly. - DKK, no conversion. Prices are Danish kroner with no currency switch. Normalize to EUR/USD downstream if you’re comparing across countries.
lotSizeis often0. Condos and apartments legitimately have no lot, so a0there is data, not a bug — don’t filter it out as missing.- De-dupe on
id. If you run overlapping searches (a zip range plus a kommune), the same listing can appear twice. The Boligaidis the stable unique key. - GDPR on agent data. Listing data is public, but
agentRegIdandagentDisplayNameare personal/business data. If you build outreach lists, you own compliance with GDPR and Boliga’s terms.
Wrapping up
Boliga is one of the friendlier real-estate sources to extract — no anti-bot wall, a clean JSON API, and an unusually rich record that even carries the selling agent. The only real engineering is correct pagination to the tens-of-thousands ceiling and keeping up with front-end changes. If you want the whole Danish market on a schedule without owning that maintenance, use the managed actor.
▶ Run the Boliga.dk Scraper on Apify — a nationwide run yields tens of thousands of listings with price, m²-price, energy class, foreclosure flag, GPS and estate-agent id. No login, no API key. Export to JSON, CSV, Excel or HTML. Start on Apify’s free monthly credit.
Related guides
EU Company Registry Data Export — Germany, France, Netherlands
How to extract company-registry records from Handelsregister, INPI, and KvK in a unified schema — for KYC, B2B lead generation, and compliance workflows.
How to Scrape Allabolag.se Sweden Company Leads in 2026
Extract Swedish company data from allabolag.se — org number, revenue, CEO, phone and email — without an API key. A guide to bulk firmographics and B2B leads.
How to Scrape the Australia Business Register (ABN/ABR)
Bulk-export Australian business names, ABNs, status and registration dates from the official data.gov.au CKAN register — no API key, no browser, no captcha.