Booli (booli.se)
Tools for the Swedish property portal Booli, reading its consumer GraphQL API. Money is in SEK, areas in m², rooms as a number.
Setup — the browser bridge
booli.se is behind a Cloudflare bot wall that blocks server-side requests, so booli-mcp routes each query through your own signed-in www.booli.se browser tab via the fetchproxy bridge (the ContextMint Bridge extension). No Booli login is needed — just a normal, Cloudflare-cleared page view.
- Install ContextMint Bridge from https://github.com/nullnet-app/contextmint-bridge/releases
(Chrome: load the chrome zip unpacked; Safari isn't available yet — use
Chrome for now) and keep a www.booli.se tab open in that browser. On the
first request, approve the one-time pairing prompt. It's the fetchproxy
extension renamed, same maintainer; source at
https://github.com/nullnet-app/contextmint-bridge (build it, or verify a
release zip with its published
.sha256). BOOLI_TRANSPORTpicks the path:auto(default — tries a direct fetch first, falls back to the bridge when walled),fetchproxy(always the bridge),direct(fail if walled). The fleet shares WS port 37149 (BOOLI_WS_PORT).- Run
booli_healthcheckto confirm the path is working.
Start with an area
Booli's searches scope by a numeric area id, not a place name. Resolve
first, or pass a free-text location and the search tools resolve the top
hit for you.
booli_search_areas—{ query: "Nacka" }→ areas witharea_idanddisplay_name. Pass anarea_idinto the search tools.
For-sale listings
booli_search_listings— search active listings byarea_idor free-textlocation, plus optionalmin_list_price/max_list_price(SEK),min_list_sqm_price/max_list_sqm_price,min_rooms/max_rooms,min_living_area/max_living_area(m²),min_plot_area/max_plot_area,object_type(comma-separated: Lägenhet, Villa, Kedjehus-Parhus-Radhus, Fritidshus, Gård, Tomt/Mark),min_construction_year/max_construction_year,is_new_construction,sort+ascending. Paginated bypage— checktotal_count/pages. Returns slim summaries by default (compact: falsefor full raw records).booli_get_listing— full detail for one property by its residence id (the number in a booli.se/bostad/ URL, or a result'sresidence_id). Works for both active and sold properties.
Sold prices (slutpriser) — the comparables
booli_search_sold— sold properties with the achieved sold price, sold date, and over/under-asking %. Same scope/filters as the for-sale search, plusmin_sold_price/max_sold_price,min_sold_sqm_price/max_sold_sqm_price, andmin_sold_date/max_sold_date(YYYYMMDD).sortalso acceptssoldDate/soldPrice; the default issoldDatedescending (most recent sales first), as forbooli_market_stats.booli_market_stats— median/average sold price, price per m², and average over/under-asking % for an area (same filters as the sold search, over ONE page —page/pagessay which;total_countis the whole matching set, not the sample).sample_sizeis the rows on the page andsold_price_count/price_per_sqm_count/price_change_countthe rows behind each metric — check them before trusting a thin median.
Diagnostics
booli_healthcheck— one-call probe of the data path (direct or bridge).
All tools are read-only.
