{
  "openapi": "3.0.1",
  "info": {
    "title": "Otodom Rental Yield Calculator: Buy-to-Let ROI Poland",
    "description": "Find the best apartments to buy and rent out in Poland. Scrapes Otodom.pl sale and rental listings, estimates rent per neighbourhood and calculates gross and net rental yield, payback period and price vs area median for every apartment for sale.",
    "version": "0.1",
    "x-build-id": "f2usfucoLFNphwL30"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/donzely~otodom-rental-yield-calculator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-donzely-otodom-rental-yield-calculator",
        "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/donzely~otodom-rental-yield-calculator/runs": {
      "post": {
        "operationId": "runs-sync-donzely-otodom-rental-yield-calculator",
        "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/donzely~otodom-rental-yield-calculator/run-sync": {
      "post": {
        "operationId": "run-sync-donzely-otodom-rental-yield-calculator",
        "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 or Otodom search URLs",
            "type": "array",
            "description": "City or district names as you would type them on Otodom (e.g. \"Kraków\", \"Warszawa Mokotów\", \"Gdańsk Wrzeszcz\"), Otodom location paths (e.g. \"mazowieckie/warszawa/warszawa/warszawa/mokotow\") or Otodom search URLs. Each location is analyzed separately.",
            "default": [
              "mazowieckie/warszawa/warszawa/warszawa/mokotow"
            ],
            "items": {
              "type": "string"
            }
          },
          "maxListingsPerLocation": {
            "title": "Max sale listings per location",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "How many apartments for sale to analyze per location (newest first).",
            "default": 72
          },
          "rentalPagesPerLocation": {
            "title": "Rental pages for the rent model",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Rental result pages (72 listings each) used to estimate rent per m². More pages give more precise neighbourhood estimates.",
            "default": 10
          },
          "maxPricePln": {
            "title": "Max price (PLN)",
            "type": "integer",
            "description": "Only apartments up to this price."
          },
          "minAreaM2": {
            "title": "Min area (m²)",
            "type": "integer",
            "description": "Minimum apartment size."
          },
          "maxAreaM2": {
            "title": "Max area (m²)",
            "type": "integer",
            "description": "Maximum apartment size."
          },
          "market": {
            "title": "Market",
            "enum": [
              "ALL",
              "PRIMARY",
              "SECONDARY"
            ],
            "type": "string",
            "description": "Primary market = new apartments from developers (no PCC tax).",
            "default": "ALL"
          },
          "minGrossYieldPct": {
            "title": "Min gross yield (%)",
            "type": "number",
            "description": "Output only apartments with at least this gross yield."
          },
          "minNetYieldPct": {
            "title": "Min net yield (%)",
            "type": "number",
            "description": "Output only apartments with at least this net yield."
          },
          "vacancyMonthsPerYear": {
            "title": "Vacancy (months per year)",
            "type": "number",
            "description": "Months per year without a tenant.",
            "default": 1
          },
          "maintenancePctOfRent": {
            "title": "Maintenance & repairs (% of rent)",
            "type": "number",
            "description": "Repairs and wear, as % of collected rent.",
            "default": 5
          },
          "rentalTaxPct": {
            "title": "Rental income tax (%)",
            "type": "number",
            "description": "Polish flat-rate tax on private rental (ryczałt) is 8.5% up to 100,000 PLN per year.",
            "default": 8.5
          },
          "insurancePlnPerYear": {
            "title": "Insurance (PLN per year)",
            "type": "integer",
            "description": "Apartment insurance.",
            "default": 400
          },
          "pccPctSecondary": {
            "title": "PCC tax on secondary market (%)",
            "type": "number",
            "description": "Civil law transactions tax for secondary market purchases. Set 0 for first-home exemption.",
            "default": 2
          },
          "notaryAndCourtPln": {
            "title": "Notary & court fees (PLN)",
            "type": "integer",
            "description": "Notary deed, land register entries.",
            "default": 5000
          },
          "agencyFeePct": {
            "title": "Agency fee (%)",
            "type": "number",
            "description": "Buyer's commission for listings by agencies (not applied to private owners).",
            "default": 0
          },
          "renovationPlnPerM2Secondary": {
            "title": "Renovation (PLN per m², secondary only)",
            "type": "integer",
            "description": "Refresh before renting out.",
            "default": 0
          },
          "furnishingPln": {
            "title": "Furnishing (PLN)",
            "type": "integer",
            "description": "One-off furnishing cost.",
            "default": 0
          },
          "minSampleSize": {
            "title": "Min sample for an area estimate",
            "minimum": 3,
            "type": "integer",
            "description": "Minimum number of listings in a neighbourhood and size group before falling back to a wider area.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional Apify Proxy.",
            "default": {
              "useApifyProxy": 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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}