REST API reference

Hemnet API

13 endpoints for Hemnet. Each one is a POST with a JSON body, called with your API key.

Base URL
https://cotlet.dev/api/v1/hemnet
Connects with
Your own Hemnet account (Mitt Hemnet)
Integration page
Hemnet
Hemnet Endpoints
Endpoint Access Description
search_listings read Homes for sale and coming to market (kommande), with price, fee, rooms and area.
get_listing read Full listing: price, monthly fee, area, rooms, viewing times, bidding status and broker.
search_sold_prices read Sold homes (slutpriser) with final price, asking price and sale date.
list_saved_homes read Homes you saved, with collection, status (for sale, bidding, sold) and final price when sold.
list_collections read Your collections (samlingar) of saved homes, with who they are shared with.
list_upcoming_viewings read Viewing times of your saved homes, soonest first, with address and broker.
list_saved_searches read Your saved searches with filters and notification settings.
list_followed_homes read Your own home and other homes you follow, with the value Hemnet shows over time.
save_home write Save a listing to your saved homes, optionally into one of your collections.
remove_saved_home write Remove a listing from your saved homes.
create_saved_search write Save a search and get notified about new homes that match it.
delete_saved_search write Delete one of your saved searches and its notifications.
follow_home write Follow the value of any home by address, on the market or not.

POST https://cotlet.dev/api/v1/hemnet/search_listings

Returns homes for sale in an area that match your filters, and homes coming to market unless include_upcoming is false. Each item has the asking price, monthly fee, rooms and living area. Pages hold up to 50 homes; pass next_cursor back as cursor for the next page. Use listing_id with get_listing or save_home.

Parameters

Parameters: search_listings
NameTypeDescription
location required string Area, municipality or street, e.g. "Vasastan, Stockholm".
housing_types string[] Any of apartment, villa, townhouse, holiday_home, plot, farm. Default: all.
price_min integer Minimum asking price in SEK.
price_max integer Maximum asking price in SEK.
rooms_min integer Minimum number of rooms.
living_area_min integer Minimum living area in m².
include_upcoming boolean Include homes coming to market. Default: true.
cursor string Next page cursor from the previous call.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/hemnet/search_listings \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"location":"Vasastan, Stockholm"}'
Python
result = client.call("hemnet", "search_listings", {"location":"Vasastan, Stockholm"})
Node.js
const result = await cotlet.call('hemnet', 'search_listings', {"location":"Vasastan, Stockholm"});
CLI
cotlet call hemnet search_listings --data '{"location":"Vasastan, Stockholm"}'

Example response

{
  "listings": [
    {
      "listing_id": "l_21730488",
      "address": "Karlbergsvägen 120, Vasastan, Stockholm",
      "type": "apartment",
      "rooms": 3,
      "living_area_m2": 68,
      "asking_price_sek": 5450000,
      "monthly_fee_sek": 4120,
      "status": "for_sale"
    }
  ],
  "next_cursor": null
}

POST https://cotlet.dev/api/v1/hemnet/get_listing

Returns one listing as the listing page shows it: asking price, monthly fee, rooms, living area, the broker, viewing times and whether bidding has started. Use it after search_listings to read a home in full.

Parameters

Parameters: get_listing
NameTypeDescription
listing_id required string Listing ID from search_listings or list_saved_homes.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/hemnet/get_listing \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"listing_id":"listing_8c41d2"}'
Python
result = client.call("hemnet", "get_listing", {"listing_id":"listing_8c41d2"})
Node.js
const result = await cotlet.call('hemnet', 'get_listing', {"listing_id":"listing_8c41d2"});
CLI
cotlet call hemnet get_listing --data '{"listing_id":"listing_8c41d2"}'

Example response

{
  "listing_id": "l_21730488",
  "address": "Karlbergsvägen 120, Vasastan, Stockholm",
  "type": "apartment",
  "rooms": 3,
  "living_area_m2": 68,
  "asking_price_sek": 5450000,
  "monthly_fee_sek": 4120,
  "bidding_started": false,
  "viewings": [
    "2026-10-17T12:00:00+02:00"
  ],
  "broker": "Exempel Mäkleri, Vasastan",
  "url": "https://www.hemnet.se/bostad/l_21730488"
}

POST https://cotlet.dev/api/v1/hemnet/search_sold_prices

Returns homes sold in an area, with final price, asking price, how far the sale landed above or below asking, and the sale date. Narrow it with sold_since, housing type and rooms. Pages hold up to 100 homes.

