{
  "openapi": "3.0.1",
  "info": {
    "title": "Sreality Palindrom Scraper",
    "description": "Scrape property listings from Sreality.cz - Czech Republic's largest real estate portal. Paste a search URL with filters and get structured JSON of every listing.",
    "version": "1.4",
    "x-build-id": "WkV0bDD4Z5LTTTsWa"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/janmatejka~palindrom/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-janmatejka-palindrom",
        "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/janmatejka~palindrom/runs": {
      "post": {
        "operationId": "runs-sync-janmatejka-palindrom",
        "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/janmatejka~palindrom/run-sync": {
      "post": {
        "operationId": "run-sync-janmatejka-palindrom",
        "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": {
          "searchUrl": {
            "title": "Sreality search URL",
            "pattern": "^https?://(www\\.)?sreality\\.cz/.+",
            "type": "string",
            "description": "Paste the full URL from sreality.cz with all your filters applied. The actor detects category, locality, price range and other filters automatically by reading Sreality's own filter state. Leave empty if you provide City or API params instead."
          },
          "city": {
            "title": "City or locality (alternative to URL)",
            "type": "string",
            "description": "Free-text Czech city, district or street (e.g. 'Praha', 'Praha 6', 'Brno-Bystrc', 'Plzeň'). Resolved via Sreality's own suggest API, so accents and spelling variants are handled automatically. Combine with Category and Offer type below. Ignored if Search URL is also set."
          },
          "category": {
            "title": "Category (when using City)",
            "enum": [
              "",
              "byty",
              "domy",
              "pozemky",
              "komercni",
              "ostatni"
            ],
            "type": "string",
            "description": "Property category to search. Used only with City; otherwise the category comes from Search URL or API params.",
            "default": ""
          },
          "offerType": {
            "title": "Offer type (when using City)",
            "enum": [
              "",
              "prodej",
              "pronajem",
              "drazba"
            ],
            "type": "string",
            "description": "Sale, rent or auction. Used only with City.",
            "default": ""
          },
          "sort": {
            "title": "Sort order",
            "enum": [
              "",
              "-date",
              "+date",
              "-price_norm",
              "+price_norm"
            ],
            "type": "string",
            "description": "Override the sort order of search results. Leave empty to use whatever the search URL specifies (default: newest first).",
            "default": ""
          },
          "apiParams": {
            "title": "Direct API params (advanced)",
            "type": "object",
            "description": "Skip the HTML bootstrap and call Sreality's JSON API directly with these snake_case params (e.g. {\"category_main_cb\":1,\"category_type_cb\":1,\"locality_region_id\":10}). When provided, searchUrl is ignored. Saves ~725 KB and one HTTP request per run, useful for cron-driven repeat polls."
          },
          "maxResults": {
            "title": "Max number of listings",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Hard cap on how many listings to scrape. Set to 0 for unlimited (the actor enforces an internal safety cap of 100 000).",
            "default": 100
          },
          "includeDetails": {
            "title": "Fetch detail pages",
            "type": "boolean",
            "description": "If enabled, the actor fetches each listing's detail page (description, broker contact, full attributes). Detail calls run concurrently (see Detail concurrency below) but will still take longer than search-only.",
            "default": false
          },
          "pageSize": {
            "title": "Search page size",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Number of listings to fetch per search request. 500 is the maximum Sreality accepts; lower it (e.g. 60) to reduce response size at the cost of more requests.",
            "default": 500
          },
          "detailConcurrency": {
            "title": "Detail concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many detail-page requests to run in parallel. Higher = faster but increases the chance of being rate-limited. Only used when 'Fetch detail pages' is on.",
            "default": 10
          },
          "resumeFromLastRun": {
            "title": "Resume from last run if it crashed",
            "type": "boolean",
            "description": "Persist progress (page number, count) into the actor's key-value store after each page. If a run crashes or gets aborted, the next invocation with the same filter resumes from the next unscraped page. Disabled by default - opt in only for long runs (10k+ listings) where restarting from scratch would burn meaningful credits.",
            "default": false
          },
          "enableHistory": {
            "title": "Track price history across runs",
            "type": "boolean",
            "description": "Persist a `{listingId -> {firstSeenAt, lastPriceCzk}}` map across runs. Each output record then carries `isNew`, `priceChanged`, `previousPriceCzk`, `daysTracked`, `firstSeenAt` - the killer feature for monitoring portfolios, watching for price drops, or measuring time-on-market. Schedule the actor and the history accumulates run by run.",
            "default": false
          },
          "historyStoreId": {
            "title": "Named key-value store for shared history",
            "type": "string",
            "description": "Optional name of an Apify Key-Value Store to share history across multiple actor configurations (e.g. different cron jobs polling different filters of the same property pool). Leave empty to use the actor's own KVS. Note: 9 MB per key limit caps stored history at roughly 50-80k listings per store."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify proxy settings. Residential is the safest choice; datacenter usually works for Sreality but has higher block risk.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "useDecodoProxy": {
            "title": "Use Decodo (BYOP) instead of Apify proxy",
            "type": "boolean",
            "description": "Bring-your-own-proxy. If enabled, the proxy URL below is used instead of the Apify proxy. Useful when you already pay Decodo / Smartproxy and want to control bandwidth costs separately.",
            "default": false
          },
          "decodoEndpoint": {
            "title": "Decodo proxy URL",
            "type": "string",
            "description": "Full proxy URL with credentials, e.g. http://user:pass@gate.decodo.com:7000. URL-encode special characters in the password. Only used when 'Use Decodo' is on."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}