Booli Scraper | Sweden Till salu & Slutpriser avatar

Booli Scraper | Sweden Till salu & Slutpriser

Pricing

from $2.20 / 1,000 results

Go to Apify Store
Booli Scraper | Sweden Till salu & Slutpriser

Booli Scraper | Sweden Till salu & Slutpriser

Scrape Booli.se Sweden property data — till salu (for sale), slutpriser (sold prices), nyproduktion, mäklare agents, agencies & BRF. Filter by area, price, rooms & living area. Export Excel/CSV/JSON as a Booli API alternative.

Pricing

from $2.20 / 1,000 results

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

1

Bookmarked

4

Total users

3

Monthly active users

2 days ago

Last modified

Share

Scrape Booli.se Sweden property listings — till salu (for sale), slutpriser (sold prices), nyproduktion, mäklare agents, agencies, and BRF — then download structured data as Excel, CSV, or JSON.

This Actor is a practical Booli API alternative for researchers, agencies, investors, and automations that need clean Swedish housing data from Booli.se. Enter area IDs or a location slug, pick a channel, optionally enrich listing / BRF detail pages, and export Dataset rows with prices, addresses, listing IDs, agent slugs, and direct Booli URLs.

Architecture: thin Apify Actor + booli-se Cloud Run worker. Residential egress is owned by the worker (WORKER_PROVIDES_PROXY=1). Update WORKER_BASE_URL / WORKER_API_KEY in Actor env if the worker host changes — no code change required.


What does the Booli Scraper do?

Booli Scraper lets you extract structured Sweden real-estate data from Booli without maintaining your own browser farm. Give it areas and a channel (or detail URLs for agencies / BRF), then start a run.

Under the hood, the Actor:

  1. Validates input (channel, areaIds / location / areaSlug, filters, detailUrls)
  2. Calls a managed Cloud Run worker that fetches Booli pages (Patchright + residential SE egress)
  3. Parses guest-visible listing / agent / BRF surfaces into normalized records
  4. Dedupes across multiple areaIds and pushes Dataset rows with preview fields
  5. Writes RUN_SUMMARY (and ERROR_SUMMARY on failure) to the key-value store

You run it like any other Apify Actor — schedule it, call it from the API, or plug it into Make / n8n / Zapier.

Channels

ChannelWhat you scrapeDiscovery
till-salu (sale)Homes for saleareaIds / location SERP
slutpriser (sold)Sold prices (slutpriser)areaIds / location SERP
nyproduktion (projects)New construction projectsareaIds / location SERP
maklare (agents)Mäklare (agent) profiles/sok/maklare/{areaSlug}
maklarbyraReal-estate agenciesdetailUrls required
brfHousing cooperatives (BRF)detailUrls required

What Booli data can I extract?

FieldExample
Listing ID / Booli ID47201, listing URL on booli.se
Channeltill-salu, slutpriser, nyproduktion, maklare, brf, …
Address / areaStreet address, descriptive area name
PriceList or sold price display (SEK)
Object type / tenuree.g. Lägenhet, Villa; Bostadsrätt, Äganderätt
Agent / agencyagentSlug, agency name
BRF / housing coophousingCoopId / BRF profile URL
ImagesGallery URLs (capped by imageLimit)
Detail extrasWhen enrichDetails / enrichHousingCoop is on

Features

  • Scrape Booli till salu and slutpriser for Sweden market research
  • Cover nyproduktion, mäklare, mäklarbyrå, and BRF channels
  • Multi areaIds (one worker call per area, then dedupe by id)
  • Resolve location / areaSlug on the worker (e.g. stockholm, goteborg)
  • Filters: objectType, tenureForm, list/sold price, rooms, living/plot area, construction year, sold date, isNewConstruction, sort
  • Optional enrichDetails (open LDP / agent profile) and enrichHousingCoop (follow BRF)
  • Cap runs with maxResults (schema max 500) and maxPages
  • Export Excel / CSV / JSON; connect Make, n8n, Zapier, Python, or the Apify API
  • Pay per event — Actor start + each Dataset result; platform compute for this Actor is paid by the developer

Why scrape Booli / Sweden property listings?

Booli is one of the most used Swedish property portals for for-sale inventory and sold-price history. Scraping Booli helps with:

  • Market research and price benchmarking across Stockholm, Göteborg, Malmö, and other län
  • Investment screening with slutpriser sold comps alongside active till-salu listings
  • Lead generation for agencies, movers, and service providers via mäklare / agency coverage
  • Monitoring new listings, price changes, nyproduktion supply, and BRF context
  • Feeding dashboards, CRMs, spreadsheets, or AI agent workflows

Competing Booli scrapers often focus on search cards only, or bill platform usage separately. This Actor covers sale + sold + projects + agents + BRF, with clear PPE pricing and developer-paid platform usage.