Parameters

Parameters: search_sold_prices
NameTypeDescription
location required string Area, municipality or street, e.g. "Vasastan, Stockholm".
housing_types string[] Any of apartment, villa, townhouse, holiday_home, plot, farm.
sold_since date Only homes sold on or after this date.
rooms_min integer Minimum number of rooms.
limit integer 1 to 100. Default: 50.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/hemnet/search_sold_prices \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"location":"Vasastan, Stockholm","housing_types":["apartment"],"rooms_min":3,"sold_since":"2026-01-01","limit":100}'
Python
result = client.call("hemnet", "search_sold_prices", {"location":"Vasastan, Stockholm","housing_types":["apartment"],"rooms_min":3,"sold_since":"2026-01-01","limit":100})
Node.js
const result = await cotlet.call('hemnet', 'search_sold_prices', {"location":"Vasastan, Stockholm","housing_types":["apartment"],"rooms_min":3,"sold_since":"2026-01-01","limit":100});
CLI
cotlet call hemnet search_sold_prices --data '{"location":"Vasastan, Stockholm","housing_types":["apartment"],"rooms_min":3,"sold_since":"2026-01-01","limit":100}'

Example response

{
  "sold": [
    {
      "address": "Odengatan 40, Vasastan, Stockholm",
      "rooms": 3,
      "living_area_m2": 71,
      "asking_price_sek": 4250000,
      "final_price_sek": 4500000,
      "over_asking_pct": 5.9,
      "sold_on": "2026-09-12"
    },
    {
      "address": "Sveavägen 98, Vasastan, Stockholm",
      "rooms": 3,
      "living_area_m2": 74,
      "asking_price_sek": 5200000,
      "final_price_sek": 5150000,
      "over_asking_pct": -1,
      "sold_on": "2026-06-03"
    }
  ]
}

POST https://cotlet.dev/api/v1/hemnet/list_saved_homes

Returns the homes in your saved homes, with the collection each is in. Status is for_sale, bidding or sold; a sold home carries its final price. Pass collection_id to see one collection only.

Parameters

Parameters: list_saved_homes
NameTypeDescription
collection_id string Only homes in this collection, from list_collections.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/hemnet/list_saved_homes \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("hemnet", "list_saved_homes")
Node.js
const result = await cotlet.call('hemnet', 'list_saved_homes');
CLI
cotlet call hemnet list_saved_homes

Example response

{
  "saved_homes": [
    {
      "listing_id": "l_21730488",
      "address": "Karlbergsvägen 120, Vasastan, Stockholm",
      "collection": "Flytt 2027",
      "status": "for_sale",
      "asking_price_sek": 5450000
    },
    {
      "listing_id": "l_21644102",
      "address": "Hornsgatan 55, Södermalm, Stockholm",
      "collection": "Flytt 2027",
      "status": "sold",
      "final_price_sek": 6100000
    }
  ]
}

POST https://cotlet.dev/api/v1/hemnet/list_collections

Returns your collections with the number of homes in each and the people each is shared with. Use collection_id with list_saved_homes and save_home.

Parameters

No parameters.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/hemnet/list_collections \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("hemnet", "list_collections")
Node.js
const result = await cotlet.call('hemnet', 'list_collections');
CLI
cotlet call hemnet list_collections

Example response

{
  "collections": [
    {
      "collection_id": "col_flytt27",
      "name": "Flytt 2027",
      "homes": 2,
      "shared_with": [
        "Maria"
      ]
    },
    {
      "collection_id": "col_sommar",
      "name": "Sommarstuga",
      "homes": 0,
      "shared_with": []
    }
  ]
}

POST https://cotlet.dev/api/v1/hemnet/list_upcoming_viewings

Returns the viewings of your saved homes that have not happened yet, soonest first, with address and broker. It looks 14 days ahead unless you set until.

Parameters

Parameters: list_upcoming_viewings
NameTypeDescription
until date Only viewings up to this date. Default: 14 days ahead.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/hemnet/list_upcoming_viewings \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"until":"2026-10-18"}'
Python
result = client.call("hemnet", "list_upcoming_viewings", {"until":"2026-10-18"})
Node.js
const result = await cotlet.call('hemnet', 'list_upcoming_viewings', {"until":"2026-10-18"});
CLI
cotlet call hemnet list_upcoming_viewings --data '{"until":"2026-10-18"}'

Example response

