{
  "openapi": "3.0.1",
  "info": {
    "title": "Immowelt, willhaben & Kleinanzeigen New Listing Monitor",
    "description": "Tracks German and Austrian property portals and returns only listings that appeared since your last run. Schedule it daily and get webhook alerts instead of the same list over and over.",
    "version": "0.1",
    "x-build-id": "9p7J29qDir7ahm9Hw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/mocha_tassel~real-estate-listing-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-mocha_tassel-real-estate-listing-monitor",
        "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/mocha_tassel~real-estate-listing-monitor/runs": {
      "post": {
        "operationId": "runs-sync-mocha_tassel-real-estate-listing-monitor",
        "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/mocha_tassel~real-estate-listing-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-mocha_tassel-real-estate-listing-monitor",
        "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": [
          "portal"
        ],
        "properties": {
          "portal": {
            "title": "Portal",
            "enum": [
              "immowelt",
              "willhaben",
              "kleinanzeigen"
            ],
            "type": "string",
            "description": "Which portal to watch.",
            "default": "immowelt"
          },
          "searchUrl": {
            "title": "Search URL (optional)",
            "type": "string",
            "description": "Paste any search URL from the portal. If set, the location and category fields below are ignored. Search and filter on the portal itself, then copy the address — this works for every location and every filter combination, including ones this Actor does not expose as fields."
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "For Immowelt, a German city name such as Berlin, Munich (München) or Leipzig. For willhaben, an Austrian town or state such as Wien, Graz or Steiermark; smaller municipalities are matched to their state automatically.",
            "default": "berlin"
          },
          "offerType": {
            "title": "Buy or rent",
            "enum": [
              "buy",
              "rent"
            ],
            "type": "string",
            "description": "Whether to watch properties for sale or for rent.",
            "default": "buy"
          },
          "estateType": {
            "title": "Property type (Immowelt)",
            "enum": [
              "apartment",
              "house",
              "land",
              "apartment-house"
            ],
            "type": "string",
            "description": "Type of property. Applies to Immowelt only; willhaben and Kleinanzeigen use the category field instead.",
            "default": "apartment"
          },
          "category": {
            "title": "Category (willhaben / Kleinanzeigen)",
            "type": "string",
            "description": "For willhaben: eigentumswohnung, mietwohnung, haus-kaufen, haus-mieten, grundstuecke. For Kleinanzeigen: mietwohnung, eigentumswohnung, haus-mieten, haus-kaufen, grundstueck.",
            "default": "eigentumswohnung"
          },
          "locationSlug": {
            "title": "Location slug (Kleinanzeigen)",
            "type": "string",
            "description": "The location exactly as it appears in the Kleinanzeigen URL, for example karlsruhe."
          },
          "locationCode": {
            "title": "Location code (Kleinanzeigen)",
            "type": "string",
            "description": "The code starting with l from the Kleinanzeigen URL, for example l9186 for Karlsruhe."
          },
          "maxItems": {
            "title": "Listings to check per run",
            "minimum": 10,
            "maximum": 2000,
            "type": "integer",
            "description": "How many listings the monitor scans each run. Higher is more thorough but slower and more expensive. Portals show newest first, so 200 is enough to catch a full day in most cities.",
            "default": 200
          },
          "minPrice": {
            "title": "Minimum price (EUR)",
            "type": "integer",
            "description": "Listings below this price are ignored."
          },
          "maxPrice": {
            "title": "Maximum price (EUR)",
            "type": "integer",
            "description": "Listings above this price are ignored."
          },
          "minArea": {
            "title": "Minimum living area (m²)",
            "type": "integer",
            "description": "Listings with less living space are ignored."
          },
          "maxArea": {
            "title": "Maximum living area (m²)",
            "type": "integer",
            "description": "Listings with more living space are ignored."
          },
          "minRooms": {
            "title": "Minimum rooms",
            "type": "integer",
            "description": "Listings with fewer rooms are ignored."
          },
          "onlyPrivate": {
            "title": "Private sellers only",
            "type": "boolean",
            "description": "Hides commercial agencies. Most effective on Kleinanzeigen, where commission-free offers from owners appear.",
            "default": false
          },
          "webhookUrl": {
            "title": "Webhook for alerts (optional)",
            "type": "string",
            "description": "New listings are sent as a JSON POST to this address. Works with Zapier, Make, n8n, Slack workflows or your own endpoint."
          },
          "stateKey": {
            "title": "Monitor name",
            "type": "string",
            "description": "If you watch several searches in parallel, give each one its own name so their histories stay separate.",
            "default": "default"
          },
          "emitAllOnFirstRun": {
            "title": "Return everything on the first run",
            "type": "boolean",
            "description": "On by default, so your very first run returns the current stock and you can see what the data looks like. Every run after that returns only genuinely new listings. Turn this off if you would rather have the first run stay silent and only build the baseline — useful when you wire the webhook up straight away and do not want an alert containing hundreds of existing listings.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Property portals block requests from data centres. The default uses Apify residential proxies from the matching country — without them runs fail with HTTP 403. Your own proxies work too.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}