Hemnet Swedish Real Estate Scraper avatar

Hemnet Swedish Real Estate Scraper

Pricing

Pay per event

Go to Apify Store
Hemnet Swedish Real Estate Scraper

Hemnet Swedish Real Estate Scraper

🏠 Extract current and sold Hemnet properties with normalized prices, areas, fees, brokers, dates, images, links, and coordinates for Swedish market research.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

Extract structured current and sold Swedish property listings from Hemnet without building and maintaining your own crawler.

Use a Hemnet search URL or numeric location ID and receive analysis-ready prices, rooms, areas, fees, brokers, dates, images, coordinates, and source links.

The Actor is designed for recurring inventory tracking, sold-comparable research, broker intelligence, valuation inputs, and Swedish housing-market datasets.

What does Hemnet Swedish Real Estate Scraper do?

The Actor reads public Hemnet search result pages and converts each property card into a normalized dataset row.

It supports:

  • 🏠 current homes for sale;
  • ✅ sold-property records;
  • 🔎 existing Hemnet search URLs and their filters;
  • 📍 Hemnet numeric location IDs;
  • 📄 multi-page extraction;
  • 🔁 current and sold extraction in one run;
  • 🌐 optional Apify Proxy routing;
  • 📦 JSON, CSV, Excel, XML, and API exports.

No Hemnet login is required for the supported public data.

Who is it for?

Real-estate analysts

Build repeatable inventories and comparable-sales datasets instead of copying property cards manually.

Brokers and agencies

Track active supply, sold prices, broker attribution, and agency presence by Swedish location.

Investors and buyers

Compare asking prices, final prices, areas, fees, and price per square meter.

Proptech and valuation teams

Feed normalized public property observations into dashboards, models, alerts, and enrichment pipelines.

Lead and data providers

Discover public listings and associated broker or agency names with source lineage.

Why use this Hemnet scraper?

  • One schema for current and sold homes makes comparisons easy.
  • Swedish values become numbers, such as 4 995 000 kr4995000.
  • Dates become ISO timestamps for databases and BI tools.
  • Filters are preserved when you paste an existing Hemnet search URL.
  • Pagination is automatic within your item and page limits.
  • Records are deduplicated by status and Hemnet identifier.
  • Browser-grade HTTP fingerprinting avoids the overhead of a full browser.
  • Explicit failures prevent blocked pages from appearing as successful empty datasets.

What data can you extract?

FieldDescription
propertyIdStable card identifier
listingIdHemnet listing identifier when exposed
statuscurrent or sold
addressStreet address
locationArea and municipality
housingTypeApartment, villa, plot, and other type
askingPriceSekAsking price as a number
finalPriceSekFinal sold price when available
priceChangePercentDifference from asking price
roomsNumber of rooms
livingAreaM2Living area in square meters
supplementalAreaM2Supplemental area when exposed
landAreaM2Land area
monthlyFeeSekMonthly association fee
pricePerM2SekPrice per square meter
floorFloor description
publishedAtPublication timestamp
soldAtSale timestamp
brokerNamePublic broker name
agencyNamePublic agency name
labelsFeatures and promotion labels
descriptionResult-card description when available
imageUrlMain property image
detailUrlHemnet property URL
latitude, longitudeCoordinates when exposed
sourceUrlSearch page used
scrapedAtCollection timestamp

Optional fields are omitted when Hemnet does not expose them on a result card.

How to scrape current Hemnet listings

  1. Open a public Hemnet current-listings search.
  2. Apply the location and property filters you need.
  3. Copy the result URL.
  4. Paste it into Hemnet search URLs.
  5. Set a low maxItems for your first run.
  6. Click Start.
  7. Export the default dataset.

Example input:

{
"startUrls": [
{ "url": "https://www.hemnet.se/till-salu/stockholms-kommun/stockholm" }
],
"maxItems": 50,
"maxPages": 2
}

How to extract Hemnet sold prices

Provide a sold-search URL directly:

{
"startUrls": [
{ "url": "https://www.hemnet.se/salda/bostader?location_ids%5B%5D=18031" }
],
"maxItems": 100
}

Or use a location ID and sold mode:

{
"locationIds": ["18031"],
"mode": "sold",
"maxItems": 100,
"maxPages": 3
}

Sold rows can include both askingPriceSek and finalPriceSek, enabling sale-to-ask analysis.

