{
  "openapi": "3.0.1",
  "info": {
    "title": "Otodom.pl Scraper | 2$/1k",
    "description": "Scrape Otodom.pl listings with 30+ fields: price, area, rooms, location, GPS, seller info. Supports sale & rent for apartments, houses, plots. No browser needed.",
    "version": "1.0",
    "x-build-id": "b5IfIrXXidj8qKnTj"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/trev0n~otodom-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-trev0n-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/trev0n~otodom-scraper/runs": {
      "post": {
        "operationId": "runs-sync-trev0n-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/trev0n~otodom-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-trev0n-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": "List of Otodom.pl URLs to scrape. Can be search result pages or individual property listing URLs. If provided, other search filters are ignored.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchType": {
            "title": "Search Type",
            "enum": [
              "sprzedaz",
              "wynajem"
            ],
            "type": "string",
            "description": "Type of search: sale or rent.",
            "default": "sprzedaz"
          },
          "propertyType": {
            "title": "Property Type",
            "enum": [
              "mieszkanie",
              "dom",
              "dzialka",
              "lokal",
              "haleimagazyny",
              "garaz"
            ],
            "type": "string",
            "description": "Type of property to search for.",
            "default": "mieszkanie"
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Location path copied from an Otodom search URL - the part after '/wyniki/<searchType>/<propertyType>/'. Examples: 'mazowieckie/warszawa/warszawa/warszawa' (Warsaw), 'malopolskie/krakow/krakow/krakow' (Krakow), 'mazowieckie' (whole province). A bare city name such as 'warszawa' is NOT a valid path and returns Otodom's 404 page. If unsure, open otodom.pl, run the search there and paste the full URL into 'startUrls' instead."
          },
          "districts": {
            "title": "Districts",
            "type": "array",
            "description": "Narrow the search to these districts of the city in 'location', e.g. ['Mokotów', 'Wola'] with location 'mazowieckie/warszawa/warszawa/warszawa'. Names are matched without Polish diacritics or case ('Praga-Południe' and 'praga-poludnie' both work). Several districts run as one search, so 'maxItems' is shared between them. An entry with '/' is used as a full Otodom location path. Otodom rejects the whole search (404) when any district name is unknown. Leave empty to search the whole location.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "priceMin": {
            "title": "Price Min (PLN)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price in PLN."
          },
          "priceMax": {
            "title": "Price Max (PLN)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price in PLN."
          },
          "areaMin": {
            "title": "Area Min (m2)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum area in square meters."
          },
          "areaMax": {
            "title": "Area Max (m2)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum area in square meters."
          },
          "roomsMin": {
            "title": "Rooms Min",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Minimum number of rooms."
          },
          "roomsMax": {
            "title": "Rooms Max",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum number of rooms."
          },
          "buildYear": {
            "title": "Build Year From",
            "minimum": 1900,
            "maximum": 2030,
            "type": "integer",
            "description": "Minimum construction year."
          },
          "market": {
            "title": "Market",
            "enum": [
              "ALL",
              "PRIMARY",
              "SECONDARY"
            ],
            "type": "string",
            "description": "Market type: primary (developer) or secondary.",
            "default": "ALL"
          },
          "postedDate": {
            "title": "Posted Date",
            "enum": [
              "",
              "1",
              "3",
              "7",
              "14"
            ],
            "type": "string",
            "description": "Filter listings by how recently they were posted (days since listing was created). Leave empty for no filter.",
            "default": ""
          },
          "maxItems": {
            "title": "Max Items",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of property listings to scrape (0 = unlimited).",
            "default": 50
          },
          "extractDetails": {
            "title": "Extract Full Details",
            "type": "boolean",
            "description": "When enabled, visits each property page for full details (description, features, images, agent info). When disabled, extracts listing-level data only (faster and cheaper).",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of parallel requests. Higher = faster but may trigger rate limiting.",
            "default": 20
          },
          "maxRequestRetries": {
            "title": "Max Request Retries",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum number of retries for failed requests.",
            "default": 2
          },
          "maxRequestsPerMinute": {
            "title": "Max Requests Per Minute",
            "minimum": 10,
            "maximum": 300,
            "type": "integer",
            "description": "Maximum number of requests per minute to avoid rate limiting.",
            "default": 150
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Proxy settings. With Apify Proxy, each request is first tried through datacenter IPs and retried through the selected group (residential IPs in Poland by default), so blocked requests still get through. Datacenter only is used when residential is not available on your plan. Override this only if you want to use your own proxy URLs."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}