Browser

hemnet-fpx

Try it

Query hemnet.se (Swedish property portal) from a shell with the fpx CLI (@fetchproxy/cli) instead of running the hemnet-mcp server — resolve locations, search for-sale and sold listings, and read listing detail via one-shot GraphQL calls through a signed-in browser tab. Use when you want Hemnet data without the MCP, in a script, or on a machine where the MCP isn't installed.

What it does

Query hemnet.se (Swedish property portal) from a shell with the fpx CLI (@fetchproxy/cli) instead of running the hemnet-mcp server — resolve locations, search for-sale and sold listings, and read listing detail via one-shot GraphQL calls through a signed-in browser tab. Use when you want Hemnet data without the MCP, in a script, or on a machine where the MCP isn't installed.

The skill document

Hemnet via fpx (no MCP)

Hemnet fronts www.hemnet.se — including /graphql — with a Cloudflare managed challenge that 403s any plain curl/Node request. fpx routes the request through the user's own signed-in browser tab (the Transporter extension), which has already cleared the challenge, so the same anonymous GraphQL query succeeds. No Hemnet login is needed — just a normal open tab.

This is the same data the hemnet_* MCP tools return (money in SEK strings, areas in ), reached with one CLI call instead of a running server.

One-time setup

npm install -g @fetchproxy/cli            # provides `fpx`
fpx profile add hemnet --domain hemnet.se # only the fetch capability is needed
fpx pair -p hemnet                        # prints a pair code → approve in Transporter

Requirements: the Transporter browser extension installed, with an open www.hemnet.se tab, and its Chrome Site access allowing hemnet.se. Pairing persists — after the first approval every later fpx call reuses it.

Core call

Every query is a POST of {"query": "...", "variables": {...}} to the GraphQL endpoint. Send the body raw (no --json) so stdout is the GraphQL JSON, ready for jq:

fpx post-json 'https://www.hemnet.se/graphql' @query.json -p hemnet \
  | jq '.data'

@file reads the body from a file; a literal '{...}' string works too but shell-quoting the embedded query is fiddly — prefer a heredoc into a file.

Ready-to-run query bodies (autocomplete, for-sale search, listing detail, sold search) with jq recipes are in references/graphql-queries.md. Exhaustive field lists live in the repo at src/graphql.ts — the operations here are compact, live-verified subsets.

The one rule: resolve the location first

Hemnet searches take numeric location ids, never place names. Always autocomplete first, take the locationId, then search:

printf '{"query":"query($q:String!,$l:Int!){autocompleteLocations(query:$q,limit:$l){hits{locationId fullName parentFullName}}}","variables":{"q":"Höllviken","l":3}}' > /tmp/q.json
fpx post-json 'https://www.hemnet.se/graphql' @/tmp/q.json -p hemnet \
  | jq -r '.data.autocompleteLocations.hits[] | "\(.locationId)\t\(.fullName)"'
# 898675  Höllviken tätort

Exit codes (fetch verbs)

  • 0 — success (a GraphQL errors array can still ride in a 0 body; check it).
  • 2 — bridge unavailable: extension not connected or pairing pending → run fpx pair -p hemnet, confirm a hemnet tab is open.
  • 3 — bot wall: the tab hasn't cleared Cloudflare → open/refresh a www.hemnet.se tab and retry.
  • 4 — upstream non-2xx from Hemnet.

Notes

  • Anonymous reads only — this touches the same public GraphQL surface as the MCP; no account data. Stay within hemnet.se's terms.
  • fpx health -p hemnet shows bridge connection state when a call fails.
  • This project is developed and maintained by AI (Claude).

Related skills

Query homes.com (US real-estate portal) from a shell with the fpx CLI (@fetchproxy/cli) instead of running the homes-mcp server — search listings, resolve street addresses, fetch property detail/photos/ history, and read the signed-in user's saved homes, all through a one-shot call over their own signed-in browser tab. Use when you want homes.com data without the MCP, in a script, or on a machine where the MCP isn't installed.

1 installs

Search and analyse Swedish real estate on hemnet.se — active for-sale listings, sold prices (slutpriser), full listing details, photos, market statistics, address resolution, and a Swedish mortgage calculator. Use when the user asks about Swedish property, Hemnet, bostäder, lägenheter, villor, or slutpriser.

1 installs

Query redfin.com (US real-estate portal) from a shell with the fpx CLI (@fetchproxy/cli) instead of running the redfin-mcp server — resolve locations/addresses, search for-sale listings, read property detail (price, beds/baths, price history, tax history), market trends, comparable rentals, climate risk, photos, and (signed-in) saved homes and saved searches, via one-shot calls through a signed-in browser tab. Use when you want Redfin data without the MCP, in a script, or on a machine where the MCP isn't installed.

1 installs

Query compass.com (US real-estate portal) from a shell with the fpx CLI (@fetchproxy/cli) instead of running the compass-mcp server — search listings, get property/agent detail, price history, and resolve street addresses through one-shot fetches over a signed-in browser tab. Use when you want Compass data without the MCP, in a script, or on a machine where the MCP isn't installed.

1 installs

Query booli.se (Swedish property portal) from a shell with the fpx CLI (@fetchproxy/cli) instead of running the booli-mcp server — resolve areas, search for-sale and sold listings (slutpriser), and read property detail via one-shot GraphQL calls through a signed-in browser tab. Use when you want Booli data without the MCP, in a script, or on a machine where the MCP isn't installed.

Query zillow.com (US real-estate portal) from a shell with the fpx CLI (@fetchproxy/cli) instead of running the zillow-mcp server — search listings, pull a full property record by zpid, price/tax/Zestimate history, photos, market reports, and your signed-in saved searches/homes, all via one-shot HTTP calls through a signed-in browser tab. Use when you want Zillow data without the MCP, in a script, or on a machine where the MCP isn't installed.

1 installs