Current and sold market comparison

Set mode to both for location IDs:

{
"locationIds": ["18031"],
"mode": "both",
"maxItems": 250,
"maxPages": 5
}

The resulting dataset distinguishes records using status while keeping comparable attributes in the same columns.

Input reference

startUrls

An array of public hemnet.se/till-salu/... or hemnet.se/salda/... search URLs.

The Actor preserves query filters and controls only the page parameter.

locationIds

An optional array of numeric location IDs used by Hemnet.

Use this when a scheduled workflow should not depend on a long copied search URL.

mode

Controls location-ID searches only:

  • current creates current-listing searches;
  • sold creates sold-property searches;
  • both creates one of each.

maxItems

Maximum unique records across all supplied searches.

The default is 100 and the maximum is 10,000.

startPage

Page number at which extraction begins.

This is useful for bounded backfills, but scheduled monitors should normally start at page 1.

maxPages

Maximum pages requested for each search.

This safety limit prevents an unexpectedly broad search from running indefinitely.

proxyConfiguration

Optional Apify Proxy settings.

Direct browser-grade HTTP is the low-cost default. If Hemnet blocks the run, configure a Swedish residential proxy session and retry a small input first.

Output example

{
"propertyId": "9062587685407210462",
"listingId": "21752338",
"status": "sold",
"address": "Tulegatan 21",
"location": "Vasastan, Stockholms kommun",
"housingType": "Lägenhet",
"askingPriceSek": 4995000,
"finalPriceSek": 6700000,
"priceChangePercent": 34,
"rooms": 1.5,
"livingAreaM2": 44,
"monthlyFeeSek": 2677,
"pricePerM2Sek": 152273,
"agencyName": "Erik Olsson Fastighetsförmedling",
"latitude": 59.3434219,
"longitude": 18.0608959,
"detailUrl": "https://www.hemnet.se/salda/...",
"scrapedAt": "2026-07-14T00:00:00.000Z"
}

How much does it cost to scrape Hemnet properties?

This Actor uses pay-per-event pricing:

  • one small Start charge per run;
  • one Property listing charge per dataset row;
  • automatic volume discounts by Apify plan.

You pay for produced property records rather than an idle monthly subscription.

Use low maxItems and maxPages values to validate a new search before scaling it.

The exact current prices appear in the Actor pricing tab and run estimate.

Pagination and limits

Hemnet commonly exposes multiple result pages.

The Actor requests pages sequentially, stopping when any of these conditions is met:

  • maxItems is reached;
  • maxPages is reached;
  • a result page contains no cards;
  • a short final page indicates the end.

Sequential requests reduce pressure on the source and keep session behavior predictable.

Data quality and normalization

Swedish non-breaking spaces, comma decimals, currency suffixes, and unit suffixes are removed before numeric conversion.

Examples:

  • 14 995 000 kr14995000;
  • 1,5 rum1.5;
  • 44 m²44;
  • +34 %34.

Current and sold cards differ upstream, so each has an explicit adapter into the shared output model.

Scheduling a Hemnet monitor

Apify schedules can run the Actor hourly, daily, or weekly.

A practical recurring workflow is:

  1. save a narrowly filtered page-1 search;
  2. set maxPages to 1 or 2;
  3. schedule daily execution;
  4. send dataset records to a webhook or automation;
  5. deduplicate against your own historical listing ID store;
  6. alert on newly observed homes or sold prices.

The sourceUrl and scrapedAt fields support audit and change-tracking logic.

Integrations

Google Sheets

Use the Apify Google Sheets integration to append current inventory or sold comparables for analyst review.

Make

Trigger a scenario after a run, filter by price or municipality, and send matches to email, Slack, or a CRM.

Zapier

Use new dataset items as automation events for lightweight property alerts.

Webhooks

Send a run-finished webhook to your data platform, then fetch the dataset through the API.

BigQuery or a warehouse

Export normalized numeric fields for trend analysis, broker share, price-per-square-meter distributions, and valuation features.

API usage with Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/hemnet-swedish-real-estate-scraper').call({
locationIds: ['18031'],
mode: 'both',
maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

API usage with Python

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/hemnet-swedish-real-estate-scraper').call(run_input={
'locationIds': ['18031'],
'mode': 'sold',
'maxItems': 100,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

API usage with cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~hemnet-swedish-real-estate-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"locationIds":["18031"],"mode":"current","maxItems":50}'