Pricing

Pay per event. You pay for Actor start + each result written to the default dataset. Platform compute usage for this Actor is paid by the developer (User pays platform usage costs = No).

EventPrice
Actor Start (apify-actor-start)$0.005 per start (per GB memory, min 1)
result (apify-default-dataset-item)$3.00 / 1,000 on FREE & BRONZE (see tiers)
Apify Store tier$/1,000 resultsper result
FREE*$3.00$0.003
BRONZE$3.00$0.003
SILVER$2.60$0.0026
GOLD$2.20$0.0022
PLATINUM$2.00$0.002
DIAMOND$1.60$0.0016

*Store tier discounts apply to paying Apify customers on higher tiers. Keep maxResults low while testing.

Example: 1 start + 1,000 listing rows ≈ $0.005 + $3.00 in event charges on FREE/BRONZE.


More Actors like this

Looking for another property portal, or a scraper outside real estate? Use a specialized Actor when one exists — structured fields, better coverage, usually lower cost. Use this Actor for Booli.se Sweden listings, sold prices, agents, and BRF.

Similar real estate Actors

Prefer another specialized scraper?

Jobs & Freelance

E-commerce

Travel & Stays

Social & Content

Ads Intelligence

Local & Maps

General Tools

→ See the full catalog in Related Actors below, or browse apify.com/lentic_clockss.


How to scrape Booli property data

  1. Open this Actor and click Try for free (or Start).
  2. Set areaIds (default [2] = Stockholms län) or location / areaSlug (e.g. stockholm).
  3. Choose channel: till-salu, slutpriser, nyproduktion, or maklare.
  4. For maklarbyra / brf, paste Booli detailUrls instead of relying on SERP alone.
  5. Set maxResults and maxPages low for a first test (e.g. 5–15 results, 1 page).
  6. Optionally enable enrichDetails / enrichHousingCoop when you need deeper fields.
  7. Prefer Apify RESIDENTIAL proxy with country SE when the Actor mints proxy (ignored if WORKER_PROVIDES_PROXY=1).
  8. Click Start, then download the Dataset as JSON, CSV, Excel, or JSONL.

Example input (till salu in Stockholms län)

{
"areaIds": [2],
"channel": "till-salu",
"objectType": "Lägenhet",
"maxListPrice": 3000000,
"maxResults": 15,
"maxPages": 1,
"enrichDetails": false
}

Example input (slutpriser via location)

{
"location": "goteborg",
"channel": "slutpriser",
"maxResults": 20,
"maxPages": 1,
"sort": "soldDate",
"ascending": false
}
{
"areaSlug": "stockholm",
"channel": "maklare",
"maxResults": 25,
"maxPages": 1
}

Example input (BRF detail URLs)

{
"channel": "brf",
"detailUrls": [
"https://www.booli.se/bostadsrattsforening/47201"
],
"maxResults": 5
}

Input

Use the Input tab for the full form. Core fields:

FieldDescription
areaIdsBooli area IDs (default [2] Stockholms län). Multiple → one call each, then dedupe
location / areaSlugArea name/slug resolved by the worker
channeltill-salu, slutpriser, nyproduktion, maklare, maklarbyra, brf (aliases: sale/sold/projects/agents)
objectType / tenureForme.g. Lägenhet, Villa; Bostadsrätt, Äganderätt
minListPrice / maxListPriceSEK filters for till-salu
minSoldPrice / maxSoldPriceSEK filters for slutpriser
minRooms / maxRooms / living & plot area / construction year / sold dateOptional SERP filters
maxResultsMaximum records to emit (1–500)
maxPagesMaximum SERP pages
detailUrls/annons/, /bostad/, /maklare/, /maklarbyra/, /bostadsrattsforening/ URLs
enrichDetailsOpen each SERP card LDP / agent profile
enrichHousingCoopFollow listing housingCoop → BRF page
imageLimitMax images per listing (0–20)
proxyConfigurationPrefer RESIDENTIAL + SE when Actor mints proxy
workerBaseUrlOptional per-run worker origin override

Output example

Each Dataset item is one Booli listing, agent, agency, or BRF row. Download as JSON, CSV, Excel, or JSONL.

{
"name": "Example street 12",
"type": "listing",
"status": "for_sale",
"country": "SE",
"authority": "booli.se",
"channel": "till-salu",
"listingId": "1234567",
"listingUrl": "https://www.booli.se/annons/1234567",
"descriptiveAreaName": "Södermalm, Stockholm",
"priceDisplay": "4 950 000 kr",
"source": "booli.se",
"brand": "booli"
}

Key-value store helpers:

  • OUTPUT / RUN_SUMMARY — counts, channel, area calls, warnings
  • ERROR_SUMMARY — present when a run fails

