# Hemnet Scraper - Swedish Property Listings & Sold Prices (`sian.agency/hemnet-property-scraper`) Actor

Scrape hemnet.se: homes for sale and sold prices (slutpriser) across Sweden. Asking price, final price, avgift, boarea, rooms, year built, energy class and broker contacts.

- **URL**: https://apify.com/sian.agency/hemnet-property-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Real estate, Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.32 / 1,000 homes for sales

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Hemnet Scraper — Swedish Property Listings & Sold Prices 🇸🇪

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Rightmove Property Scraper](https://img.shields.io/badge/Store-Rightmove%20Property%20Scraper-00DEB6)](https://apify.com/sian.agency/rightmove-property-scraper?fpr=sian) [![Funda.nl Scraper](https://img.shields.io/badge/Store-Funda.nl%20Scraper-FF6200)](https://apify.com/sian.agency/funda-property-scraper?fpr=sian) [![Smart Idealista Scraper](https://img.shields.io/badge/Store-Smart%20Idealista%20Scraper-1AE392)](https://apify.com/sian.agency/smart-idealista-scraper?fpr=sian)

#### 🏘️ Slutpriser as a first-class operation — the final price beside the asking price on every sale

##### Homes for sale and 1.6 million sold records across Sweden, as clean rows

Hemnet is where roughly nine in ten Swedish homes are advertised, and it publishes something almost no other portal does: the price each one actually sold for. This Hemnet scraper returns both. Ask for homes on the market and you get asking price, avgift, rooms, boarea, floor, price per m², coordinates and the estate agent. Ask for slutpriser and every row carries the final price, the asking price and the percentage between them.

Type a place name — Stockholm, Nacka kommun, Vasastan, Majorna — and it resolves against Hemnet's own index before the search runs. No location id to look up, no proxy to configure, no login. Test it with 25 properties free.

### 🔎 What is the Hemnet Scraper — and when should you use it?

The **Hemnet Scraper** turns every for-sale listing and every sold-price record published on hemnet.se into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

**Use it when you need:** asking price, monthly fee, rooms, living area in m², floor, coordinates and the estate agent on any Swedish listing. The sold operation adds the final price and how far above or below the asking price it landed. Switch on detail expansion and each row also carries year built, tenure, energy class, yearly running cost, supplemental area, postal code, the housing co-operative and the broker's direct email and phone.

**Use something else when:** the homes you want are not advertised in Sweden. Use [Rightmove Property Scraper](https://apify.com/sian.agency/rightmove-property-scraper?fpr=sian) for UK homes for sale and to let, with the sold-price history sitting behind each address. Use [Funda.nl Scraper](https://apify.com/sian.agency/funda-property-scraper?fpr=sian) for the Dutch market, where Funda holds the position Hemnet holds in Sweden. Use [Otodom Property Scraper](https://apify.com/sian.agency/otodom-property-scraper?fpr=sian) for Poland, priced in PLN per m² across sale and rental stock. This actor reads what hemnet.se shows the public. Saved searches, bid histories and the valuation tools behind a Hemnet login are out of scope, and so are the Swedish homes that never reach Hemnet at all.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/hemnet-property-scraper

**Your agent can pay for its own runs.** This Actor is eligible for [agentic payments](https://docs.apify.com/platform/actors/publishing/monetize), so an agent can discover it, run it and settle the bill over [x402](https://www.x402.org/) (USDC on Base) or [Skyfire](https://www.skyfire.xyz/) — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want Swedish property listings and slutpriser from Hemnet using the Apify Actor `sian.agency/hemnet-property-scraper`.

Use it when I need: asking price, monthly fee, rooms, living area in m², floor, coordinates and the estate agent on any Swedish listing. The sold operation adds the final price and how far above or below the asking price it landed. Switch on detail expansion and each row also carries year built, tenure, energy class, yearly running cost, supplemental area, postal code, the housing co-operative and the broker's direct email and phone.

Don't use it when: the homes you want are not advertised in Sweden — use rightmove-property-scraper or funda-property-scraper or otodom-property-scraper instead.

How to call it: put a place in `location` — a city, a kommun, a län or a district such as Vasastan — and pick an `operation`. `search` returns homes currently for sale, `sold` returns the slutpriser archive with the final price beside the asking price, `detail` expands hemnet.se addresses you already have via `listingUrls`. Narrow with `propertyTypes`, `priceMin` and `priceMax`, `roomsMin` and `roomsMax`, `livingAreaMin` and `livingAreaMax`, `maxFee` and `constructionYearMin`, then order the result with `sort`. On `sold`, `soldSince` decides how far back to reach. `includeDetails` adds year built, energy class, running cost and broker contacts to every row for an extra charge. A search you already built on hemnet.se can be pasted into `searchUrls` instead.

Start with this input:
{
  "operation": "search",
  "location": "Stockholm",
  "propertyTypes": [
    "APARTMENTS"
  ],
  "maxResults": 100
}

Ask me which place in Sweden to cover, and whether they want homes on the market now or the sold-price archive, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *Pull every bostadsrätt sold in Vasastan over the past 12 months and show me the final price against the asking price.*
- *List apartments for sale in Göteborg under 4 million kronor with a monthly fee below 4,000, sorted by price per m².*
- *Give me this week's new house listings in Nacka kommun with the broker's name, email and phone on each one.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/hemnet-property-scraper.md](https://apify.com/sian.agency/hemnet-property-scraper.md).

### 📋 Overview

**Type a place, pick for-sale or sold, press Run** — this Hemnet scraper turns any Swedish property search into a spreadsheet, usually in under a minute.

**Why professionals choose this Hemnet scraper:**

- ✅ **Both sides of the market**: homes for sale and Hemnet's full slutpriser archive, from one input form
- 📉 **The asking-to-final gap on every sale**: `askingPrice`, `finalPrice` and `priceChangePercent` together — the number Swedish valuation actually runs on
- 🗺️ **Place names, not ids**: a city, a kommun, a län or a neighbourhood, matched against Hemnet's own place index
- ⚡ **500 properties per request**: a whole-city sweep is a normal run here, not a job you have to split
- 💰 **From $1.50 per 1,000 properties**: pay per row delivered, never for a failed one
- 🧑‍💼 **Broker email and direct phone**: switch on detail expansion and every listing gains a working contact
- 🧾 **The fields Swedish buyers screen on**: avgift, boarea, biarea, rum, våning, byggår, energiklass and the BRF
- 🔓 **Nothing to configure**: no proxy picker, no residential-proxy toggle, no third-party key — type a place and press Run

### ✨ Features

- 🔍 **Homes for sale**: every active listing in a place, filtered by price, rooms, area, fee and year built
- 💰 **Sold prices (slutpriser)**: the final price, the asking price and the percentage between them, back through the archive
- 📄 **Listing detail**: year built, tenure, energy class, yearly running cost, biarea, postal code, BRF and broker contacts
- 🏠 **Six property types**: bostadsrätt, villa, radhus, fritidshus, tomt and gård — or leave it empty and take them all
- 🗓️ **Sold-window control**: last month, 3, 6 or 12 months, or the whole archive
- 📐 **Price per m² sorting**: the ordering Swedish buyers and analysts actually compare on
- 📍 **Coordinates on every row**: latitude and longitude, so results drop straight onto a map
- 📸 **Full photo sets**: the main image plus every gallery URL and a count
- 🔗 **Paste-a-URL mode**: reuse a search you already built on hemnet.se, filters and all
- 📊 **Export anywhere**: JSON, CSV, Excel, or straight into your own code via the API

### 🎬 Quick Start

Give it a place in Sweden and choose what you want back. No account, no API key, no proxy setup — press Run and the rows arrive.

```bash
curl -X POST https://api.apify.com/v2/acts/sian.agency~hemnet-property-scraper/runs?token=[YOUR_TOKEN] \
-d '{"operation": "search", "location": "Stockholm", "propertyTypes": ["APARTMENTS"]}'
```

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Name the place

Type it the way you would on Hemnet. A city (Stockholm, Göteborg, Malmö), a kommun (Nacka kommun), a län (Skåne län) or a district (Vasastan, Östermalm, Majorna) all work.

#### Step 2: Choose for sale or sold

Homes for Sale returns what is on the market right now. Sold Prices returns the slutpriser archive with the final price on every record. Then set a price band, a room count or a fee ceiling if you want one.

#### Step 3: Press Run

The first rows land within seconds. Download as CSV, JSON or Excel, or pull them from the API.

**That's it! In about a minute, you'll have:**

- Every matching property with price, fee, rooms, boarea, floor and coordinates
- The named estate agent and agency on each one
- A run report telling you what you got and exactly what it cost

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| operation | string | No | `search` (homes for sale), `sold` (slutpriser) or `detail` (expand listing URLs) |
| location | string | No | A place in Sweden: city, kommun, län or district |
| propertyTypes | array | No | `APARTMENTS`, `HOUSES`, `ROW_HOUSES`, `VACATION_HOMES`, `PLOTS`, `HOMESTEADS`, `OTHERS`. Empty takes every type |
| maxResults | integer | No | Stop after this many rows (default 100) |
| soldSince | string | No | Sold window: `1m`, `3m`, `6m`, `12m` or `all` |
| priceMin / priceMax | integer | No | Asking-price band in SEK. 0 means no bound |
| roomsMin / roomsMax | integer | No | Room count band. Swedish listings count every room, not only bedrooms |
| livingAreaMin / livingAreaMax | integer | No | Boarea band in m² |
| maxFee | integer | No | Highest monthly avgift to the housing co-operative |
| constructionYearMin | integer | No | Skip anything built before this year |
| includeDetails | boolean | No | Add year built, energy class, running cost and broker contacts to each row |
| listingUrls | array | No | hemnet.se listing addresses for the `detail` operation |
| searchUrls | array | No | Search addresses copied from hemnet.se, filters included |
| locationIds | array | No | Hemnet's own place ids, if you already have them |
| sort | string | No | `NEWEST`, `LOWEST_PRICE`, `LOWEST_PRICE_PER_M2`, `LARGEST_LIVING_AREA`, `LOWEST_FEE` and five more |

**Example — apartments for sale in Stockholm:**

```json
{
  "operation": "search",
  "location": "Stockholm",
  "propertyTypes": ["APARTMENTS"],
  "priceMax": 5000000,
  "maxFee": 4500,
  "sort": "LOWEST_PRICE_PER_M2",
  "maxResults": 500
}
```

**Example — what sold in Vasastan over the past year:**

```json
{
  "operation": "sold",
  "location": "Vasastan",
  "soldSince": "12m",
  "maxResults": 1000
}
```

**Example — expand listings you already have:**

```json
{
  "operation": "detail",
  "listingUrls": [
    "https://www.hemnet.se/bostad/lagenhet-3rum-vasastan-stockholms-kommun-odengatan-1-21740737"
  ]
}
```

### 📤 Output

Results are saved to the Apify dataset with **55+ fields** including:

| Field | Type | Description |
|-------|------|-------------|
| streetAddress | string | Street address as Hemnet publishes it |
| askingPrice | number | Utgångspris in SEK |
| finalPrice | number | Slutpris — what it actually sold for (sold rows) |
| priceChangePercent | string | How far the final price landed above or below the asking price |
| squareMeterPrice | number | Price per m² |
| monthlyFee | number | Monthly avgift to the BRF |
| rooms | number | Room count (rum) |
| livingArea | number | Boarea in m² |
| supplementalArea | number | Biarea in m² (detail) |
| floor | string | Floor, written the Swedish way as "vån 2/5" |
| constructionYear | string | Year built (detail) |
| energyClass | string | Energy classification A–G (detail) |
| housingForm | string | Villa, Lägenhet, Radhus, Fritidshus, Tomt, Gård |
| tenure | string | Bostadsrätt or äganderätt (detail) |
| brokerName / brokerEmail / brokerPhone | string | The named agent and how to reach them (detail) |
| agencyName / agencyPhone / agencyWebsite | string | The agency behind the listing |
| brfName / brfRegistrationNumber | string | Housing co-operative and its registration number (detail) |
| latitude / longitude | number | Exact coordinates |
| imageUrl / imageUrls / imageCount | string, array, number | Main photo and the full gallery |
| daysOnHemnet | number | How long it has been on the market |
| soldAt | string | Sale date (sold rows) |

**Example row:**

```json
{
  "listingId": "21715829",
  "url": "https://www.hemnet.se/bostad/villa-8rum-ritorp-sodertalje-kommun-fridshallsvagen-14-21715829",
  "listingStatus": "for_sale",
  "streetAddress": "Fridshällsvägen 14",
  "locationName": "Ritorp, Södertälje kommun",
  "latitude": 59.2275429,
  "longitude": 17.63661,
  "askingPrice": 5695000,
  "askingPriceText": "5 695 000 kr",
  "currency": "SEK",
  "housingForm": "Villa",
  "housingFormCode": "HOUSE",
  "rooms": 8,
  "roomsText": "8 rum",
  "livingArea": 90,
  "livingAreaText": "90+90 m²",
  "landArea": "1 512 m²",
  "isNewConstruction": false,
  "publishedAt": "2026-08-29T17:20:31.000Z",
  "brokerName": "Manhal Anis",
  "agencyName": "Erik Olsson Fastighetsförmedling",
  "imageUrl": "https://bilder.hemnet.se/images/itemgallery_cut/56/bb/56bb0f69fd95c843c8036cc6d9ed9e67.jpg",
  "imageCount": 5,
  "searchLocation": "Stockholms län, Sverige",
  "searchLocationId": "17744",
  "status": "success"
}
```

### 💼 Use Cases & Examples

#### 1. Slutpris Analysis & Valuation

**Valuers and agents pricing a home against what the street actually paid.**

**Input:** `operation: "sold"`, a district, `soldSince: "12m"`
**Output:** every sale with asking price, final price and the percentage between them
**Use:** build comps that reflect the bidding, not the listing. That gap exists in no public Swedish statistic.

#### 2. Broker & Agency Lead Generation

**Proptech vendors and recruiters selling to Swedish estate agents.**

**Input:** a kommun, `includeDetails: true`
**Output:** broker name, direct email, phone, agency, plus everything they currently have listed
**Use:** a contact list ranked by how much stock each agent is actually carrying.

#### 3. Housing Market Monitoring

**Analysts and journalists tracking a city week by week.**

**Input:** a place, `sort: "NEWEST"`, on a schedule
**Output:** new listings since your last run, with price per m², fee, days on Hemnet and coordinates
**Use:** the supply side from the for-sale run, what cleared from the sold run, side by side.

#### 4. Investment & BRF Screening

**Buy-to-let investors filtering a city down to a shortlist.**

**Input:** `maxFee`, `constructionYearMin`, `livingAreaMin`, `includeDetails: true`
**Output:** energy class, yearly running cost, biarea and the co-operative's registration number
**Use:** rule out the high-fee, badly-insulated stock before booking a single viewing.

#### 5. Proptech & Portal Data Feeds

**Product teams building valuation models, maps and comparison sites.**

**Input:** several kommuner or price bands across scheduled runs
**Output:** flat rows with coordinates, area, tenure and price, ready to load
**Use:** Sweden has no open property API — this is the feed underneath the product.

#### 6. Relocation & Buyer Search

**Buyers and relocation services comparing neighbourhoods.**

**Input:** two or three districts, the same price and room filters on each
**Output:** the same columns for every area, including price per m² and fee
**Use:** answer "where does our budget go furthest" with numbers instead of impressions.

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/hemnet-property-scraper').call({
  operation: 'sold',
  location: 'Vasastan',
  soldSince: '12m',
  maxResults: 500
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/hemnet-property-scraper').call(
    run_input={
        'operation': 'search',
        'location': 'Göteborg',
        'propertyTypes': ['APARTMENTS'],
        'maxFee': 4000,
        'sort': 'LOWEST_PRICE_PER_M2'
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['streetAddress'], item['askingPrice'], item['squareMeterPrice'])
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~hemnet-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation": "sold", "location": "Malmö", "soldSince": "3m"}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: a weekly schedule, or a webhook from your own app
2. **HTTP Request**: call the actor with a place and a filter set
3. **Process**: keep the rows whose `publishedAt` is newer than your last run
4. **Action**: write to Sheets or a database, or alert the team on a price change

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 properties** per run — every field, every operation, same quality
- No credit card, no API key, no proxy
- Enough to see the slutpris columns on real Swedish sales before you spend anything

#### PAID Tier (Production Ready)

- **Unlimited** properties per run
- 500 properties per request, so a whole-city sweep finishes fast
- Pay-per-result: charged for rows delivered, never for a failure

💰 **From $1.50 per 1,000 properties**, with nothing to buy alongside it: no proxy subscription, no third-party account, no per-request surcharge on top. Detail expansion is charged separately, per row expanded, and only when you switch it on.

🔗 [View current pricing](https://apify.com/sian.agency/hemnet-property-scraper?fpr=sian)

### ❓ Frequently Asked Questions

**Q: Do I need an API key, a login or a proxy?**
A: No. Type a place name and press Run.

**Q: What is slutpris, and does this return it?**
A: Slutpris is the price a Swedish home actually sold for, as opposed to the asking price. The Sold Prices operation returns both on every row, plus the percentage between them.

**Q: How do I search a neighbourhood rather than a whole city?**
A: Type the neighbourhood. Vasastan, Östermalm, Majorna and Möllevången all resolve, because the name is matched against Hemnet's own place index.

**Q: How many rows can one search return?**
A: Up to 2,500. That is Hemnet's ceiling per search, not ours. Split the run by area, price band or sold period to go wider.

**Q: Which fields need the detail option?**
A: Year built, tenure, energy class, yearly running cost, biarea, postal code, the BRF and the broker's email and phone. Price, fee, rooms, boarea, floor, coordinates, agency and photos all arrive with the search row.

**Q: Are the broker email addresses real?**
A: Yes. Hemnet publishes the agent's own address and direct line on the listing page. They are business contacts, not anonymised relays.

**Q: Can I paste a Hemnet search address?**
A: Yes. Put it in Search URLs and the place, property type, price, rooms and area filters are read off it. Sold-price addresses under /salda/bostader work too.

**Q: Does it cover houses and holiday homes, or only apartments?**
A: Everything Hemnet lists — bostadsrätter, villor, radhus, fritidshus, tomter and gårdar. Leave the property type filter empty to take them all.

**Q: What output formats are available?**
A: JSON, CSV, Excel and the API, exported straight from the dataset.

### 🐛 Troubleshooting

**A place name did not match**

- Use the name as Hemnet writes it: Stockholm, Nacka kommun, Skåne län, Vasastan
- If a district name is ambiguous, add the city, or supply the Hemnet location id instead

**A search returned fewer rows than you expected**

- Check the filters. A fee ceiling has no effect on villor, which usually carry no avgift
- Hemnet stops any single search at 2,500 rows. Split by district, by price band or by sold window

**Sold rows have no photos or no monthly fee**

- Hemnet's sold records carry less than an active listing does. Photos come down once a sale closes, and a fee appears only where the property had one

**Year built and energy class are empty**

- Those two live on the listing page, not the results page. Switch on the detail option, or run the `detail` operation against the listing URLs

**A run stopped at 25 rows**

- That is the free-tier cap. Paid runs are uncapped

**The run failed with "Property type … is not one Hemnet lists" (or the same for sort or sold window)**

- You are calling the API directly and sent a value outside the list. The run stops rather than dropping the filter, because a dropped filter returns a wider result set that you would still pay for
- Copy the exact values from the dropdowns, or from the Input Configuration table above

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### 🤝 Support

[![Telegram Support](https://img.shields.io/badge/Telegram-Support%20Group-0088cc?logo=telegram)](https://t.me/+vyh1sRE08sAxMGRi)

**Join our active support community**

- For issues or questions, open an issue in the actor's repository
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

Hemnet is a trademark of Hemnet Group AB. This actor is not affiliated with, endorsed by, or sponsored by Hemnet.

# Actor input Schema

## `operation` (type: `string`):

Pick one per run. Homes for Sale returns every active listing that matches your filters. Sold Prices returns Hemnet's slutpriser archive, with the final price beside the asking price on every record. Listing Detail takes hemnet.se listing addresses and returns the full record, including year built, energy class and broker contacts.

## `location` (type: `string`):

Where to search. Type it the way you would on Hemnet: a city (Stockholm, Göteborg, Malmö), a kommun (Nacka kommun), a län (Skåne län) or a neighbourhood (Vasastan, Östermalm, Majorna). The name is matched against Hemnet's own place index and the best hit is used, so nothing has to be looked up by hand. Leave it empty only if you are supplying Search URLs or Location IDs instead.

## `propertyTypes` (type: `array`):

Which kinds of home to include. Leave empty for every type. Apartments are bostadsrätter, Houses are villor, Row houses covers radhus, par- and kedjehus, Vacation homes are fritidshus, Plots are tomter and Homesteads are gårdar.

## `maxResults` (type: `integer`):

Stop after this many rows. Each call returns up to 500 rows, so the run stops at the first call that crosses your limit. Hemnet itself returns at most 2,500 rows per search, so ask for more than that only when you have several places or price bands in play.

## `soldSince` (type: `string`):

Only used by the Sold Prices operation. How far back to reach into Hemnet's slutpriser archive. Shorter windows are what you want on a schedule — you pay for the sales that are new since your last run instead of re-buying the same history.

## `priceMin` (type: `integer`):

Lowest asking price to include, in Swedish kronor. 0 means no lower bound.

## `priceMax` (type: `integer`):

Highest asking price to include, in Swedish kronor. 0 means no upper bound.

## `roomsMin` (type: `integer`):

Fewest rooms (rum) to include. Swedish listings count every room, not only bedrooms. 0 means no lower bound.

## `roomsMax` (type: `integer`):

Most rooms to include. 0 means no upper bound.

## `livingAreaMin` (type: `integer`):

Smallest boarea in square metres. 0 means no lower bound.

## `livingAreaMax` (type: `integer`):

Largest boarea in square metres. 0 means no upper bound.

## `maxFee` (type: `integer`):

Highest monthly avgift to the housing co-operative. Applies to apartments; houses usually carry no fee. 0 means no upper bound.

## `constructionYearMin` (type: `integer`):

Skip anything built before this year. Useful for filtering out the 1960s–70s miljonprogram stock. 0 means no lower bound.

## `includeDetails` (type: `boolean`):

Expand every listing with the fields the search results do not carry: year built, tenure (bostadsrätt or äganderätt), energy class, yearly running cost, supplemental area (biarea), postal code, the housing co-operative's name and registration number, and the broker's direct email and phone. Listings are batched 25 to a request, and each expanded row is billed as one Listing Detail event. Applies to the Homes for Sale operation.

## `listingUrls` (type: `array`):

Used by the Listing Detail operation: hemnet.se listing addresses to expand, for example https://www.hemnet.se/bostad/lagenhet-3rum-vasastan-stockholms-kommun-odengatan-1-21740737. A bare listing id also works.

## `searchUrls` (type: `array`):

Paste search addresses copied straight from hemnet.se instead of filling the fields above. Place, property type, price, rooms and area are all read off each address, including /salda/bostader addresses for sold prices.

## `locationIds` (type: `array`):

For anyone who already knows Hemnet's own place ids, for example 18031 for Stockholms kommun. Supplying ids skips the name lookup and lets one run cover several areas at once.

## `sort` (type: `string`):

Newest first is what you want for monitoring a market on a schedule. Price per m² is the ordering Swedish buyers and analysts actually compare on.

## Actor input object example

```json
{
  "operation": "search",
  "location": "Stockholm",
  "propertyTypes": [
    "APARTMENTS"
  ],
  "maxResults": 100,
  "soldSince": "12m",
  "priceMin": 0,
  "priceMax": 0,
  "roomsMin": 0,
  "roomsMax": 0,
  "livingAreaMin": 0,
  "livingAreaMax": 0,
  "maxFee": 0,
  "constructionYearMin": 0,
  "includeDetails": false,
  "listingUrls": [],
  "searchUrls": [],
  "locationIds": [],
  "sort": "NEWEST"
}
```

# Actor output Schema

## `hemnetProperties` (type: `string`):

Every propertie this run returned.

## `scrapingSummary` (type: `string`):

HTML summary showing successful and failed results with key metrics

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "operation": "search",
    "location": "Stockholm",
    "propertyTypes": [
        "APARTMENTS"
    ],
    "maxResults": 100,
    "soldSince": "12m",
    "priceMin": 0,
    "priceMax": 0,
    "roomsMin": 0,
    "roomsMax": 0,
    "livingAreaMin": 0,
    "livingAreaMax": 0,
    "maxFee": 0,
    "constructionYearMin": 0,
    "includeDetails": false,
    "listingUrls": [],
    "searchUrls": [],
    "locationIds": [],
    "sort": "NEWEST"
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/hemnet-property-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "operation": "search",
    "location": "Stockholm",
    "propertyTypes": ["APARTMENTS"],
    "maxResults": 100,
    "soldSince": "12m",
    "priceMin": 0,
    "priceMax": 0,
    "roomsMin": 0,
    "roomsMax": 0,
    "livingAreaMin": 0,
    "livingAreaMax": 0,
    "maxFee": 0,
    "constructionYearMin": 0,
    "includeDetails": False,
    "listingUrls": [],
    "searchUrls": [],
    "locationIds": [],
    "sort": "NEWEST",
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/hemnet-property-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "operation": "search",
  "location": "Stockholm",
  "propertyTypes": [
    "APARTMENTS"
  ],
  "maxResults": 100,
  "soldSince": "12m",
  "priceMin": 0,
  "priceMax": 0,
  "roomsMin": 0,
  "roomsMax": 0,
  "livingAreaMin": 0,
  "livingAreaMax": 0,
  "maxFee": 0,
  "constructionYearMin": 0,
  "includeDetails": false,
  "listingUrls": [],
  "searchUrls": [],
  "locationIds": [],
  "sort": "NEWEST"
}' |
apify call sian.agency/hemnet-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/hemnet-property-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/qYVrZuegAiB7kGDE7/builds/VBDePKrlpg41qpXdL/openapi.json
