{
  "openapi": "3.0.1",
  "info": {
    "title": "Otodom Scraper & New-Listing Monitor - Poland Real Estate",
    "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 Otodom.pl listing as clean JSON: price with its meaning, price per m2, rooms, area, floor, city and district, coordinates, agency. Unofficial.",
    "version": "0.1",
    "x-build-id": "rrnrNBAknn9BeyOps"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neverempty~otodom-listings/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neverempty-otodom-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~otodom-listings/runs": {
      "post": {
        "operationId": "runs-sync-neverempty-otodom-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~otodom-listings/run-sync": {
      "post": {
        "operationId": "run-sync-neverempty-otodom-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": "Otodom search URL (optional)",
            "type": "string",
            "description": "Paste an Otodom listing page, for example https://www.otodom.pl/pl/wyniki/sprzedaz/dom/mazowieckie, and the three settings below are ignored. Any query string you paste is dropped and filtering happens here instead, on the rows already fetched."
          },
          "transaction": {
            "title": "Sale or rent",
            "enum": [
              "sprzedaz",
              "wynajem"
            ],
            "type": "string",
            "description": "sprzedaz = for sale, wynajem = to rent. These are the words Otodom itself uses in the address.",
            "default": "sprzedaz"
          },
          "estate": {
            "title": "Property type",
            "type": "string",
            "description": "mieszkanie (flat), dom (house), dzialka (plot), lokal (commercial unit), haleimagazyny (warehouse), garaz (garage), pokoj (room). It has to be the word Otodom uses in the address.",
            "default": "mieszkanie"
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "cala-polska for the whole country, a region such as mazowieckie, or a city as its full path - mazowieckie/warszawa/warszawa/warszawa, malopolskie/krakow/krakow/krakow. A bare city name such as warszawa is a 404 on Otodom and comes back as a no-such-search row, not as an empty result.",
            "default": "cala-polska"
          },
          "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
          },
          "includeDescription": {
            "title": "Include the short description",
            "type": "boolean",
            "description": "The teaser text Otodom shows on the card. Turn it off for a smaller dataset - the keyword filter still searches it either way.",
            "default": true
          },
          "useProxy": {
            "title": "Use an Apify proxy",
            "type": "boolean",
            "description": "Off by default because Otodom answers Apify's own network directly. If Otodom 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, description, location, features 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 listed by these agencies. Partial names work.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Minimum price (PLN)",
            "minimum": 0,
            "type": "integer",
            "description": "A sale price is a total; a rent is per month, the way Otodom publishes it. The monthly administrative charge is a separate column and is not included here.",
            "default": 0
          },
          "maxPrice": {
            "title": "Maximum price (PLN)",
            "minimum": 0,
            "type": "integer",
            "description": "0 means no maximum.",
            "default": 0
          },
          "maxPricePerSqm": {
            "title": "Maximum price per sqm (PLN)",
            "minimum": 0,
            "type": "integer",
            "description": "0 means no maximum. Otodom publishes this on most sale listings.",
            "default": 0
          },
          "requirePrice": {
            "title": "Only properties with a published price",
            "type": "boolean",
            "description": "Off by default: a property whose price is hidden is not treated as a cheap one, it is simply kept.",
            "default": false
          },
          "minRooms": {
            "title": "Minimum rooms",
            "minimum": -1,
            "maximum": 20,
            "type": "integer",
            "description": "-1 turns the filter off.",
            "default": -1
          },
          "maxRooms": {
            "title": "Maximum rooms",
            "minimum": -1,
            "maximum": 20,
            "type": "integer",
            "description": "-1 turns the filter off.",
            "default": -1
          },
          "minFloor": {
            "title": "Minimum floor",
            "minimum": -1,
            "maximum": 50,
            "type": "integer",
            "description": "0 is the ground floor. -1 turns the filter off.",
            "default": -1
          },
          "maxFloor": {
            "title": "Maximum floor",
            "minimum": -1,
            "maximum": 50,
            "type": "integer",
            "description": "-1 turns the filter off.",
            "default": -1
          },
          "minAreaSqm": {
            "title": "Minimum area (sqm)",
            "minimum": 0,
            "type": "integer",
            "description": "0 means no minimum.",
            "default": 0
          },
          "maxAreaSqm": {
            "title": "Maximum area (sqm)",
            "minimum": 0,
            "type": "integer",
            "description": "0 means no maximum.",
            "default": 0
          },
          "advertiserType": {
            "title": "Advertiser",
            "enum": [
              "any",
              "agency",
              "private"
            ],
            "type": "string",
            "description": "Agency listings, or listings from private owners. Private owners' names are never returned.",
            "default": "any"
          },
          "exclusiveOnly": {
            "title": "Exclusive offers only",
            "type": "boolean",
            "description": "Otodom marks listings an agency holds exclusively.",
            "default": false
          },
          "listedWithinDays": {
            "title": "First listed within the last N days",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "0 means no date filter. A property whose date cannot be read is kept, not dropped.",
            "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.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}