Lead & contact fields

Every Dataset row carries the full lead/clue key set so records are outreach-ready. The keys follow the mission lead schema (phones / emails / address / geo / person / org / web / leadSource / leadReveal / leadAbsences).

Booli.se's contact distribution differs by surface: search cards have no contact info (recon-confirmed), listing detail pages (LDP) show agent name and address but hide phone/email behind a "Kontakta mäklaren" click-show overlay, and agent profile pages (/maklare/{slug}) expose phone and email already-visible (plain text + tel: / mailto:). The worker follows agent profile pages when enrichDetails is on (default) to harvest full contact without spending click-reveal budget.

FieldTypeMeaning & source surface
phones[{value, type, e164?}]Agent mobile/landline from /maklare/{slug} pageProps.agent.phone (already-visible). Sample: 0737-500 100 (mobile, Jonas Lindström / Notar). Empty on SRP cards (本站无) and on LDP items where the agent follow was not executed (未验证).
emails[{value, type}]Agent work email from /maklare/{slug} pageProps.agent.email (already-visible). Sample: jonas.lindstrom@notar.se. Empty on SRP cards (本站无) and on LDP items where the agent follow was not executed (未验证).
address{street, unit, locality, region, postalCode, country, full}Listing address from LDP Apollo streetAddress + apartmentNumber. unit = 门牌 (Swedish lägenhetsnummer, e.g. 1002, 1402). street embeds street name + house number (e.g. Bäckebolslyckan 29, Oktavgatan 4). postalCode from JSON-LD PostalAddress. country = SE. Agent items may carry office street from agent.offices[].
geo{lat, lng}Coordinates from Apollo Listing latitude / longitude (already-visible). Sample: 57.75256339, 11.98650358. Agent items: 未验证 when agent page has no office coordinates.
person{name, role?}Agent name from LDP "Ansvarig mäklare" or agent profile pageProps.agent.name. Sample: Jonas Lindström (role: agent). Empty on SRP cards (本站无).
org{name, id?}Agency name and Booli agency ID from Apollo agency.name / agencyId. Sample: Notar (id: 47), Länsförsäkringar Fastighetsförmedling (id: 20).
web{website, socials[]}Per-entity website and social links. Booli.se has no per-listing or per-agent social links (only platform-level Instagram/Facebook). website is null, socials is [] on all items.
leadSourceenumsearch = SRP card only; detail = LDP item; entity = agent profile / agency / BRF item.
leadRevealenumvisible = contact already-visible on the fetched page (agent profile, LDP address). click = contact behind "Kontakta mäklaren" overlay (LDP phone/email, not executed by worker). absent = no contact on this surface (BRF, agency page).
leadAbsencesobject/mapPer-subfield reason when a lead is empty: 本站无 (recon-confirmed the surface does not publish it — SRP card phones/emails/person, per-entity web/socials, BRF contacts), 未验证 (contact IS available on the site via click-show or agent follow, but the worker did not execute that path for this item), or 闸门锁 (gated by login/contact form — not applicable to Booli phone/email which are click-show, not login-gated).

A null / empty lead value is always paired with a matching leadAbsences reason — the key is never silently omitted.

Absence semantics (ruling-B compliance):

  • SRP search cards: phones, emails, person = 本站无 (recon confirmed no contact on cards).
  • LDP items without agent follow: phones, emails = 未验证 (recon verified contact exists on LDP via click-show overlay and on agent page; the worker did not execute the reveal for this item).
  • LDP items with agent follow (enrichDetails): phones, emails = actual values, leadSource = entity, leadReveal = visible.
  • All items: web.socials = 本站无 (no per-entity socials on Booli.se).

Reveal cost

Booli.se listing detail pages (LDP) show agent name and property address already-visible, but phone and email are behind a "Kontakta mäklaren" click-show overlay that triggers a GraphQL operationName=Agent XHR. The worker does not click this overlay.

Instead, when enrichDetails is on (default), the worker follows the agent profile page (/maklare/{slug}) where phone and email are already-visible in pageProps.agent (plain text + tel: / mailto:) — no click-reveal needed. This is the preferred lead channel.

Cost implications:

  • Each enriched listing requires one extra HTTP fetch (the agent profile page) in addition to the LDP.
  • Runs with enrichDetails=true take longer per result than SRP-only runs.
  • The worker uses Patchright + residential SE egress to bypass Cloudflare (non-browser HTTP gets 403 challenge on all Booli.se surfaces).
  • There is no per-site click-reveal budget to spend — the agent page approach avoids clicking entirely.
  • Submitting the contact form is prohibited (GDPR / site terms); the Actor never fills or submits it.

Honest limitations