Fetch dataset items after completion:

$curl "https://api.apify.com/v2/datasets/DATASET_ID/items?clean=true&format=json"

Use with Apify MCP

Connect the Actor to AI assistants through:

https://mcp.apify.com?tools=automation-lab/hemnet-swedish-real-estate-scraper

Claude Code setup

$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/hemnet-swedish-real-estate-scraper"

Claude Desktop setup

Add this to the Claude Desktop MCP configuration:

{
"mcpServers": {
"apify-hemnet": {
"url": "https://mcp.apify.com?tools=automation-lab/hemnet-swedish-real-estate-scraper"
}
}
}

Cursor setup

Use the same mcpServers JSON in Cursor MCP settings and name the server apify-hemnet.

VS Code setup

Add the HTTP MCP URL to your VS Code MCP server configuration, then enable the automation-lab/hemnet-swedish-real-estate-scraper tool.

Example prompts

Run the Hemnet Swedish Real Estate Scraper for location 18031 in sold mode. Summarize median final price and price per square meter by housing type.

Extract 50 current Hemnet listings from this Stockholm search URL and identify properties with the lowest asking price per square meter.

MCP lets an assistant run the Actor and analyze the structured dataset without custom glue code.

Tips for reliable runs

  • Start with 10–20 items when validating a URL.
  • Prefer specific search filters over very broad national searches.
  • Keep scheduled monitors to the first recent pages.
  • Use location IDs for stable recurring workflows.
  • Enable proxy routing only when direct extraction is blocked.
  • If using residential proxy, select Sweden and test minimal volume first.
  • Store listing IDs in your downstream system for longitudinal deduplication.

Troubleshooting

Why did the Actor reject my URL?

Only public Hemnet current and sold search URLs are accepted. A property detail URL or another hostname is rejected intentionally.

Why did the run fail with a blocked-page error?

Hemnet may vary access by network. Add an Apify Proxy configuration, preferably a Swedish session, and retry with a small item limit.

Why is finalPriceSek missing?

Final price is a sold-property field. Current listings usually expose only the asking price.

Why are some broker or coordinate fields absent?

The Actor exports fields available on each result card. Hemnet does not expose every optional attribute for every record.

Why did I receive fewer rows than maxItems?

maxItems is a ceiling, not a promise. The filtered search may contain fewer records, or maxPages may stop pagination earlier.

Responsible use and legality

The Actor extracts public result-page information without logging into Hemnet.

You are responsible for complying with:

  • Hemnet's applicable terms;
  • copyright and database rights;
  • GDPR and other privacy requirements;
  • your legitimate purpose and retention rules;
  • reasonable request volume.

Do not use the Actor to harass individuals, bypass access controls, or republish protected content unlawfully.

When personal names are present, assess your lawful basis before storing, enriching, or contacting anyone.

This documentation is not legal advice.

Explore other automation-lab tools for broader property workflows:

Combine source-specific Actors downstream rather than assuming fields are identical across markets.

FAQ

Does this scrape all of Sweden?

Yes, if you provide suitable Hemnet searches or location IDs and set sufficient limits. Begin with a narrow region to estimate volume and cost.

Can it scrape both listings and sold homes?

Yes. Paste URLs for each mode, or set mode to both when using location IDs.

Does it open every detail page?

No. It extracts rich structured result-card data. Avoiding detail-page requests keeps runs faster, cheaper, and gentler on the source.

Can I use existing Hemnet filters?

Yes. The Actor preserves query parameters from supplied search URLs while changing the page number during pagination.

Is a proxy required?

Not always. Direct browser-grade HTTP is the default. Proxy settings are available as a fallback for networks that receive blocks.

Can I export to CSV or Excel?

Yes. Use the dataset export controls in Apify Console or request another dataset format through the API.

Are prices returned as strings?

No. Price fields are normalized to numbers in SEK, making sorting and calculations straightforward.

Can this track price changes over time?

Schedule repeated runs and compare records by propertyId or listingId in your own storage. The Actor supplies observations; your downstream system maintains history.

Support

If a public Hemnet result URL stops working, open an Actor issue with:

  • the exact input, excluding secrets;
  • the run ID;
  • whether a proxy was enabled;
  • the expected result type;
  • one example of a missing or malformed record.

Reproducible details help us adapt quickly when Hemnet changes its page structure.