{
  "openapi": "3.0.1",
  "info": {
    "title": "Kamernet Rentals Scraper & New Listing Alerts",
    "description": "Kamernet rentals in the Netherlands: rooms, studios and apartments for rent, one row per listing with rent, size, furnishing and availability. Monitor a city and get new-listing or rent-below alerts in Slack, Discord or Telegram. No login or key; empty searches are free.",
    "version": "1.0",
    "x-build-id": "4gOO8NorbYd6RsNut"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/accountable_eel~kamernet-search-lookup/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-accountable_eel-kamernet-search-lookup",
        "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/accountable_eel~kamernet-search-lookup/runs": {
      "post": {
        "operationId": "runs-sync-accountable_eel-kamernet-search-lookup",
        "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/accountable_eel~kamernet-search-lookup/run-sync": {
      "post": {
        "operationId": "run-sync-accountable_eel-kamernet-search-lookup",
        "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",
        "required": [
          "cities"
        ],
        "properties": {
          "cities": {
            "title": "Cities",
            "type": "array",
            "description": "One city per line: Amsterdam, Den Haag, or netherlands for the whole country. A pasted kamernet.nl search link works too (only its city is used; pick the property type below). Each city returns one row per rental listing, newest first. Accepted formats: amsterdam, Den Haag, netherlands, https://kamernet.nl/en/for-rent/properties-utrecht. You're only charged for the ones we actually find — a miss costs nothing.",
            "items": {
              "type": "string"
            }
          },
          "propertyType": {
            "title": "Property type",
            "enum": [
              "any",
              "room",
              "studio",
              "apartment"
            ],
            "type": "string",
            "description": "Which Kamernet category to read: all rentals, only rooms, only studios or only apartments.",
            "default": "any"
          },
          "maxItems": {
            "title": "Listings per city",
            "type": "integer",
            "description": "Most listings returned for each city line (17 per page, at most 30 pages read). Local filters below are applied while reading, so this counts listings that passed them.",
            "default": 20
          },
          "maxRent": {
            "title": "Highest rent (EUR a month)",
            "type": "integer",
            "description": "Optional. Keeps rentals asking this much or less. Kamernet ignores a rent limit sent in the search link, so it is applied here after the page is read."
          },
          "minSize": {
            "title": "Smallest size (m²)",
            "type": "integer",
            "description": "Optional. Keeps rentals of at least this surface area. Applied after the page is read."
          },
          "cityOnly": {
            "title": "Only the city I typed",
            "type": "boolean",
            "description": "Kamernet's city page also lists neighbouring towns (Almere under Amsterdam). Turn this on to keep only rentals in the city you typed. Ignored when the city is netherlands.",
            "default": false
          },
          "deltaMode": {
            "title": "Remember listings between runs",
            "type": "boolean",
            "description": "Turns the actor into a monitor. Each run compares every rental with what the previous run of the same watchlist saw and fills in the change, previous rent and alert columns. Schedule it every 10 to 15 minutes and combine with the options below.",
            "default": false
          },
          "deltaName": {
            "title": "Watchlist name (optional)",
            "type": "string",
            "description": "Leave empty and one is derived from the property type and filters. Type your own name to keep one memory across changes, or to run several independent watchlists.",
            "default": ""
          },
          "alertOn": {
            "title": "Send an alert for",
            "enum": [
              "new-listing",
              "price-below",
              "both"
            ],
            "type": "string",
            "description": "New listing: a rental not seen on the previous run. Rent below: a rental asking the limit below or less that was not already under it. Both: either. A monitoring run reads newest first and stops at the first page that holds only rentals it already knows.",
            "default": "new-listing"
          },
          "alertBelowRent": {
            "title": "Rent limit for alerts (EUR a month)",
            "type": "integer",
            "description": "Used by \"Rent below my limit\". Leave empty and rent alerts are off."
          },
          "alertOnChangeOnly": {
            "title": "Only return rows that changed",
            "type": "boolean",
            "description": "With monitoring on, a rental already seen at the same rent writes no row and is not billed. New listings, rent changes and alerts are returned.",
            "default": false
          },
          "skipFirstRun": {
            "title": "Seed silently (no rows on the first run)",
            "type": "boolean",
            "description": "The first run of a search has nothing to compare with, so every listing is new. Turn this on to remember them without returning or billing them, so alerts start from the second run.",
            "default": false
          },
          "notifyUrl": {
            "title": "Send alerts to (Discord or Slack webhook, Telegram bot link, or any URL)",
            "type": "string",
            "description": "Optional. After a listing is billed, each alert row is posted here as one message with the place, rent, size and the Kamernet link. Discord or Slack: paste the channel's webhook URL. Telegram: https://api.telegram.org/bot<token>/sendMessage?chat_id=<chat id>. Any other URL receives JSON. Messages are free, and a failed message never fails the run (the row's notifyErrors says why). Stored encrypted, never logged or written to the results."
          },
          "notifyFormat": {
            "title": "Message format",
            "enum": [
              "auto",
              "discord",
              "slack",
              "telegram",
              "json"
            ],
            "type": "string",
            "description": "Leave on 'Detect from the link': discord.com links get Discord messages, hooks.slack.com Slack, api.telegram.org Telegram, anything else JSON. Pick one only to override that.",
            "default": "auto"
          },
          "maxNotificationsPerRun": {
            "title": "Most alert messages per run",
            "type": "integer",
            "description": "Alerts above this are still in the results; one \"more alerts\" message is sent instead. 0 sends only that message.",
            "default": 20
          },
          "testRun": {
            "title": "Try it first — only process the first 5",
            "type": "boolean",
            "description": "Turn this on to test your input on a small sample before running the full list. Turn it off to process everything.",
            "default": false
          },
          "onlyFound": {
            "title": "Hide rows with no result",
            "type": "boolean",
            "description": "Only keep rows where something was actually found. Misses are always free, whether or not you show them here.",
            "default": false
          },
          "includeKeywords": {
            "title": "Only keep listings containing",
            "type": "array",
            "description": "Optional, case-insensitive. Keeps only listings whose street, city, type or link contains at least one of these words. Applied after the listings are read, so you can get fewer rows than the limit above.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Skip listings containing",
            "type": "array",
            "description": "Optional, case-insensitive. Drops any listing whose street, city, type or link contains one of these words. Applied after the listings are read.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Stop after this many results",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. Stop the run once this many results have been found — useful for a quick, cheap sample. Leave blank for no limit."
          },
          "columns": {
            "title": "Which columns do you want?",
            "type": "array",
            "description": "Choose which pieces of information to include in each result row. All are included by default.",
            "items": {
              "type": "string",
              "enum": [
                "listingId",
                "url",
                "title",
                "propertyType",
                "street",
                "city",
                "rent",
                "rentIncludes",
                "sizeM2",
                "furnished",
                "availableFrom",
                "availableTo",
                "promoted",
                "imageUrl",
                "checkedAt",
                "changeType",
                "previousRent",
                "alertType",
                "notifyErrors"
              ],
              "enumTitles": [
                "Listing ID",
                "Listing link",
                "Title",
                "Property type",
                "Street",
                "City",
                "Rent (EUR a month)",
                "Rent includes",
                "Size (m²)",
                "Furnishing",
                "Available from",
                "Available until",
                "Promoted listing",
                "Photo",
                "Checked at",
                "Change since last run",
                "Previous rent (EUR)",
                "Alert",
                "Alert delivery errors"
              ]
            },
            "default": [
              "listingId",
              "url",
              "title",
              "propertyType",
              "street",
              "city",
              "rent",
              "rentIncludes",
              "sizeM2",
              "furnished",
              "availableFrom",
              "availableTo",
              "promoted",
              "imageUrl",
              "checkedAt",
              "changeType",
              "previousRent",
              "alertType",
              "notifyErrors"
            ]
          },
          "expandRows": {
            "title": "One row per listing",
            "type": "boolean",
            "description": "Always on: every rental is its own row.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 1,
            "type": "integer",
            "description": "Parallel requests. Keep conservative — this target has no browser fallback, so getting blocked costs more than slow-and-steady.",
            "default": 1
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy config. Residential recommended for anti-bot-sensitive targets.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}