{
  "openapi": "3.0.1",
  "info": {
    "title": "Boligsiden.dk Real Estate Scraper",
    "description": "Scrape Danish property listings from Boligsiden.dk in bulk: villas, condos, townhouses and holiday homes. Get asking price, price per m2, rooms, area, year built, energy label, address, geo, public valuation, realtor contact and sale history. No login.",
    "version": "0.1",
    "x-build-id": "bLA4oNbptG6gFSAU8"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapeworks~boligsiden-real-estate-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapeworks-boligsiden-real-estate-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/scrapeworks~boligsiden-real-estate-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapeworks-boligsiden-real-estate-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/scrapeworks~boligsiden-real-estate-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapeworks-boligsiden-real-estate-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": {
          "addressTypes": {
            "title": "Property types",
            "uniqueItems": true,
            "type": "array",
            "description": "Which property types to include. Leave empty to return EVERY type on the market (~44,000 listings). Allowed values (use these exact English strings): villa, condo, terraced house, holiday house, cooperative, villa apartment, double house, multiple family house, farm, hobby farm, cattle farm, pig farm, plant farm, forest, allotment, full year plot, holiday plot, houseboat, garage, parking, business, room. The default set covers the common residential-for-sale types most buyers want.",
            "items": {
              "type": "string"
            }
          },
          "municipalities": {
            "title": "Municipalities (optional)",
            "uniqueItems": true,
            "type": "array",
            "description": "Restrict to one or more Danish municipalities, given as Boligsiden slugs (lowercase, e.g. \"koebenhavn\", \"aarhus\", \"odense\", \"aalborg\", \"faxe\", \"gentofte\"). This is the BULK axis: the actor runs one deep search per municipality and merges the results (de-duplicated by listing), so a list of municipalities pulls far past the 10,000-per-search API window. Leave empty to search all of Denmark at once (up to 10,000 listings). If both municipalities and ZIP codes are given, municipalities win.",
            "items": {
              "type": "string"
            }
          },
          "zipCodes": {
            "title": "ZIP codes (optional)",
            "uniqueItems": true,
            "type": "array",
            "description": "Restrict to one or more Danish postal (ZIP) codes, e.g. \"2100\", \"8000\", \"5000\". Like municipalities, this is a bulk axis: one deep search runs per ZIP and results are merged and de-duplicated. Used only when Municipalities is empty. Leave both empty to search all of Denmark.",
            "items": {
              "type": "string"
            }
          },
          "priceMin": {
            "title": "Min price, DKK (optional)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return listings with an asking price at or above this amount, in Danish kroner (DKK). Leave empty for no lower bound."
          },
          "priceMax": {
            "title": "Max price, DKK (optional)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return listings with an asking price at or below this amount, in Danish kroner (DKK). Leave empty for no upper bound."
          },
          "areaMin": {
            "title": "Min living area, m2 (optional)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return listings whose housing (living) area is at least this many square metres. Leave empty for any size."
          },
          "areaMax": {
            "title": "Max living area, m2 (optional)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return listings whose housing (living) area is at most this many square metres. Leave empty for any size."
          },
          "maxResultsPerSearch": {
            "title": "Max results per search",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum listings to return for EACH search (each municipality, each ZIP, or the single all-Denmark search). The actor paginates automatically (500 per page). Boligsiden's API exposes up to 10,000 results per search, so set this to 10000 to pull a whole municipality; lower it to sample. Every listing returned is billed.",
            "default": 1000
          },
          "maxResults": {
            "title": "Max results overall (optional)",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Optional overall cap across ALL searches combined (after de-duplication). Leave empty for no overall cap - each search is still bounded by Max results per search. Useful to cap the total billed rows for a run."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Fallback proxy for reaching Boligsiden's API. The actor sends requests DIRECTLY first (the API answers datacenter requests fine, so no proxy is needed on the happy path) and only routes through this proxy - rotating exits - if a request is ever rate-limited or blocked. The default (Apify Residential, Denmark) is a safe fallback; leave it in place.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "DK"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}