{
  "openapi": "3.0.1",
  "info": {
    "title": "Hemnet Scraper - Swedish Property Listings & Sold Prices",
    "description": "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.",
    "version": "1.0",
    "x-build-id": "VBDePKrlpg41qpXdL"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~hemnet-property-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-hemnet-property-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/sian.agency~hemnet-property-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-hemnet-property-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/sian.agency~hemnet-property-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-hemnet-property-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "operation": {
            "title": "🎯 What do you want to scrape?",
            "enum": [
              "search",
              "sold",
              "detail"
            ],
            "type": "string",
            "description": "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.",
            "default": "search"
          },
          "location": {
            "title": "📍 Place in Sweden",
            "type": "string",
            "description": "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.",
            "default": "Stockholm"
          },
          "propertyTypes": {
            "title": "🏠 Property types",
            "type": "array",
            "description": "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.",
            "items": {
              "type": "string",
              "enum": [
                "APARTMENTS",
                "HOUSES",
                "ROW_HOUSES",
                "VACATION_HOMES",
                "PLOTS",
                "HOMESTEADS",
                "OTHERS"
              ],
              "enumTitles": [
                "🏢 Apartments (bostadsrätt)",
                "🏡 Houses (villa)",
                "🏘️ Row & semi-detached (radhus)",
                "🌲 Vacation homes (fritidshus)",
                "🟩 Plots (tomt)",
                "🚜 Homesteads (gård)",
                "🏗️ Other"
              ]
            },
            "default": []
          },
          "maxResults": {
            "title": "🔢 Max properties",
            "minimum": 1,
            "maximum": 25000,
            "type": "integer",
            "description": "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.",
            "default": 100
          },
          "soldSince": {
            "title": "🗓️ Sold within",
            "enum": [
              "1m",
              "3m",
              "6m",
              "12m",
              "all"
            ],
            "type": "string",
            "description": "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.",
            "default": "12m"
          },
          "priceMin": {
            "title": "💵 Min price (SEK)",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest asking price to include, in Swedish kronor. 0 means no lower bound.",
            "default": 0
          },
          "priceMax": {
            "title": "💰 Max price (SEK)",
            "minimum": 0,
            "type": "integer",
            "description": "Highest asking price to include, in Swedish kronor. 0 means no upper bound.",
            "default": 0
          },
          "roomsMin": {
            "title": "🛏️ Min rooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Fewest rooms (rum) to include. Swedish listings count every room, not only bedrooms. 0 means no lower bound.",
            "default": 0
          },
          "roomsMax": {
            "title": "🛏️ Max rooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Most rooms to include. 0 means no upper bound.",
            "default": 0
          },
          "livingAreaMin": {
            "title": "📐 Min living area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Smallest boarea in square metres. 0 means no lower bound.",
            "default": 0
          },
          "livingAreaMax": {
            "title": "📐 Max living area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Largest boarea in square metres. 0 means no upper bound.",
            "default": 0
          },
          "maxFee": {
            "title": "🧾 Max monthly fee (SEK)",
            "minimum": 0,
            "type": "integer",
            "description": "Highest monthly avgift to the housing co-operative. Applies to apartments; houses usually carry no fee. 0 means no upper bound.",
            "default": 0
          },
          "constructionYearMin": {
            "title": "🏗️ Built from year",
            "minimum": 0,
            "maximum": 2100,
            "type": "integer",
            "description": "Skip anything built before this year. Useful for filtering out the 1960s–70s miljonprogram stock. 0 means no lower bound.",
            "default": 0
          },
          "includeDetails": {
            "title": "📄 Add year built, energy class and broker contacts",
            "type": "boolean",
            "description": "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.",
            "default": false
          },
          "listingUrls": {
            "title": "🔗 Listing URLs",
            "type": "array",
            "description": "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.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchUrls": {
            "title": "🌐 Hemnet search URLs",
            "type": "array",
            "description": "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.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "locationIds": {
            "title": "🆔 Hemnet location IDs",
            "type": "array",
            "description": "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.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "sort": {
            "title": "↕️ Sort by",
            "enum": [
              "NEWEST",
              "OLDEST",
              "LOWEST_PRICE",
              "HIGHEST_PRICE",
              "LOWEST_PRICE_PER_M2",
              "HIGHEST_PRICE_PER_M2",
              "LARGEST_LIVING_AREA",
              "SMALLEST_LIVING_AREA",
              "LOWEST_FEE",
              "HIGHEST_FEE"
            ],
            "type": "string",
            "description": "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.",
            "default": "NEWEST"
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}