{
  "openapi": "3.0.1",
  "info": {
    "title": "Otodom Scraper — Poland Property Listings & Prices",
    "description": "Scrape Otodom.pl flats, houses, plots, commercial property and new developments for sale or rent across Poland: price, price per m², area, rooms, floor, location down to the district, seller type, agency, photos. Optional full description, GPS, building details and features. No login.",
    "version": "0.1",
    "x-build-id": "HUlEkeJnvhCksvWwF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/yugenox~otodom-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-yugenox-otodom-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/yugenox~otodom-scraper/runs": {
      "post": {
        "operationId": "runs-sync-yugenox-otodom-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/yugenox~otodom-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-yugenox-otodom-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": {
          "locations": {
            "title": "📍 Locations",
            "type": "array",
            "description": "Cities, districts or voivodeships as Otodom writes them, e.g. \"Kraków\", \"Warszawa\", \"Mokotów, Warszawa\", \"Gdańsk\", \"mazowieckie\". English names work for big cities (\"Warsaw\", \"Cracow\") and regions (\"Masovian\", \"Silesia\"). Add the city or region after a comma to pick one of several places with the same name. Each location is searched separately. Leave empty to search all of Poland.",
            "items": {
              "type": "string"
            }
          },
          "transaction": {
            "title": "For sale or for rent",
            "enum": [
              "sale",
              "rent"
            ],
            "type": "string",
            "description": "Listings for sale or for rent.",
            "default": "sale"
          },
          "propertyType": {
            "title": "Property type",
            "enum": [
              "flat",
              "house",
              "plot",
              "commercial",
              "warehouse",
              "garage",
              "room",
              "investment"
            ],
            "type": "string",
            "description": "Flats, houses, plots, commercial property (shops, offices), warehouses, garages, rooms (rent only) or new developments (sale only).",
            "default": "flat"
          },
          "maxItems": {
            "title": "Max listings",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of listings for the whole run, shared fairly between your locations (a location with fewer listings leaves its share to the others). 0 = everything.",
            "default": 100
          },
          "includeDetails": {
            "title": "Include listing details",
            "type": "boolean",
            "description": "Also open every listing page for the full description, GPS coordinates, all photos, floor plans, building year and type, condition, heating, features (balcony, lift, garage …), the agency's address and its reference number. Charged as a separate event.",
            "default": false
          },
          "startUrls": {
            "title": "🔗 Otodom URLs",
            "type": "array",
            "description": "Optional: Otodom search result URLs (all filters in the URL are kept — set them on otodom.pl and paste the address) or listing URLs (otodom.pl/pl/oferta/…).",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "priceMin": {
            "title": "Min price (PLN)",
            "minimum": 0,
            "type": "integer",
            "description": "For rentals: monthly rent."
          },
          "priceMax": {
            "title": "Max price (PLN)",
            "minimum": 0,
            "type": "integer",
            "description": "For rentals: monthly rent."
          },
          "areaMin": {
            "title": "Min area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Usable area (for plots: plot area)."
          },
          "areaMax": {
            "title": "Max area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Usable area (for plots: plot area)."
          },
          "rooms": {
            "title": "Rooms",
            "type": "array",
            "description": "Number of rooms. Empty = any.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5",
                "6",
                "7",
                "8",
                "9",
                "10"
              ],
              "enumTitles": [
                "1 room (studio)",
                "2 rooms",
                "3 rooms",
                "4 rooms",
                "5 rooms",
                "6 rooms",
                "7 rooms",
                "8 rooms",
                "9 rooms",
                "10 rooms"
              ]
            }
          },
          "market": {
            "title": "Market",
            "enum": [
              "all",
              "primary",
              "secondary"
            ],
            "type": "string",
            "description": "New build (primary market) or resale (secondary market).",
            "default": "all"
          },
          "ownerType": {
            "title": "Advertiser",
            "enum": [
              "all",
              "private",
              "agency"
            ],
            "type": "string",
            "description": "Only private owners, or only agencies and developers.",
            "default": "all"
          },
          "postedWithin": {
            "title": "Posted within",
            "enum": [
              "any",
              "1",
              "3",
              "7",
              "14",
              "30"
            ],
            "type": "string",
            "description": "Only listings added in this period.",
            "default": "any"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "default",
              "newest",
              "price_asc",
              "price_desc",
              "area_asc",
              "area_desc"
            ],
            "type": "string",
            "description": "Order of the results (matters when Max listings is smaller than what a search finds).",
            "default": "default"
          },
          "excludeDevelopments": {
            "title": "Leave out new-development cards",
            "type": "boolean",
            "description": "Otodom mixes whole new developments (one card per project, priced from X per m²) into flat and house results. Turn this on to keep only individual listings. Left-out cards are not charged.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy (datacenter) is the default and comes with every Apify plan. If Otodom refuses datacenter IPs for a while, the run switches to residential proxies when your account has them.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}