{
  "viewings": [
    {
      "listing_id": "l_21730488",
      "address": "Karlbergsvägen 120, Vasastan, Stockholm",
      "starts_at": "2026-10-17T12:00:00+02:00",
      "broker": "Exempel Mäkleri, Vasastan",
      "bidding_started": false
    }
  ]
}

POST https://cotlet.dev/api/v1/hemnet/list_saved_searches

Returns your saved searches with their filters, how you are notified (email or push) and how often. Use saved_search_id with delete_saved_search.

Parameters

No parameters.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/hemnet/list_saved_searches \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("hemnet", "list_saved_searches")
Node.js
const result = await cotlet.call('hemnet', 'list_saved_searches');
CLI
cotlet call hemnet list_saved_searches

Example response

{
  "saved_searches": [
    {
      "saved_search_id": "ss_48213",
      "location": "Täby kommun",
      "filters": {
        "housing_types": [
          "villa"
        ],
        "price_max": 9000000,
        "rooms_min": 5
      },
      "notify_by": "push",
      "frequency": "live"
    }
  ]
}

POST https://cotlet.dev/api/v1/hemnet/list_followed_homes

Returns the homes whose value you follow, your own and others, each with the value Hemnet shows and how it changed over time. The value is Hemnet's estimate. Homes that are not for sale can be followed too.

Parameters

No parameters.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/hemnet/list_followed_homes \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("hemnet", "list_followed_homes")
Node.js
const result = await cotlet.call('hemnet', 'list_followed_homes');
CLI
cotlet call hemnet list_followed_homes

Example response

{
  "followed_homes": [
    {
      "address": "Storgatan 1, Uppsala",
      "estimated_value_sek": 3980000,
      "change_since_start_pct": 2.4,
      "history": [
        {
          "date": "2026-04-01",
          "value_sek": 3890000
        },
        {
          "date": "2026-10-01",
          "value_sek": 3980000
        }
      ]
    }
  ]
}

Save home

write Confirm

POST https://cotlet.dev/api/v1/hemnet/save_home

Saves a listing to your saved homes, and into a collection when collection_id is set. People a collection is shared with see the new home, which is why this asks first. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: save_home
NameTypeDescription
listing_id required string Listing ID from search_listings or list_saved_homes.
collection_id string Collection from list_collections.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/hemnet/save_home \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"listing_id":"listing_8c41d2"}'
Python
result = client.call("hemnet", "save_home", {"listing_id":"listing_8c41d2"})
Node.js
const result = await cotlet.call('hemnet', 'save_home', {"listing_id":"listing_8c41d2"});
CLI
cotlet call hemnet save_home --data '{"listing_id":"listing_8c41d2"}'

Example response

{
  "listing_id": "l_21730488",
  "saved": true,
  "collection_id": "col_flytt27"
}

POST https://cotlet.dev/api/v1/hemnet/remove_saved_home

Removes a listing from your saved homes and from its collection. It runs without asking: nobody is notified and save_home undoes it in one call.

Parameters

Parameters: remove_saved_home
NameTypeDescription
listing_id required string Listing ID from search_listings or list_saved_homes.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/hemnet/remove_saved_home \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"listing_id":"listing_8c41d2"}'
Python
result = client.call("hemnet", "remove_saved_home", {"listing_id":"listing_8c41d2"})
Node.js
const result = await cotlet.call('hemnet', 'remove_saved_home', {"listing_id":"listing_8c41d2"});
CLI
cotlet call hemnet remove_saved_home --data '{"listing_id":"listing_8c41d2"}'

Example response

{
  "listing_id": "l_21644102",
  "saved": false
}

Follow home

write

POST https://cotlet.dev/api/v1/hemnet/follow_home

Adds a home to the homes whose value you follow, for sale or not. It changes only your own list, so it runs without asking. Unfollowing is done in the Hemnet app.

Parameters

Parameters: follow_home
NameTypeDescription
address required string Street address with town, e.g. "Storgatan 1, Uppsala".

Request

cURL
curl -X POST https://cotlet.dev/api/v1/hemnet/follow_home \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"address":"Storgatan 1, Uppsala"}'
Python
result = client.call("hemnet", "follow_home", {"address":"Storgatan 1, Uppsala"})
Node.js
const result = await cotlet.call('hemnet', 'follow_home', {"address":"Storgatan 1, Uppsala"});
CLI
cotlet call hemnet follow_home --data '{"address":"Storgatan 1, Uppsala"}'

Example response

{
  "address": "Storgatan 1, Uppsala",
  "following": true,
  "estimated_value_sek": 3980000
}