Hemnet.se API

Get Hemnet.se data with one API

The Hemnet API returns Swedish real-estate listings as clean JSON.

H
/hemnet/v1

4 active endpoints, on 0 and 1 credit tiers.

  • POST/hemnet/v1/search
  • POST/hemnet/v1/sold
  • POST/hemnet/v1/detail
  • POST/hemnet/v1/location

What Hemnet.se endpoints does ReefAPI ship?

4 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

4 endpoints

search

1 cr

Search Hemnet.se for-sale property listings by location, with structured filters.

required
location
optional
home_type, sort, page, price_min, price_max, rooms_min, rooms_max, living_area_min, living_area_max, land_area_min, land_area_max, price_per_m2_min, price_per_m2_max, year_min, year_max, keywords

sold

1 cr

Recently-SOLD property prices (slutpriser) by location, with the same filters as search.

required
location
optional
home_type, sort, page, price_min, price_max, rooms_min, rooms_max, living_area_min, living_area_max, land_area_min, land_area_max, price_per_m2_min, price_per_m2_max, year_min, year_max, keywords

detail

1 cr

Full record for a single listing by its Hemnet listing URL, slug or id (hemnet.se/bostad/<slug>).

required
url
optional

location

0 cr

Location resolver / autocomplete.

required
query
optional

Every parameter, every allowed value →

Hemnet.se API

3 of 4 endpoints, ready to run

View docs ↗

Search Hemnet.se for-sale property listings by location, with structured filters.

1 credit1 required · 0 optional
POST/hemnet/v1/search
idle
// Press "Try it" and this pane shows exactly what the
// live site returned this second — including an empty
// result, if that is the truth. No key, no account.

How the Hemnet.se API works

Hemnet.se is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 185 engines.

02
Call
POST /hemnet/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
0 or 1 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

Hemnet ids, units and date formats, and how sold records differ from for-sale ones

Hemnet is a Swedish site, so the money is SEK, the areas are square metres and the labels come back in Swedish. The bigger surprise is that a sold record and a for-sale record do not share an id space, so you cannot join them on id alone. Everything below was measured on Stockholm and Malmö inventory: a search on Stockholm apartments (2,561 hits), a sold lookup on Malmö apartments (60,266 hits) and a detail call on listing 21735707.

FieldWhat it actually containsWatch out for
location (input)free text resolved to Hemnet's numeric location id and echoed back as meta.location_idmeasured: Stockholm resolves to 18031, Malmö to 17989, Göteborgs kommun to 17920. Pass the number directly to skip the lookup.
id (search)the 8-digit for-sale listing id, also the last path segment of the url (21735707)this is the id the detail action takes
id (sold)an 18-19 digit sale id in its own namespace (5945646448150441589)it is NOT the listing id. A separate listing_id field carries the 8-digit one, and it comes back as an empty string when Hemnet no longer links the two.
published_at / sold_atunix epoch SECONDS delivered as a string with a trailing .0 ("1787780606.0")not milliseconds and not a number. Cast to float, then to int, before you convert it.
asking_price / final_price / fee / square_meter_priceobjects: {amount_sek, currency, formatted}read amount_sek for arithmetic; formatted is the Swedish display string ("3 275 000 kr")
feethe monthly bostadsrätt charge in SEKsearch formats it "5 114 kr/mån", detail formats the same value "5 114 kr" with no suffix. Both are per month.
price_change (sold)a formatted string, not a number: "±0 %", "-1 %"compute the percentage yourself from asking_price.amount_sek and final_price.amount_sek if you need arithmetic
housing_form / housing_form_symbolSwedish label plus an enum: Lägenhet/APARTMENT, Villa/HOUSEfilter on the symbol, display the label
rooms / living_area_m2floats from search (3.0, 54.0), ints from detail (3, 54)same listing, two numeric types
areanull on every search row; populated on detail ("Årsta")on search rows the neighbourhood lives in location_description ("Årsta, Stockholms kommun") instead
page / max_pages50 listings per page, max_pages 50meta.total can be far larger than what you can page to. Page 51 returns ok:true with count 0, not an error.

