{
  "openapi": "3.0.1",
  "info": {
    "title": "Immoweb Scraper & New-Listing Monitor - Belgium Property",
    "description": "Turn monitoring on and every later run returns only the listings it has not returned before, so you are never charged for the same property twice. Every Immoweb.be listing as clean JSON: price with its meaning, monthly charges apart from rent, bedrooms, living and land area, EPC. Unofficial.",
    "version": "0.1",
    "x-build-id": "BDfP8vDo376Ut9mfU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neverempty~immoweb-listings/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neverempty-immoweb-listings",
        "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/neverempty~immoweb-listings/runs": {
      "post": {
        "operationId": "runs-sync-neverempty-immoweb-listings",
        "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/neverempty~immoweb-listings/run-sync": {
      "post": {
        "operationId": "run-sync-neverempty-immoweb-listings",
        "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": {
          "searchUrl": {
            "title": "Immoweb search URL (optional)",
            "type": "string",
            "description": "Paste an English Immoweb listing page, for example https://www.immoweb.be/en/search/house/for-sale/brussels/1000 or https://www.immoweb.be/en/search/apartment/for-rent, and the four fields below are ignored. Query parameters are dropped: Immoweb's robots.txt forbids them, so every filter runs here on the rows already fetched."
          },
          "channel": {
            "title": "For sale or to rent",
            "enum": [
              "sale",
              "rent"
            ],
            "type": "string",
            "description": "sale = for-sale, rent = for-rent.",
            "default": "sale"
          },
          "propertyType": {
            "title": "Property type",
            "enum": [
              "house-and-apartment",
              "house",
              "apartment",
              "garage",
              "office",
              "land",
              "industry",
              "business",
              "castle"
            ],
            "type": "string",
            "description": "Immoweb's own words. Any other word is silently turned into houses across Belgium by Immoweb, so only these are accepted.",
            "default": "house-and-apartment"
          },
          "locality": {
            "title": "Locality",
            "type": "string",
            "description": "A town as Immoweb spells it in its addresses: brussels, antwerp, gent, liege, leuven. Leave empty for the whole of Belgium. A locality without a postcode is taken by Immoweb as the whole province. A locality Immoweb does not know is reported as a no-such-search row, not as an empty result - Immoweb would otherwise silently widen the search to the whole country.",
            "default": ""
          },
          "postalCode": {
            "title": "Postcode",
            "type": "string",
            "description": "The 4-digit Belgian postcode that goes with the locality (brussels + 1000, antwerp + 2000). Immoweb ignores a postcode on its own, so it needs the locality.",
            "default": ""
          },
          "maxListings": {
            "title": "Maximum properties",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many properties to return. You are charged for the rows you actually receive.",
            "default": 20
          },
          "maxPages": {
            "title": "Maximum listing pages to open",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "A hard stop on how many pages are requested, whatever the filters do. 0 lets the run work it out.",
            "default": 0
          },
          "useProxy": {
            "title": "Use an Apify proxy",
            "type": "boolean",
            "description": "Off by default because Immoweb answers Apify's own network directly. If Immoweb ever starts blocking, the run switches to a proxy on its own.",
            "default": false
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Keep only properties whose title, type, address, flags, project or agency contain these words. No extra requests are made.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "keywordMatch": {
            "title": "Keyword match",
            "enum": [
              "any",
              "all"
            ],
            "type": "string",
            "description": "any: at least one keyword. all: every keyword.",
            "default": "any"
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop properties containing any of these words.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "agencyNames": {
            "title": "Agencies",
            "type": "array",
            "description": "Keep only properties marketed by these agencies. Partial names work.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Minimum price (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "A sale price is a total; a rent is per month, the way Immoweb publishes it. A new-build project with a price range is kept if any part of the range fits. 0 means no minimum.",
            "default": 0
          },
          "maxPrice": {
            "title": "Maximum price (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "0 means no maximum. Monthly charges are a separate column and are not included.",
            "default": 0
          },
          "requirePrice": {
            "title": "Only properties with a single published price",
            "type": "boolean",
            "description": "Off by default: a property whose price is not published, or is only a range, is simply kept.",
            "default": false
          },
          "minBedrooms": {
            "title": "Minimum bedrooms",
            "minimum": -1,
            "maximum": 30,
            "type": "integer",
            "description": "-1 turns the filter off.",
            "default": -1
          },
          "maxBedrooms": {
            "title": "Maximum bedrooms",
            "minimum": -1,
            "maximum": 30,
            "type": "integer",
            "description": "-1 turns the filter off.",
            "default": -1
          },
          "minLivingAreaSqm": {
            "title": "Minimum living area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "0 means no minimum. A property without a published area is kept.",
            "default": 0
          },
          "maxLivingAreaSqm": {
            "title": "Maximum living area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "0 means no maximum.",
            "default": 0
          },
          "minLandAreaSqm": {
            "title": "Minimum land area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "0 means no minimum. A property without a published land area is kept.",
            "default": 0
          },
          "propertySubtypes": {
            "title": "Property subtypes",
            "type": "array",
            "description": "Immoweb's own subtype words, for example VILLA, BUNGALOW, DUPLEX, PENTHOUSE, FLAT_STUDIO, GROUND_FLOOR, LOFT, MANSION, APARTMENT_BLOCK, MIXED_USE_BUILDING. Leave empty for all.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "postalCodes": {
            "title": "Postcodes",
            "type": "array",
            "description": "Keep only these 4-digit postcodes. Useful with a province-wide search.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "provinces": {
            "title": "Provinces",
            "type": "array",
            "description": "Keep only these provinces as Immoweb names them: Brussels, Antwerp, East Flanders, West Flanders, Flemish Brabant, Limburg, Walloon Brabant, Hainaut, Liège, Luxembourg, Namur.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "epcCertificates": {
            "title": "EPC certificate",
            "type": "array",
            "description": "Keep only these energy classes (A+, A, B, C, D, E, F, G). A property without a published class is kept.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeUnderOption": {
            "title": "Exclude properties under option",
            "type": "boolean",
            "description": "Drop listings Immoweb flags as under option (an offer has been accepted).",
            "default": false
          },
          "newConstructionOnly": {
            "title": "New construction only",
            "type": "boolean",
            "description": "Keep only listings Immoweb flags as new construction or a new real-estate project.",
            "default": false
          },
          "excludeProjects": {
            "title": "Exclude new-build projects with a price range",
            "type": "boolean",
            "description": "Drop the grouped project listings that carry a min-max price instead of one price.",
            "default": false
          },
          "updatedWithinDays": {
            "title": "Last updated within the last N days",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "By Immoweb's last-modification date (Immoweb does not publish the first-listed date on the list page). 0 means no date filter. A property whose date cannot be read is kept.",
            "default": 0
          },
          "monitoringMode": {
            "title": "Only return listings that are new since the last run",
            "type": "boolean",
            "description": "Turn this on and schedule the Actor: each run returns only the properties it has never returned before, so you are charged for new stock rather than for the same pages again. Properties that did not fit under the limit are still waiting for you on the next run.",
            "default": false
          },
          "resetMonitoringState": {
            "title": "Forget what was already returned",
            "type": "boolean",
            "description": "Clears the memory for this search, so the next monitoring run starts from scratch. Works with or without monitoring mode on.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}