Booli Scraper - Swedish Real Estate Listings & Sold Prices
Pricing
from $5.00 / 1,000 result scrapeds
Booli Scraper - Swedish Real Estate Listings & Sold Prices
Scrape property listings and historical sold prices from Booli.se, Sweden's #2 real estate portal. Extract prices, locations, sizes, rooms, floors, monthly fees, images, and agency details for apartments, houses, and holiday homes across Swedish cities. No login needed.
Pricing
from $5.00 / 1,000 result scrapeds
Rating
0.0
(0)
Developer
Studio Amba
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Booli Scraper
Extract property listings and historical sold prices from Booli.se, Sweden's #2 real estate portal. This actor pulls prices, sizes, rooms, floors, monthly fees, images, and agency details for apartments, houses, townhouses, and holiday homes across Swedish cities — including Booli's flagship feature that most competing scrapers skip: closed-sale (slutpris) history, not just current asking prices.
Why use this actor?
Booli is Sweden's second-largest property portal, and the only major one that publishes a full history of what homes actually sold for, not just what they're listed at. That makes it useful for price-trend analysis, comparable-sale research, and investment due diligence in a way a for-sale-only feed can't match.
Use cases include market analysis, price-per-square-meter benchmarking by district, relocation and mortgage-appraisal research, academic housing studies, and competitor tracking for proptech and real estate agency tools.
How to scrape Booli data
- Go to the actor's page on the Apify Store
- Choose a city (Stockholm, Göteborg, Malmö, Uppsala, Lund, Jönköping, Sundsvall, or all of Sweden) or paste a Booli.se search or listing URL
- Pick search type: for-sale listings (till salu) or sold prices (slutpriser)
- Click "Start" to run the scraper
- Download results as JSON, CSV, or Excel when complete
The actor fetches pages through Bright Data's Web Unlocker to get past Booli.se's Cloudflare managed challenge, then extracts data from the site's own embedded Next.js/Apollo GraphQL cache for maximum reliability — no fragile CSS scraping for the fields that matter most.
Input
| Field | Type | Required | Description |
|---|---|---|---|
searchType | String | No | sale (för-sale, default) or sold (historical sold prices) |
city | String | No | sweden, stockholm (default), goteborg, malmo, uppsala, lund, jonkoping, or sundsvall |
customAreaId | String | No | Advanced: Booli's own numeric area ID for any other Swedish municipality. Overrides city. |
objectType | String | No | Advanced: filter by property type as Booli's site uses it, e.g. Lägenhet (apartment), Villa, Radhus (townhouse), Fritidshus (holiday home) |
startUrls | Array | No | Booli.se search result pages or individual /annons/{id} / /bostad/{id} listing URLs. Overrides city/searchType. |
maxResults | Integer | No | Maximum listings to return. Search pages return 35 listings each; the actor paginates automatically. |
brightDataApiKey | String | No | Your own Bright Data API key for the Web Unlocker zone. Leave empty to use the built-in unlocking service. |
Output
Each result contains:
| Field | Type | Example |
|---|---|---|
title | String | "Lägenhet, Ringvägen 9A, Södermalm" |
price | Number | 7620000 |
currency | String | "SEK" |
listingType | String | "sale" or "sold" |
propertyType | String | "Lägenhet" |
tenureForm | String | "Bostadsrätt" (for-sale listings only — not present on sold listings) |
address | String | "Ringvägen 9A" |
district | String | "Södermalm" |
city | String | "Stockholm" |
latitude / longitude | Number | 59.3112 / 18.0714 |
rooms | Number | 2 |
surface | Number | 63.6 |
floor | Number | 1 |
pricePerSqm | Number | 54900 (sold listings, and any listing scraped via a direct startUrls detail link; null for for-sale listings from a searchType: sale search crawl — see Limitations) |
monthlyFee | Number | 4264 (for-sale listings only — not present on sold listings) |
listPrice | Number | 7500000 (present on most for-sale listings and roughly 3 in 4 sold listings) |
soldDate | String | "2026-07-15" (sold listings only) |
publishedDate | String | "2026-08-20" (for-sale listings only) |
imageUrl | String | Primary listing photo URL (nearly always present on for-sale listings; present on roughly 1 in 3 sold listings) |
imageUrls | Array | All listing photo URLs (same availability pattern as imageUrl) |
agencyName | String | "Fastighetsbyrån" (for-sale listings only — not present on sold listings) |
agencyUrl | String | Agency profile URL, when available (for-sale listings only) |
booliId | String | "6242228" |
url | String | Full Booli.se listing URL |
scrapedAt | String | ISO 8601 timestamp |
Example output
{"title": "Lägenhet, Ringvägen 9A, Södermalm","price": 7620000,"currency": "SEK","listingType": "sale","propertyType": "Lägenhet","address": "Ringvägen 9A","district": "Södermalm","city": "Stockholm","rooms": 3,"surface": 74.5,"pricePerSqm": 102282,"monthlyFee": 4264,"listPrice": 7500000,"publishedDate": "2026-08-20","imageUrl": "https://bcdn.se/images/cache/32010988_1024x0.jpg","agencyName": "Fastighetsbyrån","booliId": "6242228","url": "https://www.booli.se/annons/6242228","scrapedAt": "2026-08-28T09:30:00.000Z"}
Cost estimate
This actor fetches every page through Bright Data's Web Unlocker (one request per search page, not a full browser session). Approximate costs:
- ~35 results (1 search page): $0.01-0.03 in platform credits
- ~350 results (10 search pages): $0.10-0.30 in platform credits
- Individual listing URLs (
startUrls): roughly one Web Unlocker request per listing
Actual usage cost only settles once the run reports SUCCEEDED — reading the dataset from a still-running run will undercount what you'll actually be charged.
Tips for best results
- Start small — test with
maxResults: 20before running large scrapes. - Use
searchType: soldfor price research — Booli's slutpriser history is its main edge over a for-sale-only competitor feed, and covers years of closed transactions per area. - Direct listing URLs get fully structured numeric fields — pass an
/annons/{id}or/bostad/{id}URL instartUrlsto get exactrooms,surface, andflooras numbers straight from the detail page, rather than parsed from the search-page preview text. customAreaIdunlocks any Swedish municipality — the curatedcitylist covers the largest markets; for anywhere else, browse booli.se and read theareaIdsvalue out of the URL.
Limitations
- Booli.se fronts every page with a genuine Cloudflare managed challenge. This actor routes requests through Bright Data's Web Unlocker to get past it.
areaIdsare opaque numeric IDs with no human-readable URL slug on Booli's side — there's no way to search by free-text city name server-side, so this actor ships a curated list plus a numeric override.- Search-page listings carry
roomsandsurfaceas parsed plaintext (Booli doesn't expose them as separate numeric fields at the search level); detail-page scrapes viastartUrlsreturn fully structured numeric values instead. pricePerSqmis null forsearchType: salesearch crawls. Booli's search-result preview only lists a price-per-m² figure (kr/m²) for sold listings (searchType: sold) — for-sale search results show the monthly fee (kr/mån, captured inmonthlyFee) in that same slot instead, and no price-per-m² anywhere in the preview data. To getpricePerSqmon for-sale listings, pass individual/annons/{id}URLs instartUrls— the detail page always carries it as a structured field.- Price data on for-sale listings reflects Booli's own asking/estimate price, not a guaranteed final sale price.
- Sold listings don't carry
tenureForm,agencyName, oragencyUrl. Booli's sold-property search results are a different underlying object type from for-sale listings and simply don't include these fields — alwaysnull/absent forlistingType: "sold"items. imageUrl/imageUrlscoverage is much lower on sold listings (roughly 1 in 3) than on for-sale listings (nearly all). Booli doesn't keep photos indexed for most historical sales.- The actor scrapes the public website. No login or authentication is used.
Related scrapers
- Imobiliare.ro Scraper — Romanian real estate listings
- Immoweb Scraper — Belgium's #1 real estate portal
- Idealista Scraper — Spanish real estate portal
- Zimmo Scraper — Belgian real estate listings
- Aruodas Scraper — Lithuanian real estate listings
- Flatfox Scraper — Swiss rental listings
Need this data on a schedule, or a custom version?
We run this scraper as a managed service for businesses: scheduled runs, deduplication, delta detection, and delivery to your inbox, Google Sheets, or API — maintenance included. We can also build a custom version with your exact fields and filters, or combine multiple sources into one feed.
See studioamba.dev/services or email hello@studioamba.dev for a free data sample. We maintain 700+ European web scrapers and answer within one business day.