Hemnet.se Real Estate Scraper avatar

Hemnet.se Real Estate Scraper

Pricing

from $3.50 / 1,000 results

Go to Apify Store
Hemnet.se Real Estate Scraper

Hemnet.se Real Estate Scraper

Sweden real estate scraper for Hemnet.se — active for-sale listings plus a historical realized-price (sold) archive, with delta mode.

Pricing

from $3.50 / 1,000 results

Rating

0.0

(0)

Developer

Artsiom Kunitsyn

Artsiom Kunitsyn

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

hemnet-scraper

Scrapes real estate listings from Hemnet.se, Sweden's dominant real estate portal — active for-sale listings plus Hemnet's own historical realized-price archive ("Slutpriser") — by reading the site's own server-rendered Apollo GraphQL state, not a separate API.

Contents

🔑 Key features

  • Two genuinely different datasets, one actor. entityType: for_sale covers the active market; entityType: sold covers Hemnet's own realized-price archive — real sold price, asking price, and the difference between them, for completed sales. This second dataset alone runs into the thousands of records even for a single mid-size municipality.
  • No login, no API key. Every listing's full data — price, area, rooms, broker, construction year, tenure — is embedded directly in the page's own server-rendered JSON; this actor reads that, it doesn't call a private endpoint.
  • Delta mode built in. Every run classifies each listing as new, changed, unchanged, or delisted against a persisted baseline, so a scheduled re-run only bills for what actually changed.

📋 Output

One dataset item per listing (see .actor/dataset_schema.json for the full field list) plus a change_type field.

Example — for-sale listing:

{
"source": "hemnet",
"external_id": "21786044",
"url": "https://www.hemnet.se/bostad/villa-8rum-trelleborg-trelleborgs-kommun-johannesdalsvagen-3-21786044",
"country": "SE",
"region": "Skåne län",
"municipality": "Trelleborgs kommun",
"street_address": "Johannesdalsvägen 3",
"postal_code": "23192",
"listing_type": "for_sale",
"property_type": "Villa",
"tenure": "Äganderätt",
"asking_price_sek": 5495000.0,
"price_sek": 5495000.0,
"living_area_sqm": 190.0,
"land_area_sqm": 804.0,
"rooms": 8.0,
"construction_year": 2006,
"broker_name": "Emma Bergh",
"agency_name": "Erik Olsson Fastighetsformedling",
"published_at": "2026-09-11T21:20:47.271000+00:00",
"days_on_hemnet": 11,
"change_type": "new"
}

Example — sold listing (price_sek is the final selling price, not the asking price):

{
"source": "hemnet",
"external_id": "6229528360611106625",
"listing_type": "sold",
"asking_price_sek": null,
"price_sek": 6000000.0,
"price_per_sqm_sek": 77922.0,
"sold_at": "2026-09-22T18:15:00+00:00",
"change_type": "new"
}

Known gaps:

  • latitude/longitude are always null — not present on the detail-page objects this actor reads (only on a lighter search-card object it doesn't use).
  • asking_price_sek is sometimes null on sold records — not every historical record has one recorded.
  • agency_name is reconstructed from the agency's own Hemnet profile URL slug, so diacritics and exact spacing may not perfectly match the company's real display name.
  • No rent/lease category exists — Hemnet is sale-only (verified live: no working rental section).

⚙️ Input

See .actor/input_schema.json for the full schema. Key parameters:

ParameterTypeDefaultDescription
entityTypeStringfor_salefor_sale (active listings) or sold (realized-price archive).
propertyTypesArray(all)Optional filter on property type (Villa/Lägenhet/etc). Applied after fetching — see note below.
maxItemsInteger50Stop after pushing this many items. Clear it (null) for a full run.
maxPagesInteger(25, the sitemap's own cap)How many pages of Hemnet's own sitemap to walk (100 listings/page). The sitemap itself only ever exposes a rolling ~2,500-item recent window per entity type — not the full historical catalog.
modeStringautoauto/full/incremental — see Incremental mode.
delaySecondsNumber0.5Politeness delay between requests.
impersonateStringchromecurl_cffi TLS-impersonation target — Hemnet is Cloudflare-fingerprinted against plain HTTP clients.
proxyConfigurationObjectoffApify Proxy config. Off by default — clean without one in testing.

Note on propertyTypes: Hemnet's sitemaps don't expose property type cheaply enough to filter before fetching, so this is a filter applied after each listing is already fetched — it reduces what's pushed, not the request volume. A run with this filter set doesn't update the incremental baseline (its coverage of the full scope is incomplete by construction).

🧪 Input examples

Quick preview — default 50-item cap on active listings:

{
"entityType": "for_sale"
}

Sold-price archive, houses only:

{
"entityType": "sold",
"propertyTypes": ["Villa", "Radhus"],
"maxItems": 500
}

Scheduled tracking run — full, uncapped:

{
"entityType": "for_sale",
"mode": "incremental",
"maxItems": null,
"maxPages": null
}

🔄 Incremental (delta) mode

Every run classifies each listing as new, changed (price moved), unchanged, or delisted, against a baseline persisted per entityType.

  • mode: auto (default) — first run pushes everything (full); later runs push only new/changed/delisted.
  • A page-capped run (maxPages below the sitemap's real page count) or a propertyTypes-filtered run doesn't cover the full scope, so it never updates the baseline or reports delistings — same rule as every other actor in this collection.

🚀 How to scrape Hemnet.se

  1. Open the actor in Apify Console and go to the Input tab.
  2. Pick an entityTypefor_sale for the live market, sold for realized prices.
  3. maxItems defaults to 50 (a quick preview) — clear it along with maxPages for a full run.
  4. Click Start.
  5. Browse results in the Output tab, or download as JSON/CSV/Excel, or pull them via the API.

❓ FAQ

Is it legal to scrape Hemnet.se? It's legal to collect publicly available listing data such as prices, descriptions, and locations. Results may contain limited personal data (broker names for professional listings); scrape it only with a legitimate purpose under GDPR.

Why is asking_price_sek sometimes null on sold listings? Not every historical record in Hemnet's own archive has one recorded — see Output.

Does this cover rentals? No — Hemnet itself has no rental section (verified live), only sales.

Search keywords

hemnet scraper, hemnet.se scraper, sweden real estate scraper, swedish property scraper, hemnet slutpriser scraper, hemnet sold prices, bostad scraper, villa scraper sweden, lägenhet scraper, real estate delta scraper, real estate price tracking, sweden property data feed