Hemnet APIhemnet.se ↗
Access Swedish real estate listings from Hemnet.se via API. Search properties with pagination and fetch detailed specs, coordinates, pricing, and images.
What is the Hemnet API?
The Hemnet API exposes 2 endpoints for accessing real estate listings from Sweden's largest property marketplace. The search endpoint returns paginated listing summaries covering price, address, living area, rooms, and image URLs, while get_details retrieves full property records including coordinates, tenure type, operating costs, and the complete image gallery for any active or sold listing.
curl -X GET 'https://api.parse.bot/scraper/18fbb397-f067-4333-a9ff-a0b83df48638/search?page=1&max_pages=1' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace hemnet-se-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Hemnet.se Real Estate API — browse Swedish property listings."""
from parse_apis.hemnet_se_real_estate_api import Hemnet, ListingNotFound
client = Hemnet()
# Browse the latest listings — limit= caps TOTAL items fetched across pages.
for summary in client.listingsummaries.list(limit=5):
print(summary.address, summary.price, summary.housing_form)
# Drill into one listing for full details (operating cost, tenure, coordinates).
first = client.listingsummaries.list(limit=1).first()
if first:
listing = first.details()
print(listing.address, listing.tenure, listing.operating_cost)
if listing.coordinates:
print(listing.coordinates.latitude, listing.coordinates.longitude)
# Fetch a listing directly by slug via the root collection.
try:
detail = client.listings.get(slug=first.slug)
print(detail.address, detail.rooms, detail.living_area)
except ListingNotFound as exc:
print(f"Listing gone: {exc.slug}")
print("exercised: listingsummaries.list / summary.details / listings.get")Browse real estate listings on Hemnet.se with pagination support. Returns listing summaries including price, address, area, image URLs, and basic specs. Results are ordered by recency (newest first). Each page returns up to 50 listings. Use max_pages to fetch multiple pages sequentially in a single call.
| Param | Type | Description |
|---|---|---|
| page | integer | Starting page number for pagination. |
| max_pages | integer | Maximum number of pages to scrape sequentially. |
{
"type": "object",
"fields": {
"listings": "array of listing summary objects",
"pages_scraped": "integer, number of pages successfully scraped",
"total_results": "integer, total number of listings returned"
},
"sample": {
"data": {
"listings": [
{
"id": "21667767",
"url": "https://www.hemnet.se/bostad/lagenhet-4rum-torvalla-ostersunds-kommun-ottfjallsvagen-52-21667767",
"slug": "lagenhet-4rum-torvalla-ostersunds-kommun-ottfjallsvagen-52-21667767",
"price": "1 395 000 kr",
"rooms": "4 rum",
"address": "Ottfjällsvägen 52",
"city_area": "Torvalla, Östersunds kommun",
"plot_size": null,
"image_urls": [
"https://bilder.hemnet.se/images/itemgallery_cut/a0/a4/a0a4df7f369afd2af3944d4489a18bbe.jpg"
],
"description": "Välkommen till ditt nya drömhem...",
"living_area": "111,5 m²",
"monthly_fee": "8 208 kr/mån",
"housing_form": "Lägenhet",
"published_at": "1781165096.0",
"broker_agency": "Bjurfors Östersund",
"days_on_hemnet": 0
}
],
"pages_scraped": 1,
"total_results": 50
},
"status": "success"
}
}About the Hemnet API
Search Listings
The search endpoint returns an array of listing summary objects from Hemnet. Each object includes fields such as id, address, city_area, price, url, image_urls, living_area, rooms, plot_size, and monthly_fee. The page parameter sets the starting page, and max_pages controls how many pages are fetched sequentially in a single call. The response also includes pages_scraped and total_results integers so you can track pagination state across requests.
Listing Details
The get_details endpoint accepts a slug string derived from a Hemnet listing URL — formatted as <property-type>-<rooms>-<area>-<municipality>-<street>-<id>. It returns the full detail record for that listing: price, rooms, tenure (e.g. Bostadsrätt or Äganderätt), address, city_area, plot_size, image_urls, and a coordinates object with numeric latitude and longitude fields. The endpoint works for both currently active listings and sold or deactivated ones, which makes it useful for historical price lookups when you already hold a slug.
Data Coverage and Scope
All data is scoped to Hemnet.se, which covers residential property listings across Sweden. Slugs needed by get_details can be extracted from the url field returned by search, making the two endpoints composable. Fields such as plot_size, monthly_fee, and coordinates are nullable — not every listing type carries all fields, so your integration should handle null values gracefully.
The Hemnet API is a managed, monitored endpoint for hemnet.se — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when hemnet.se changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official hemnet.se API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate Swedish property prices by city area using the
city_areaandpricefields from search results. - Build a map-based property browser using
coordinateslatitude/longitude fromget_details. - Track sold listing prices over time by querying
get_detailswith slugs from historical Hemnet URLs. - Compare monthly fees and living area across apartments in a neighbourhood using
monthly_feeandliving_area. - Feed listing images into a property recommendation UI using the
image_urlsgallery fromget_details. - Identify freehold vs. leasehold properties in a region by filtering on the
tenurefield. - Monitor new listings with sequential pagination using the
pageandmax_pagesparameters insearch.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Hemnet offer an official developer API?+
What does the `get_details` endpoint return that `search` does not?+
get_details endpoint adds tenure, coordinates (latitude and longitude), a full image_urls gallery, and the complete listing description. The search endpoint returns summary fields only — enough to display a list but not a full property page.Can I filter search results by property type, price range, or number of rooms?+
search endpoint does not currently expose filter parameters for property type, price range, or room count. It returns paginated listings and exposes those fields in the response for client-side filtering. You can fork the API on Parse and revise it to add filter parameters targeting specific listing categories.Are sold or deactivated listings accessible?+
get_details endpoint works for both active and sold or deactivated listings as long as you supply a valid slug. The search endpoint returns currently active listings; it does not expose a sold-listings archive endpoint. You can fork the API on Parse and revise it to add a dedicated sold-listings search endpoint.How reliable are the `coordinates` and `plot_size` fields?+
plot_size is only present for property types that include land, such as houses and land plots. Your code should check for null before using either field.