{
  "openapi": "3.0.1",
  "info": {
    "title": "Sreality Scraper - Czech Property Listings & Prices",
    "description": "Scrape Sreality.cz, the Czech Republic's biggest property portal. Prices in CZK and per m2, disposition, usable area, floor, panel or brick, energy label, GPS and agency.",
    "version": "1.0",
    "x-build-id": "QBF55yQFFKdgbARH5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~sreality-property-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-sreality-property-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/sian.agency~sreality-property-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-sreality-property-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/sian.agency~sreality-property-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-sreality-property-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": {
          "operation": {
            "title": "🎯 What do you want to scrape?",
            "enum": [
              "search",
              "detail"
            ],
            "type": "string",
            "description": "🎯 **PICK ONE PER RUN.**\n\n🔍 **Property Search** returns listing rows for a section, deal type and area, with every filter below applied. This is the one you want almost always.\n\n📄 **Property Detail** takes Sreality listing URLs or bare numeric IDs and returns the full record for each one.\n\n💡 Want the full record on a SEARCH run instead? Leave this on Property Search and switch on **Fetch full detail** below.",
            "default": "search"
          },
          "propertyType": {
            "title": "🏘️ Property type",
            "enum": [
              "byty",
              "domy",
              "pozemky",
              "komercni",
              "ostatni"
            ],
            "type": "string",
            "description": "🏘️ **WHICH SREALITY SECTION** to search.\n\n🏢 **Apartments** and 🏡 **Houses** carry the richest rows: disposition, usable area, floor, building type and energy label.\n\n🌾 **Land** and 🏬 **Commercial** rows have no disposition, so the Dispositions filter below does nothing for them.\n\n💡 One section per run. To sweep several, schedule one run each and pay only for the rows each one returns.",
            "default": "byty"
          },
          "transaction": {
            "title": "💱 Deal type",
            "enum": [
              "prodej",
              "pronajem",
              "drazby"
            ],
            "type": "string",
            "description": "💱 **SALE, RENT OR AUCTION.**\n\n💰 **For sale** prices are the asking price for the whole property.\n\n🔑 **For rent** prices are the MONTHLY rent. The unit is stated in the `priceUnit` column of every row, so you never have to guess.\n\n⚖️ **Auction** covers court and insolvency sales.\n\n💡 Run one area for sale and again for rent, join on district and disposition, and you have a gross yield map.",
            "default": "prodej"
          },
          "regions": {
            "title": "🗺️ Regions or districts",
            "type": "array",
            "description": "🗺️ **WHERE TO SEARCH.** One Czech region or district per line, by name or by Sreality's own slug: `Praha`, `Hlavní město Praha`, `Jihomoravsky kraj`, `Brno-mesto`, `Olomouc`.\n\n✍️ **Accents are optional.** Names are resolved against Sreality's live list at run time, so you never look up a numeric ID.\n\n⬜ **Empty searches the whole Czech Republic.**\n\n🚀 One Sreality query serves at most ~10,000 rows. Each line here runs its own query, so more areas means more reach.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "dispositions": {
            "title": "🚪 Dispositions",
            "type": "array",
            "description": "🚪 **CZECH LAYOUTS TO INCLUDE**, one per line: `1+kk`, `1+1`, `2+kk`, `2+1`, `3+kk`, `3+1`, `4+kk`, `4+1`, `5+kk`, `5+1`, `6 a vice`, `Atypicky`.\n\n⬜ **Empty means all of them.**\n\n🏡 For Houses, Land and Commercial the sub-types of that section are accepted by name instead. The layout list above is apartments only.\n\n⚠️ A name Sreality does not recognise stops the search and returns an error row naming the values it accepts. A rejected filter costs nothing.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "💵 Min price (CZK)",
            "minimum": 0,
            "type": "integer",
            "description": "💵 **CHEAPEST LISTING TO INCLUDE**, in Czech koruna.\n\n⬜ **0 means no lower bound** (the default).\n\n🔑 For rentals this is the MONTHLY rent, not an annual figure.\n\n🎯 A price band makes the run both faster and cheaper, because the rows outside it are never fetched and never billed.",
            "default": 0
          },
          "maxPrice": {
            "title": "💰 Max price (CZK)",
            "minimum": 0,
            "type": "integer",
            "description": "💰 **MOST EXPENSIVE LISTING TO INCLUDE**, in Czech koruna.\n\n⬜ **0 means no upper bound** (the default).\n\n❓ About 3% of sale listings say `info o ceně` and carry no price at all. Those come back with `priceCzk` empty and `priceOnRequest` true, never a misleading 0, and **any price filter excludes them**.\n\n🎯 Pair with Min price to sweep one band at a time and reach past the per-query row ceiling.",
            "default": 0
          },
          "minArea": {
            "title": "📐 Min usable area (m2)",
            "minimum": 0,
            "type": "integer",
            "description": "📐 **SMALLEST USABLE FLOOR AREA** to include, in square metres.\n\n⬜ **0 means no lower bound** (the default).\n\n📏 Usable area is Sreality's `užitná plocha`, the interior floor area of the unit.\n\n💡 Combine it with a price band to isolate one price-per-m2 class and study that instead of the whole market.",
            "default": 0
          },
          "maxArea": {
            "title": "📏 Max usable area (m2)",
            "minimum": 0,
            "type": "integer",
            "description": "📏 **LARGEST USABLE FLOOR AREA** to include, in square metres.\n\n⬜ **0 means no upper bound** (the default).\n\n🎯 Use it with Min usable area to take one size class at a time.\n\n📊 Every row also carries `priceCzkPerSqM`, computed by Sreality itself, so you can rank on price per m2 without doing the division.",
            "default": 0
          },
          "buildingTypes": {
            "title": "🧱 Building type",
            "type": "array",
            "description": "🧱 **CONSTRUCTION TYPE**, one per line, in Czech: `Panelova`, `Cihlova`, `Drevostavba`, `Kamenna`, `Montovana`, `Skeletova`, `Smisena`, `Modularni`.\n\n✍️ **Accents are optional**, and a partial name is enough: `panel` finds Panelová.\n\n🎯 **Panel versus brick is the filter Czech buyers apply most.** Prefab panel blocks and brick buildings trade at visibly different prices per m2 in the same street.\n\n⬜ Empty means all of them. An unrecognised name stops the search and costs nothing.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "ownership": {
            "title": "📜 Ownership",
            "enum": [
              "any",
              "osobni",
              "druzstevni",
              "statni"
            ],
            "type": "string",
            "description": "📜 **PERSONAL OR COOPERATIVE OWNERSHIP.** This is what decides whether a Czech flat can be mortgaged at all.\n\n🔑 **Personal (osobní)** is freehold: the buyer owns the unit and a bank lends against it normally.\n\n🤝 **Cooperative (družstevní)** is a share in a housing cooperative. Most Czech banks will not lend against one, which is why it trades at a discount.\n\n🏛️ **State or municipal** is a small residual class.",
            "default": "any"
          },
          "maxAgeDays": {
            "title": "🗓️ Listed in the last N days",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "🗓️ **ONLY LISTINGS PUBLISHED IN THE LAST N DAYS.**\n\n⬜ **0 means any age** (the default).\n\n⏰ **This is the scheduling switch.** Set it to 1 and run daily and you pay for what is new since yesterday, instead of re-buying the whole market every morning.\n\n🎯 Agencies pick up new instructions and private-seller listings within hours, so being first is most of the value.",
            "default": 0
          },
          "sort": {
            "title": "🔀 Sort order",
            "enum": [
              "-date",
              "price_asc",
              "price_desc"
            ],
            "type": "string",
            "description": "🔀 **WHICH LISTINGS COME FIRST**, and therefore which ones you get when Max properties cuts the run short.\n\n⚠️ **Sreality's 'most recently updated' is the LAST EDIT date, not the first publication date.** A three-month-old listing whose price was cut this morning sits at the top. For genuinely new stock use **Listed in the last N days** above.\n\n⬆️⬇️ Cheapest and most expensive first are the bargain-hunting and prime-stock sorts.",
            "default": "-date"
          },
          "maxResults": {
            "title": "🔢 Max properties",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "🔢 **STOP AFTER THIS MANY PROPERTIES**, counted across every area in the run.\n\n📦 Listings are read 200 at a time and the run stops on the row that hits your number, so you are never billed for a rounded-up batch.\n\n💰 **Free accounts are capped at 25 rows per run** whatever you type here. Paid accounts are not.\n\n⚠️ Sreality serves at most ~10,000 rows per query. Split by area or price band to go past that.",
            "default": 100
          },
          "includeDetails": {
            "title": "📄 Fetch full detail (extra charge)",
            "type": "boolean",
            "description": "📄 **THE WHOLE LISTING, NOT ONLY THE SEARCH CARD.** Adds the full description, floor number and floors in the building, building type and condition, energy label, amenities (lift, balcony, terrace, cellar, garage), view count, and the listing agency plus the named agent with their public phone and email.\n\n💰 **Charged per enriched property** on top of the search row.\n\n🎯 **Worth it for:** agency and agent lead generation.\n❌ **Skip it for:** price and yield analytics.",
            "default": false
          },
          "propertyUrls": {
            "title": "🔗 Property URLs or IDs",
            "type": "array",
            "description": "🔗 **FOR PROPERTY DETAIL MODE:** the listings you want the full record for.\n\n📱 Open the listing on sreality.cz and copy the address bar, e.g. `https://www.sreality.cz/detail/prodej/byt/3+1/praha-prosek-vysocanska/3046166604`. The bare numeric ID from the end of that URL works on its own too.\n\n📝 **Bulk edit** pastes one per line. 📁 Upload a .txt file. 🔗 **+ Add** for one at a time.\n\n⚠️ Ignored while the operation above is Property Search.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchUrls": {
            "title": "🌐 Search URLs",
            "type": "array",
            "description": "🌐 **PASTE A SREALITY SEARCH INSTEAD OF FILLING THE FORM ABOVE**, e.g. `https://www.sreality.cz/hledani/prodej/byty/praha`.\n\n🎛️ The deal type, section and area in the path are read straight off each URL, and they win over the fields above for that one search.\n\n➕ Search URLs run **in addition to** the areas listed above.\n\n⚠️ Only the path is read. Query-string filters are not, so set those in the fields above.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}