{
  "openapi": "3.0.1",
  "info": {
    "title": "Otodom Scraper: Poland Property Listings & Price Monitor",
    "description": "Scrape Otodom.pl property listings in Poland. Returns price, area, rooms, location, advertiser and URLs from any search. Monitor mode tracks new and price-changed listings.",
    "version": "0.1",
    "x-build-id": "aRJJ6kB1bzAecVgbt"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/redomic~otodom-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-redomic-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/redomic~otodom-scraper/runs": {
      "post": {
        "operationId": "runs-sync-redomic-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/redomic~otodom-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-redomic-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": {
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Otodom.pl search result URLs to scrape (e.g. https://www.otodom.pl/pl/wyniki/sprzedaz/mieszkanie/warszawa/warszawa/warszawa). If provided, structured filters below are ignored for URL building.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Location path segment for Otodom search when not using startUrls (e.g. 'cala-polska', 'mazowieckie/warszawa/warszawa', 'malopolskie/krakow/krakow').",
            "default": "cala-polska"
          },
          "districts": {
            "title": "Districts",
            "type": "array",
            "description": "District slugs or names to search within the location (e.g. [\"mokotow\", \"wola\"]). Each district is searched as a separate Otodom path sharing a single maxItems budget with deduplication.",
            "items": {
              "type": "string"
            }
          },
          "dealType": {
            "title": "Deal type",
            "enum": [
              "sale",
              "rent"
            ],
            "type": "string",
            "description": "Sale or rent.",
            "default": "sale"
          },
          "propertyType": {
            "title": "Property type",
            "enum": [
              "flat",
              "house",
              "room",
              "plot",
              "commercial",
              "garage",
              "hall"
            ],
            "type": "string",
            "description": "Type of property to search.",
            "default": "flat"
          },
          "priceMin": {
            "title": "Min price (PLN)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum total price in PLN."
          },
          "priceMax": {
            "title": "Max price (PLN)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum total price in PLN."
          },
          "pricePerM2Min": {
            "title": "Min price per m² (PLN/m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price per square meter in PLN."
          },
          "pricePerM2Max": {
            "title": "Max price per m² (PLN/m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price per square meter in PLN."
          },
          "areaMin": {
            "title": "Min area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum area in square meters."
          },
          "areaMax": {
            "title": "Max area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum area in square meters."
          },
          "roomsMin": {
            "title": "Min rooms",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Minimum number of rooms."
          },
          "roomsMax": {
            "title": "Max rooms",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum number of rooms."
          },
          "floorMin": {
            "title": "Min floor",
            "minimum": -1,
            "type": "integer",
            "description": "Minimum floor number (-1 for cellar/basement, 0 for ground floor)."
          },
          "floorMax": {
            "title": "Max floor",
            "minimum": -1,
            "type": "integer",
            "description": "Maximum floor number (-1 for cellar/basement, 0 for ground floor)."
          },
          "buildYearMin": {
            "title": "Min build year",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum construction year."
          },
          "buildYearMax": {
            "title": "Max build year",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum construction year."
          },
          "market": {
            "title": "Market",
            "enum": [
              "",
              "PRIMARY",
              "SECONDARY"
            ],
            "type": "string",
            "description": "Primary (new) or secondary (resale) market. Leave empty for all.",
            "default": ""
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Keep only listings posted or modified in the last N days. Accepted values: 1, 3, 7, 14, 30. Leave empty for no time filter."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "default",
              "newest",
              "oldest",
              "price_asc",
              "price_desc",
              "area_asc",
              "area_desc"
            ],
            "type": "string",
            "description": "Order of search results. With a low maxItems, this decides which listings you get. 'default' keeps Otodom's order.",
            "default": "default"
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "monitor"
            ],
            "type": "string",
            "description": "search returns matching listings; monitor reports only new, changed and removed listings since the last run (state kept per source URL).",
            "default": "search"
          },
          "droppedOnly": {
            "title": "Only price drops (monitor)",
            "type": "boolean",
            "description": "In monitor mode, return only listings whose price dropped since the previous run. State and summary counts still track all changes.",
            "default": false
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum listing rows to return across all sources.",
            "default": 100
          },
          "lat": {
            "title": "Centre latitude",
            "minimum": -90,
            "maximum": 90,
            "type": "number",
            "description": "Centre latitude for radius search. Together with lng, rows get distanceKm; with radiusKm only rows within the radius are returned."
          },
          "lng": {
            "title": "Centre longitude",
            "minimum": -180,
            "maximum": 180,
            "type": "number",
            "description": "Centre longitude for radius search. Together with lat, rows get distanceKm; with radiusKm only rows within the radius are returned."
          },
          "radiusKm": {
            "title": "Radius (km)",
            "minimum": 0,
            "type": "number",
            "description": "Keep only rows within this many kilometres of lat/lng. Requires GPS (fetchDetails true); rows without coordinates are excluded. Every returned row includes distanceKm."
          },
          "includeNoPrice": {
            "title": "Include listings without a price",
            "type": "boolean",
            "description": "By default listings with no published price are dropped. Set true to also return them with priceAmount null.",
            "default": false
          },
          "fetchDetails": {
            "title": "Fetch full details",
            "type": "boolean",
            "description": "Open each listing's offer page to add GPS coordinates, build year, total floors, monthly charges (czynsz), heating, building details, amenities, photo gallery and description. On by default for richer data (datacenter requests only; slower and may use more proxy traffic). Set to false for faster search-card-only runs. Contact details are never included.",
            "default": true
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Proxy settings (used if the Actor is configured for proxied requests).",
            "default": {
              "useApifyProxy": true
            }
          },
          "agencyPortfolio": {
            "title": "Agency/developer portfolio",
            "type": "boolean",
            "description": "Group results by agency/developer with counts, median price per m², and listing URLs. In monitor mode, only groups with new or removed stock are reported between unchanged runs.",
            "default": false
          },
          "advertiserType": {
            "title": "Advertiser type",
            "enum": [
              "all",
              "private",
              "agency",
              "developer"
            ],
            "type": "string",
            "description": "Filter by who posted the listing. Leave as 'all' to include private owners, agencies and developers.",
            "default": "all"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}