{
  "openapi": "3.0.1",
  "info": {
    "title": "FINN.no Property Scraper - Norway Real Estate Data",
    "description": "Scrape FINN.no property listings across Norway: homes for sale and rent, new builds, plots and cabins. NOK prices, m2, bedrooms, agents, GPS, energy labels.",
    "version": "1.0",
    "x-build-id": "sI6w3T7bOatVb8gHl"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~finn-no-property-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-finn-no-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~finn-no-property-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-finn-no-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~finn-no-property-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-finn-no-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",
              "listingDetail"
            ],
            "type": "string",
            "description": "Pick one per run. Property Search sweeps FINN's own search endpoint by area and filter and returns 50 listing rows per call. Listing Detail takes FINN ad URLs or finnkoder and returns the full description, facilities, energy label, viewings and agent contact for each.",
            "default": "search"
          },
          "section": {
            "title": "🏘️ Property section",
            "enum": [
              "homes",
              "lettings",
              "newbuildings",
              "plots",
              "leisuresale",
              "leisureplots",
              "abroad"
            ],
            "type": "string",
            "description": "Which FINN Eiendom section to search. Homes for sale is the big one (41,100 live listings); rentals hold 11,200 and cabins 7,100. Each section returns a slightly different row shape — rentals carry monthly rent and deposit, new builds carry price ranges instead of a single asking price.",
            "default": "homes"
          },
          "locations": {
            "title": "📍 Areas",
            "type": "array",
            "description": "Norwegian counties, municipalities or city districts: Oslo, Bergen, Trondheim, Stavanger, Bærum, Tromsø, Frogner. Names are matched against FINN's own live area tree, so spelling follows FINN and a raw FINN area code (0.20061, 1.22046.20220) is passed straight through. One search runs per area, in the order you list them, and every area shares the single Max listings budget below. Leave empty to search all of Norway.",
            "default": [
              "Oslo"
            ],
            "items": {
              "type": "string"
            }
          },
          "searchQuery": {
            "title": "🔑 Search keyword",
            "type": "string",
            "description": "Free-text keyword, matched by FINN across the ad heading and body — enebolig, sjøutsikt, garasje, nyoppusset. Leave empty to take the whole section for each area.",
            "default": ""
          },
          "sort": {
            "title": "↕️ Sort by",
            "enum": [
              "PUBLISHED_DESC",
              "PRICE_ASKING_ASC",
              "PRICE_ASKING_DESC",
              "PRICE_ASC",
              "PRICE_DESC",
              "AREA_PROM_DESC",
              "AREA_PROM_ASC",
              "PRICE_SQM_ASC",
              "PRICE_SQM_DESC",
              "RELEVANCE"
            ],
            "type": "string",
            "description": "Newest first is what you want for monitoring a market on a schedule. Price per m² is the one that surfaces genuinely underpriced stock.",
            "default": "PUBLISHED_DESC"
          },
          "maxResults": {
            "title": "🔢 Max listings",
            "minimum": 1,
            "maximum": 25000,
            "type": "integer",
            "description": "Hard ceiling on the listings this run returns and bills, counted across every area together: three areas with a limit of 50 return 50 rows in total, not 150. Each search call returns 50 rows, so the run stops at the first call that crosses your limit. FINN itself caps a single query at 2,500 rows, so tighten the filters or split the run to go wider.",
            "default": 50
          },
          "publishedToday": {
            "title": "🆕 Published today only",
            "type": "boolean",
            "description": "Only ads FINN published today — the cheap way to run this daily and pay for new rows only.",
            "default": false
          },
          "priceFrom": {
            "title": "💵 Min total price (NOK)",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest total price (Totalpris — asking price plus document duty and fees). 0 means no lower bound. On rentals this filters monthly rent instead.",
            "default": 0
          },
          "priceTo": {
            "title": "💰 Max total price (NOK)",
            "minimum": 0,
            "type": "integer",
            "description": "Highest total price (Totalpris). 0 means no upper bound. On rentals this filters monthly rent instead.",
            "default": 0
          },
          "areaFrom": {
            "title": "📐 Min size (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Smallest usable floor area to include, in square metres. 0 means no lower bound.",
            "default": 0
          },
          "areaTo": {
            "title": "📐 Max size (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Largest usable floor area to include, in square metres. 0 means no upper bound.",
            "default": 0
          },
          "minBedrooms": {
            "title": "🛏️ Minimum bedrooms",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Only listings with at least this many bedrooms. FINN supports 1 to 5; 0 means no bedroom filter.",
            "default": 0
          },
          "propertyType": {
            "title": "🏡 Property type",
            "enum": [
              "",
              "3",
              "1",
              "2",
              "4",
              "11",
              "20",
              "6",
              "18"
            ],
            "type": "string",
            "description": "Restrict to one FINN property type. Apartments are 25,700 of the 41,100 homes for sale; detached houses are 9,600.",
            "default": ""
          },
          "ownershipType": {
            "title": "📜 Ownership form",
            "enum": [
              "",
              "3",
              "4",
              "2",
              "1",
              "255"
            ],
            "type": "string",
            "description": "Norwegian ownership form. Freehold and co-op share behave very differently on financing and monthly cost, so this is usually the first filter a Norwegian buyer applies.",
            "default": ""
          },
          "energyLabel": {
            "title": "⚡ Energy label",
            "enum": [
              "",
              "1",
              "2",
              "3",
              "4",
              "5",
              "6",
              "7"
            ],
            "type": "string",
            "description": "Norwegian energy rating (Energikarakter). Only a minority of ads carry one, so setting this drops every listing that has not been rated.",
            "default": ""
          },
          "sellerType": {
            "title": "🧑‍💼 Advertised by",
            "enum": [
              "",
              "0",
              "1"
            ],
            "type": "string",
            "description": "Private-seller ads are the FSBO pocket of the Norwegian market — about 1,100 of 41,100 homes for sale, and the list agents want.",
            "default": ""
          },
          "constructionYearFrom": {
            "title": "🗓️ Built from year",
            "minimum": 0,
            "maximum": 2100,
            "type": "integer",
            "description": "Oldest construction year to include. 0 means no lower bound.",
            "default": 0
          },
          "constructionYearTo": {
            "title": "🗓️ Built to year",
            "minimum": 0,
            "maximum": 2100,
            "type": "integer",
            "description": "Newest construction year to include. 0 means no upper bound.",
            "default": 0
          },
          "includeDetails": {
            "title": "📄 Fetch full ad details",
            "type": "boolean",
            "description": "Open each listing's ad page to add the full Norwegian description, facilities list, energy label, construction year, viewing times, cadastre and agent phone. Costs one extra request per listing and bills the Detail Enrichment event on top of the search row.",
            "default": false
          },
          "listingUrls": {
            "title": "🔗 FINN ad URLs or codes",
            "type": "array",
            "description": "Used by the Listing Detail operation: FINN ad URLs to expand. Any section works — homes, lettings, project, plots, leisuresale, abroad. A bare finnkode (474575679) is accepted too and resolved against the homes path.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchUrls": {
            "title": "🌐 FINN search URLs",
            "type": "array",
            "description": "Paste FINN search URLs instead of filling the fields above. Copy the address bar after clicking through FINN's own filters and every parameter on it is used as-is, including filters this actor does not expose as fields.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}