These match the 2026-08-24 Booli.se recon report and the cloud smoke Dataset (leadAbsences):

  • SRP cards have no contact info. Search results show address, agency name, and listing metadata only — no phone, email, or agent personal name. SRP-only items set leadAbsences.phones=本站无, leadAbsences.emails=本站无, leadAbsences.person=本站无.
  • Per-listing email is click-show gated (not login-gated). The LDP "Kontakta mäklaren" overlay reveals agent phone and email via a GraphQL XHR. The worker does not click this overlay. When the agent profile page is followed (enrichDetails), phone/email are already-visible there. LDP items where the agent follow was not executed set leadAbsences.phones=未验证, leadAbsences.emails=未验证.
  • Per-entity web / socials are 本站无. Booli.se has no per-listing or per-agent website or social media links (only platform-level Instagram/Facebook). All items emit web.website=null, web.socials=[], leadAbsences.web_socials=本站无.
  • BRF (housing cooperative) pages have no association contacts. The BRF page explicitly states "Vi har inte några kontaktuppgifter till bostadsrättföreningen." BRF items set leadAbsences.phones=本站无, leadAbsences.emails=本站无, leadAbsences.person=本站无.
  • Agency pages (/maklarbyra/{slug}) list agent names but no phone/email/address. Only the office page (/maklarkontor/{slug}) has office phone/email/street, but the worker URL helper does not support that path. Agency items set leadAbsences.phones=本站无, leadAbsences.emails=本站无, leadAbsences.address=本站无.
  • No independent rental portal. Booli.se has no hyresrätt rental channel; Hyresrätt is only a tenure filter on sale listings. Rent channel = 本站无.
  • Nyproduktion project pages (/projekt/{id}) have no phone/email. Developer external links (e.g. Besqab) may exist but are not per-listing contact. The worker URL helper does not normalize /projekt/ — nyproduktion is scraped via search cards + enrichDetails.
  • Cloudflare 403 on all non-browser HTTP. The worker requires Patchright (headed Chrome + Xvfb) + residential SE proxy. curl_cffi / naked HTTP gets 403 challenge on every Booli.se URL.

Do not infer contacts that Booli.se does not publish: where a lead is absent, the item says so in leadAbsences rather than fabricating a value.


Tips for better Booli scraping results

  • Start with maxPages: 1 and maxResults: 5–15 to validate filters.
  • Prefer known areaIds when you need reproducible coverage; use location for quick tests.
  • Enable enrichDetails only when you need LDP / agent depth — it costs more time per row.
  • Use slutpriser for sold comps; keep till-salu and sold as separate runs if you need both.
  • For agencies / BRF, pass explicit detailUrls — those channels are not SERP-driven.
  • Split large multi-län jobs into several runs with smaller areaIds batches.

FAQ

Is there an official Booli API?

Booli has historically offered partner APIs with limited access. This Actor provides a Booli scraper / API-style Dataset export for guest-visible public pages — no Booli API key required.

Can I scrape both till salu and slutpriser?

Yes. Run once with channel=till-salu and once with channel=slutpriser (or use aliases sale / sold). Combine Datasets downstream if you need a single table.

Does it scrape listing detail pages?

Yes, when enrichDetails is enabled. enrichHousingCoop follows BRF links from listings when present.

What format can I export?

Apify Dataset downloads support JSON, JSONL, CSV, Excel, XML, and RSS. You can also pull results through the Apify API, Integrations, or webhooks.

Only scrape publicly available listing data and only if you have a legitimate reason. Personal data may appear in public listings and can be protected by GDPR. Review Booli terms and your own compliance obligations before large-scale collection. This tool is intended for ethical use of public information. Do not submit contact forms automatically.

How do I run this Booli Scraper via API?

Use the Apify API, CLI (apify call), or Schedules. Pass the same JSON input shown above. See the API tab on this Actor page for ready-made code snippets.

Actor ID: lentic_clockss/booli-scraper

curl "https://api.apify.com/v2/acts/lentic_clockss~booli-scraper/runs" \
-X POST \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"areaIds":[2],"channel":"till-salu","maxResults":10,"maxPages":1}'

Live View / standby endpoints

When the Actor runs in standby / Live View mode, these operational endpoints are available:

MethodPathDescription
GET/Service info
GET/healthHealth check
GET/input-exampleLow-cost sample input
GET/openapi.jsonDeployed OpenAPI document

Normal scraping still runs as a standard Actor run (not through these endpoints).


Support

Open the Issues tab on this Actor page with sample input, run ID, and expected vs actual results. Feature requests for extra filters or fields are welcome.


All 77 public Actors from [lentic_clockss]. Click a name to open the Store detail page.

Jobs & Freelance

Real Estate

E-commerce

Travel & Stays

Social & Content

Ads Intelligence

Local & Maps

General Tools

→ Browse the full profile: apify.com/lentic_clockss