{
  "openapi": "3.0.1",
  "info": {
    "title": "Funda Scraper - Netherlands Real Estate Data",
    "description": "Funda.nl unofficial API alternative: scrape Dutch property listings without login, export makelaar leads and prices to CSV, JSON and Excel.",
    "version": "1.0",
    "x-build-id": "P6a3wsd65XEnmMjVb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/logiover~funda-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-logiover-funda-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/logiover~funda-scraper/runs": {
      "post": {
        "operationId": "runs-sync-logiover-funda-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/logiover~funda-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-logiover-funda-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": {
          "area": {
            "title": "Area / city",
            "enum": [
              "amsterdam",
              "rotterdam",
              "den-haag",
              "utrecht",
              "eindhoven",
              "groningen",
              "tilburg",
              "almere",
              "breda",
              "nijmegen",
              "apeldoorn",
              "haarlem",
              "arnhem",
              "enschede",
              "amersfoort",
              "zaanstad",
              "haarlemmermeer",
              "s-hertogenbosch",
              "zwolle",
              "leiden",
              "maastricht",
              "dordrecht",
              "ede",
              "leeuwarden",
              "alphen-aan-den-rijn",
              "alkmaar",
              "emmen",
              "delft",
              "venlo",
              "deventer",
              "helmond",
              "hilversum",
              "hengelo",
              "amstelveen",
              "roosendaal",
              "purmerend",
              "oss",
              "schiedam",
              "spijkenisse",
              "vlaardingen",
              "almelo",
              "gouda"
            ],
            "type": "string",
            "description": "Dutch city / area to browse when no search URL is given. Pick one from the list. Leave everything empty to get Amsterdam homes for sale. (Ignored if you paste your own Search URLs below.)",
            "default": "amsterdam"
          },
          "dealType": {
            "title": "Buy or rent",
            "enum": [
              "koop",
              "huur"
            ],
            "type": "string",
            "description": "Whether to browse homes for sale (koop) or for rent (huur). Only used together with the Area dropdown when no Search URL is provided.",
            "default": "koop"
          },
          "searchUrls": {
            "title": "Search URLs (advanced, optional)",
            "type": "array",
            "description": "Optional. Funda.nl search URLs copied straight from the site — e.g. https://www.funda.nl/zoeken/koop?selected_area=%5B%22amsterdam%22%5D (buy) or .../zoeken/huur?... (rent). Use this only if you want full control over the filters (price range, extra areas, features): set your filters on Funda, then paste the result URL here. Add as many as you like. Leave empty to use the Area + Buy/rent dropdowns above.",
            "items": {
              "type": "string"
            }
          },
          "listingType": {
            "title": "Listing type filter",
            "enum": [
              "any",
              "koop",
              "huur"
            ],
            "type": "string",
            "description": "Optionally restrict results to koop (for sale) or huur (for rent). 'any' keeps whatever the search returns.",
            "default": "any"
          },
          "includeSold": {
            "title": "Include sold / rented listings",
            "type": "boolean",
            "description": "Area runs read funda.nl's listing index, which still lists homes that were sold or rented recently. Off: only listings that are still on the market (available, under offer). On: sold and rented ones too, with their status and sale history.",
            "default": false
          },
          "maxResults": {
            "title": "Max results (total)",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many listings across all searches. 0 = no limit (a single search can span hundreds of pages).",
            "default": 217
          },
          "maxResultsPerSearch": {
            "title": "Max results per search",
            "minimum": 0,
            "type": "integer",
            "description": "Cap listings per individual search URL. 0 = no per-search cap.",
            "default": 0
          },
          "useProxy": {
            "title": "Use Apify Proxy",
            "type": "boolean",
            "description": "Route requests through Apify Proxy. Residential is strongly recommended for Funda and is the default.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Leave as is: funda.nl's bot protection refuses search pages from datacenter IPs, so the scraper sends them through Apify residential exits automatically (a new IP per attempt), and reads the listing data from Funda's app API directly. Residential traffic is included in the price per result. Set your own proxy URLs or groups here to use them for the search pages instead.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "Max concurrent searches",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many search URLs to process in parallel.",
            "default": 3
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}