Booli Scraper - Swedish Real Estate Listings & Sold Prices avatar

Booli Scraper - Swedish Real Estate Listings & Sold Prices

Pricing

from $5.00 / 1,000 result scrapeds

Go to Apify Store
Booli Scraper - Swedish Real Estate Listings & Sold Prices

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

Studio Amba

Maintained by Community

Actor 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

  1. Go to the actor's page on the Apify Store
  2. 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
  3. Pick search type: for-sale listings (till salu) or sold prices (slutpriser)
  4. Click "Start" to run the scraper
  5. 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

FieldTypeRequiredDescription
searchTypeStringNosale (för-sale, default) or sold (historical sold prices)
cityStringNosweden, stockholm (default), goteborg, malmo, uppsala, lund, jonkoping, or sundsvall
customAreaIdStringNoAdvanced: Booli's own numeric area ID for any other Swedish municipality. Overrides city.
objectTypeStringNoAdvanced: filter by property type as Booli's site uses it, e.g. Lägenhet (apartment), Villa, Radhus (townhouse), Fritidshus (holiday home)
startUrlsArrayNoBooli.se search result pages or individual /annons/{id} / /bostad/{id} listing URLs. Overrides city/searchType.
maxResultsIntegerNoMaximum listings to return. Search pages return 35 listings each; the actor paginates automatically.
brightDataApiKeyStringNoYour own Bright Data API key for the Web Unlocker zone. Leave empty to use the built-in unlocking service.

Output

Each result contains:

FieldTypeExample
titleString"Lägenhet, Ringvägen 9A, Södermalm"
priceNumber7620000
currencyString"SEK"
listingTypeString"sale" or "sold"
propertyTypeString"Lägenhet"
tenureFormString"Bostadsrätt" (for-sale listings only — not present on sold listings)
addressString"Ringvägen 9A"
districtString"Södermalm"
cityString"Stockholm"
latitude / longitudeNumber59.3112 / 18.0714
roomsNumber2
surfaceNumber63.6
floorNumber1
pricePerSqmNumber54900 (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)
monthlyFeeNumber4264 (for-sale listings only — not present on sold listings)
listPriceNumber7500000 (present on most for-sale listings and roughly 3 in 4 sold listings)
soldDateString"2026-07-15" (sold listings only)
publishedDateString"2026-08-20" (for-sale listings only)
imageUrlStringPrimary listing photo URL (nearly always present on for-sale listings; present on roughly 1 in 3 sold listings)
imageUrlsArrayAll listing photo URLs (same availability pattern as imageUrl)
agencyNameString"Fastighetsbyrån" (for-sale listings only — not present on sold listings)
agencyUrlStringAgency profile URL, when available (for-sale listings only)
booliIdString"6242228"
urlStringFull Booli.se listing URL
scrapedAtStringISO 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: 20 before running large scrapes.
  • Use searchType: sold for 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 in startUrls to get exact rooms, surface, and floor as numbers straight from the detail page, rather than parsed from the search-page preview text.
  • customAreaId unlocks any Swedish municipality — the curated city list covers the largest markets; for anywhere else, browse booli.se and read the areaIds value 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.
  • areaIds are 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 rooms and surface as parsed plaintext (Booli doesn't expose them as separate numeric fields at the search level); detail-page scrapes via startUrls return fully structured numeric values instead.
  • pricePerSqm is null for searchType: sale search 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 in monthlyFee) in that same slot instead, and no price-per-m² anywhere in the preview data. To get pricePerSqm on for-sale listings, pass individual /annons/{id} URLs in startUrls — 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, or agencyUrl. Booli's sold-property search results are a different underlying object type from for-sale listings and simply don't include these fields — always null/absent for listingType: "sold" items.
  • imageUrl/imageUrls coverage 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.

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.