meta.total is Hemnet's own hit count, not what you can retrieve: the Malmö sold search reported total 60266 and the window still stops at 50 pages / 2500 rows. Narrow with price, area, rooms or home_type rather than paging deeper.

What people build with Hemnet.se

The jobs this data is most often used for.

4

endpoints

0/1

credits per call

01

Investors call search and sold to compare asking and sold prices.

02

Dashboards use detail and fee to enrich a listing.

03

Analysts use location and sold to track Swedish market trends.

What Hemnet.se data costs

The cheapest call here is 0 credits, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 185 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/hemnet/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"location":"Stockholm"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/hemnet/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "location": "Stockholm"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Hemnet.se.

Get a free key →
Which action gives me the price a property actually sold for?

The sold action. search returns properties currently on the market and its price field is the asking price (utgångspris) only. sold returns slutpriser and carries both: asking_price and final_price, plus price_change as a display string. A measured Malmö apartment sold at 1,475,000 SEK against a 1,495,000 SEK asking price, reported as "-1 %".

Why is area null on every search result?

Because the search listing card does not publish a separate neighbourhood field. The value is there, it is just in location_description instead, formatted as neighbourhood plus municipality ("Årsta, Stockholms kommun"). Measured on 50 Stockholm apartment rows and 50 Stockholm villa rows: area was null on all 100. The detail action does fill area ("Årsta") and adds post_code, so call detail when you need the field split out.

The listing ids from sold do not match anything from search. Why?

They are different id spaces. A for-sale listing is an 8-digit id (21735707) under /bostad/; a sold record is an 18-19 digit sale id (5945646448150441589) under /salda/. Sold rows carry a listing_id field that holds the original 8-digit id when Hemnet still links them, but it is an empty string on plenty of records, so do not build a pipeline that assumes the join always resolves.

days_on_hemnet and times_viewed came back 0. Is the detail action broken?

No, those are real zeros for a listing that has just gone up. A listing published two days before the call returned days_on_hemnet 0 and times_viewed 0; an older Stockholm villa returned 124 days and 18,166 views on the same fields in the same kind of call. Zero means new here, not missing.

What does fee mean, and do houses have one?

fee is the monthly avgift a bostadsrätt owner pays the housing association, in SEK. It is the number Swedish buyers compare almost as closely as the price, which is why the sort enum includes fee_low. Freehold properties (tenure Äganderätt, typically villa and radhus) have no association charge. land_area_m2 works the other way round: null on every apartment measured, 613.0 on the villa.

How deep can I page, and why is total so much bigger?

50 listings per page and 50 pages, so 2,500 rows is the ceiling. meta.total reports Hemnet's own hit count, which was 60,266 on the Malmö sold search, and meta.max_pages tells you the real limit in the same response. Asking for page 51 returns ok:true with count 0 rather than an error, so check count rather than assuming a 200 means rows. To get past 2,500, split the query by price band, room count or a narrower location id.

Can I search by municipality or only by city?

Both, plus county and district. The location action shows what a free-text string will resolve to: "Göteborg" returned 10 suggestions typed MUNICIPALITY (Göteborgs kommun, id 17920) and DISTRICT (Göteborg - Innerstaden, Göteborg - Östra and so on), with the municipality picked as resolved. Call location first when you want to be sure which id a search will use, or pass a numeric id straight to search.

What is the Hemnet.se API?

Hemnet.se API is a ReefAPI endpoint group for hemnet.se It returns live JSON through POST requests under /hemnet/v1.

Is the Hemnet.se API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Hemnet.se calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Hemnet.se login or account?

No login to Hemnet.se is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Hemnet.se data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Hemnet.se API use?

Hemnet.se actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Hemnet.se from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call hemnet actions with the same key, credit pool and JSON envelope used by normal REST requests.

Is the Hemnet.se API a Hemnet.se scraper?

It is the managed alternative to a DIY Hemnet.se scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same hemnet.se back as clean JSON.

11 Real Estate APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Hemnet.se, you are one call away from the rest of the category — no second contract, no second integration.

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 184 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts.