{
  "openapi": "3.0.1",
  "info": {
    "title": "Kufar Scraper - Belarus Property Listings & Prices",
    "description": "Данные о недвижимости с Куфар: цены в BYN, USD и EUR, площадь, этаж, адрес, GPS, фото и контакты продавцов. Минск и все регионы, экспорт JSON/CSV.",
    "version": "1.0",
    "x-build-id": "V011sz1y4EhgTMfxv"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~kufar-property-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-kufar-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~kufar-property-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-kufar-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~kufar-property-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-kufar-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. Property Search returns listing rows for any Belarusian region, city or Minsk district, with any filter set. Property Detail takes Kufar advert addresses or IDs and opens each one for the complete seller description. The search row carries only the first 150 characters of that text.",
            "default": "search"
          },
          "propertyCategory": {
            "title": "🏠 Property category",
            "enum": [
              "apartments",
              "houses",
              "rooms",
              "commercial",
              "land",
              "garages",
              "new-developments"
            ],
            "type": "string",
            "description": "Which Kufar property section to read. Apartments is the largest section by far and the one most market studies want. Land plots and new-build developments are sale-only on Kufar, so a rent-only run against them returns nothing rather than an error.",
            "default": "apartments"
          },
          "dealType": {
            "title": "🤝 For sale or for rent",
            "enum": [
              "sale",
              "rent",
              "any"
            ],
            "type": "string",
            "description": "Sale adverts carry an asking price; rent adverts carry a monthly rent and, where the seller filled it in, the prepayment terms. Both returns the two mixed, with each row labelled.",
            "default": "sale"
          },
          "region": {
            "title": "🗺️ Region",
            "enum": [
              "any",
              "minsk-city",
              "brest",
              "gomel",
              "grodno",
              "mogilev",
              "minsk-region",
              "vitebsk"
            ],
            "type": "string",
            "description": "One of Belarus's six regions or the city of Minsk. Leave it on All of Belarus to sweep the whole country, which this actor can do in one run because Kufar's search has no page ceiling.",
            "default": "any"
          },
          "cities": {
            "title": "🏙️ Cities and districts",
            "uniqueItems": true,
            "type": "array",
            "description": "Narrow the region to specific cities or district towns. Minsk's nine administrative districts are listed here too. Leave it empty to take the whole region. Picking cities from more than one region is fine, and the region field above is then ignored.",
            "items": {
              "type": "string",
              "enum": [
                "26",
                "27",
                "29",
                "28",
                "25",
                "24",
                "23",
                "30",
                "22",
                "37",
                "123",
                "38",
                "1",
                "150",
                "148",
                "48",
                "159",
                "147",
                "49",
                "31",
                "50",
                "51",
                "52",
                "53",
                "2",
                "3",
                "54",
                "55",
                "146",
                "4",
                "56",
                "160",
                "57",
                "161",
                "162",
                "128",
                "58",
                "149",
                "59",
                "5",
                "152",
                "60",
                "32",
                "61",
                "62",
                "6",
                "63",
                "129",
                "163",
                "130",
                "131",
                "7",
                "64",
                "132",
                "164",
                "65",
                "8",
                "66",
                "39",
                "165",
                "166",
                "167",
                "67",
                "68",
                "69",
                "133",
                "168",
                "40",
                "134",
                "153",
                "9",
                "33",
                "70",
                "135",
                "71",
                "136",
                "169",
                "10",
                "170",
                "72",
                "73",
                "74",
                "75",
                "171",
                "172",
                "76",
                "77",
                "11",
                "41",
                "78",
                "137",
                "12",
                "79",
                "80",
                "42",
                "138",
                "34",
                "173",
                "81",
                "82",
                "83",
                "84",
                "139",
                "43",
                "140",
                "13",
                "154",
                "85",
                "14",
                "86",
                "141",
                "87",
                "88",
                "89",
                "91",
                "15",
                "158",
                "92",
                "93",
                "174",
                "94",
                "35",
                "182",
                "44",
                "143",
                "175",
                "176",
                "95",
                "96",
                "97",
                "98",
                "99",
                "122",
                "180",
                "142",
                "16",
                "100",
                "101",
                "156",
                "157",
                "145",
                "17",
                "177",
                "102",
                "45",
                "178",
                "103",
                "104",
                "105",
                "144",
                "106",
                "107",
                "125",
                "108",
                "155",
                "109",
                "179",
                "18",
                "151",
                "110",
                "111",
                "112",
                "36",
                "113",
                "181",
                "114",
                "115",
                "116",
                "117",
                "46",
                "19",
                "20",
                "47",
                "118",
                "119",
                "120",
                "126",
                "121",
                "127",
                "124"
              ],
              "enumTitles": [
                "🏙️ Заводской (Zavodskoj) — Minsk",
                "🏙️ Ленинский (Leninskij) — Minsk",
                "🏙️ Московский (Moskovskij) — Minsk",
                "🏙️ Октябрьский (Oktjabrskij Rajon) — Minsk",
                "🏙️ Партизанский (Partizanskij) — Minsk",
                "🏙️ Первомайский (Pervomajskij) — Minsk",
                "🏙️ Советский (Sovetskij) — Minsk",
                "🏙️ Фрунзенский (Frunzenskij) — Minsk",
                "🏙️ Центральный (Centralnyj) — Minsk",
                "📍 Барановичи (Baranovichi) — Brest region",
                "📍 Белоозёрск (Beloozyorsk) — Brest region",
                "📍 Береза (Beryoza) — Brest region",
                "📍 Брест (Brest) — Brest region",
                "📍 Брестский район (Brestskij Rajon) — Brest region",
                "📍 Высокое (Vysokoe) — Brest region",
                "📍 Ганцевичи (Gancevichi) — Brest region",
                "📍 Городище (Posyolok Gorodische) — Brest region",
                "📍 Давид - Городок (David - Gorodok) — Brest region",
                "📍 Дрогичин (Drogichin) — Brest region",
                "📍 Другие города (Other towns) — Brest region",
                "📍 Жабинка (Zhabinka) — Brest region",
                "📍 Иваново (Ivanovo) — Brest region",
                "📍 Ивацевичи (Ivacevichi) — Brest region",
                "📍 Каменец (Kamenec) — Brest region",
                "📍 Кобрин (Kobrin) — Brest region",
                "📍 Лунинец (Luninec) — Brest region",
                "📍 Ляховичи (Ljahovichi) — Brest region",
                "📍 Малорита (Malorita) — Brest region",
                "📍 Микашевичи (Mikashevichi) — Brest region",
                "📍 Пинск (Pinsk) — Brest region",
                "📍 Пружаны (Pruzhany) — Brest region",
                "📍 Ружаны (Ruzhany) — Brest region",
                "📍 Столин (Stolin) — Brest region",
                "📍 Телеханы (Gorodskoj Posyolok Telehany) — Brest region",
                "📍 Большевик (Rabochij Posyolok Bolshevik) — Gomel region",
                "📍 Брагин (Gorodskoj Posyolok Bragin) — Gomel region",
                "📍 Буда-Кошелево (Buda-Koshelevo) — Gomel region",
                "📍 Василевичи (Vasilevichi) — Gomel region",
                "📍 Ветка (Vetka) — Gomel region",
                "📍 Гомель (Gomel) — Gomel region",
                "📍 Гомельский район (Gomelskij Rajon) — Gomel region",
                "📍 Добруш (Dobrush) — Gomel region",
                "📍 Другие города (Other towns) — Gomel region",
                "📍 Ельск (Elsk) — Gomel region",
                "📍 Житковичи (Zhitkovichi) — Gomel region",
                "📍 Жлобин (Zhlobin) — Gomel region",
                "📍 Калинковичи (Kalinkovichi) — Gomel region",
                "📍 Корма (Gorodskoj Posyolok Korma) — Gomel region",
                "📍 Костюковка (Derevnja Kostjukovka) — Gomel region",
                "📍 Лельчицы (Gorodskoj Posyolok Lelchicy) — Gomel region",
                "📍 Лоев (Gorodskoj Posyolok Loev) — Gomel region",
                "📍 Мозырь (Mozyr) — Gomel region",
                "📍 Наровля (Narovlja) — Gomel region",
                "📍 Октябрьский (Oktjabrskij Rajon) — Gomel region",
                "📍 Паричи (Gorodskoj Posyolok Parichi) — Gomel region",
                "📍 Петриков (Petrikov) — Gomel region",
                "📍 Речица (Rechica) — Gomel region",
                "📍 Рогачев (Rogachyov) — Gomel region",
                "📍 Светлогорск (Svetlogorsk) — Gomel region",
                "📍 Тереховка (Derevnja Terehovka) — Gomel region",
                "📍 Туров (Turov) — Gomel region",
                "📍 Уваровичи (Gorodskoj Posyolok Uvarovichi) — Gomel region",
                "📍 Хойники (Hojniki) — Gomel region",
                "📍 Чечерск (Chechersk) — Gomel region",
                "📍 Березовка (Beryozovka) — Grodno region",
                "📍 Берестовица (Derevnja Berestovica) — Grodno region",
                "📍 Большая Берестовица (Gorodskoj Posyolok Bolshaja Berestovica) — Grodno region",
                "📍 Волковыск (Volkovysk) — Grodno region",
                "📍 Вороново (Gorodskoj Posyolok Voronovo) — Grodno region",
                "📍 Гродненский район (Grodnenskij Rajon) — Grodno region",
                "📍 Гродно (Grodno) — Grodno region",
                "📍 Другие города (Other towns) — Grodno region",
                "📍 Дятлово (Djatlovo) — Grodno region",
                "📍 Зельва (Gorodskoj Posyolok Zelva) — Grodno region",
                "📍 Ивье (Ive) — Grodno region",
                "📍 Кореличи (Gorodskoj Posyolok Korelichi) — Grodno region",
                "📍 Красносельский (Gorodskoj Posyolok Krasnoselskij) — Grodno region",
                "📍 Лида (Lida) — Grodno region",
                "📍 Мир (Gorodskoj Posyolok Mir) — Grodno region",
                "📍 Мосты (Mosty) — Grodno region",
                "📍 Новогрудок (Novogrudok) — Grodno region",
                "📍 Островец (Ostrovec) — Grodno region",
                "📍 Ошмяны (Oshmjany) — Grodno region",
                "📍 Радунь (Derevnja Radun) — Grodno region",
                "📍 Россь (Gorodskoj Posyolok Ross) — Grodno region",
                "📍 Свислочь (Svisloch) — Grodno region",
                "📍 Скидель (Skidel) — Grodno region",
                "📍 Слоним (Slonim) — Grodno region",
                "📍 Сморгонь (Smorgon) — Grodno region",
                "📍 Щучин (Schuchin) — Grodno region",
                "📍 Белыничи (Belynichi) — Mogilev region",
                "📍 Бобруйск (Bobrujsk) — Mogilev region",
                "📍 Быхов (Byhov) — Mogilev region",
                "📍 Глуск (Gorodskoj Posyolok Glusk) — Mogilev region",
                "📍 Горки (Gorki) — Mogilev region",
                "📍 Дрибин (Gorodskoj Posyolok Dribin) — Mogilev region",
                "📍 Другие города (Other towns) — Mogilev region",
                "📍 Елизово (Rabochij Posyolok Elizovo) — Mogilev region",
                "📍 Кировск (Kirovsk) — Mogilev region",
                "📍 Климовичи (Klimovichi) — Mogilev region",
                "📍 Кличев (Klichev) — Mogilev region",
                "📍 Костюковичи (Kostjukovichi) — Mogilev region",
                "📍 Краснополье (Gorodskoj Posyolok Krasnopole) — Mogilev region",
                "📍 Кричев (Krichev) — Mogilev region",
                "📍 Круглое (Krugloe) — Mogilev region",
                "📍 Могилев (Mogilyov) — Mogilev region",
                "📍 Могилевский район (Mogilyovskij Rajon) — Mogilev region",
                "📍 Мстиславль (Mstislavl) — Mogilev region",
                "📍 Осиповичи (Osipovichi) — Mogilev region",
                "📍 Славгород (Slavgorod) — Mogilev region",
                "📍 Хотимск (Gorodskoj Posyolok Hotimsk) — Mogilev region",
                "📍 Чаусы (Chausy) — Mogilev region",
                "📍 Чериков (Cherikov) — Mogilev region",
                "📍 Шклов (Shklov) — Mogilev region",
                "📍 Березино (Berezino) — Minsk region",
                "📍 Борисов (Borisov) — Minsk region",
                "📍 Боровляны (Derevnja Borovljany) — Minsk region",
                "📍 Вилейка (Vilejka) — Minsk region",
                "📍 Воложин (Volozhin) — Minsk region",
                "📍 Городея (Gorodskoj Posyolok Gorodeja) — Minsk region",
                "📍 Дзержинск (Dzerzhinsk) — Minsk region",
                "📍 Другие города (Other towns) — Minsk region",
                "📍 Ждановичи (Agrogorodok Zhdanovichi) — Minsk region",
                "📍 Жодино (Zhodino) — Minsk region",
                "📍 Заславль (Zaslavl) — Minsk region",
                "📍 Зеленый Бор (Derevnja Zelyonyj Bor) — Minsk region",
                "📍 Ивенец (Gorodskoj Posyolok Ivenec) — Minsk region",
                "📍 Клецк (Kleck) — Minsk region",
                "📍 Копыль (Kopyl) — Minsk region",
                "📍 Крупки (Krupki) — Minsk region",
                "📍 Логойск (Logojsk) — Minsk region",
                "📍 Любань (Ljuban) — Minsk region",
                "📍 Марьина Горка (Marina Gorka) — Minsk region",
                "📍 Мачулищи (Gorodskoj Posyolok Machulischi) — Minsk region",
                "📍 Минский район (Minskij Rajon) — Minsk region",
                "📍 Молодечно (Molodechno) — Minsk region",
                "📍 Мядель (Mjadel) — Minsk region",
                "📍 Несвиж (Nesvizh) — Minsk region",
                "📍 Плещеницы (Gorodskoj Posyolok Pleschenicy) — Minsk region",
                "📍 Радошковичи (Gorodskoj Posyolok Radoshkovichi) — Minsk region",
                "📍 Руденск (Gorodskoj Posyolok Rudensk) — Minsk region",
                "📍 Слуцк (Sluck) — Minsk region",
                "📍 Смиловичи (Gorodskoj Posyolok Smilovichi) — Minsk region",
                "📍 Смолевичи (Smolevichi) — Minsk region",
                "📍 Солигорск (Soligorsk) — Minsk region",
                "📍 Старобин (Gorodskoj Posyolok Starobin) — Minsk region",
                "📍 Старые Дороги (Starye Dorogi) — Minsk region",
                "📍 Столбцы (Stolbcy) — Minsk region",
                "📍 Узда (Uzda) — Minsk region",
                "📍 Фаниполь (Fanipol) — Minsk region",
                "📍 Червень (Cherven) — Minsk region",
                "📍 Барань (Baran) — Vitebsk region",
                "📍 Бешенковичи (Gorodskoj Posyolok Beshenkovichi) — Vitebsk region",
                "📍 Браслав (Braslav) — Vitebsk region",
                "📍 Браславский район (Braslavskij Rajon) — Vitebsk region",
                "📍 Верхнедвинск (Verhnedvinsk) — Vitebsk region",
                "📍 Ветрино (Gorodskoj Posyolok Vetrino) — Vitebsk region",
                "📍 Витебск (Vitebsk) — Vitebsk region",
                "📍 Витебский район (Vitebskij Rajon) — Vitebsk region",
                "📍 Глубокое (Glubokoe) — Vitebsk region",
                "📍 Городок (Gorodok) — Vitebsk region",
                "📍 Докшицы (Dokshicy) — Vitebsk region",
                "📍 Другие города (Other towns) — Vitebsk region",
                "📍 Дубровно (Dubrovno) — Vitebsk region",
                "📍 Коханово (Gorodskoj Posyolok Kohanovo) — Vitebsk region",
                "📍 Лепель (Lepel) — Vitebsk region",
                "📍 Лиозно (Gorodskoj Posyolok Liozno) — Vitebsk region",
                "📍 Миоры (Miory) — Vitebsk region",
                "📍 Новолукомль (Novolukoml) — Vitebsk region",
                "📍 Новополоцк (Novopolock) — Vitebsk region",
                "📍 Орша (Orsha) — Vitebsk region",
                "📍 Полоцк (Polock) — Vitebsk region",
                "📍 Поставы (Postavy) — Vitebsk region",
                "📍 Россоны (Gorodskoj Posyolok Rossony) — Vitebsk region",
                "📍 Сенно (Senno) — Vitebsk region",
                "📍 Толочин (Tolochin) — Vitebsk region",
                "📍 Ушачи (Gorodskoj Posyolok Ushachi) — Vitebsk region",
                "📍 Чашники (Chashniki) — Vitebsk region",
                "📍 Шарковщина (Gorodskoj Posyolok Sharkovschina) — Vitebsk region",
                "📍 Шумилино (Gorodskoj Posyolok Shumilino) — Vitebsk region"
              ]
            },
            "default": []
          },
          "maxResults": {
            "title": "🔢 Max listings",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Stop after this many listings. One call returns up to 200, so the run finishes at the first call that crosses your limit. Kufar's largest property category holds about 27,000 adverts and this actor can drain all of it.",
            "default": 200
          },
          "keyword": {
            "title": "🔎 Keyword",
            "type": "string",
            "description": "Free-text search over advert titles and descriptions, in Russian. Useful for a named development or street ('Минск-Мир', 'Комаровка') that no filter expresses. Leave empty to search the whole category.",
            "default": ""
          },
          "currency": {
            "title": "💱 Price currency",
            "enum": [
              "USD",
              "BYN",
              "EUR"
            ],
            "type": "string",
            "description": "Which currency the price filters below are read in, and which currency the row's main price field carries. Every row also carries the price converted to all four currencies Kufar publishes, so this choice never loses information.",
            "default": "USD"
          },
          "minPrice": {
            "title": "💵 Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest price to include, in the currency selected above. 0 means no lower bound. For rent adverts this is a monthly rent.",
            "default": 0
          },
          "maxPrice": {
            "title": "💰 Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Highest price to include, in the currency selected above. 0 means no upper bound.",
            "default": 0
          },
          "rooms": {
            "title": "🛏️ Rooms",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only adverts with these room counts. Pick several to combine them. 5 means five or more. Leave empty to return every size. Land, garages and commercial adverts rarely carry a room count, so this filter is for apartments, houses and rooms.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "1️⃣ 1 room",
                "2️⃣ 2 rooms",
                "3️⃣ 3 rooms",
                "4️⃣ 4 rooms",
                "5️⃣ 5 rooms or more"
              ]
            },
            "default": []
          },
          "minArea": {
            "title": "📐 Min area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum total floor area in square metres. 0 means no minimum. For land plots use the plot-size filter instead — land is measured in sotkas, not square metres.",
            "default": 0
          },
          "maxArea": {
            "title": "📏 Max area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum total floor area in square metres. 0 means no maximum.",
            "default": 0
          },
          "minPlotSotka": {
            "title": "🌱 Min plot size (sotkas)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum land area in sotkas, the Belarusian unit of 100 m². Applies to land plots and to houses that publish a plot size. 0 means no minimum.",
            "default": 0
          },
          "maxPlotSotka": {
            "title": "🌾 Max plot size (sotkas)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum land area in sotkas. 0 means no maximum.",
            "default": 0
          },
          "minYearBuilt": {
            "title": "📆 Built from",
            "minimum": 0,
            "maximum": 2035,
            "type": "integer",
            "description": "Earliest construction year to include. 0 means no lower bound. Soviet-era stock, which dominates the Belarusian market, mostly dates 1960-1991.",
            "default": 0
          },
          "maxYearBuilt": {
            "title": "🗓️ Built until",
            "minimum": 0,
            "maximum": 2035,
            "type": "integer",
            "description": "Latest construction year to include. 0 means no upper bound. Kufar lists buildings still under construction with a future year.",
            "default": 0
          },
          "condition": {
            "title": "✨ New or resale",
            "enum": [
              "any",
              "new",
              "secondary"
            ],
            "type": "string",
            "description": "Kufar's own new-versus-resale grading, as the seller filled it in. The two split the category exactly, so picking one halves the result set rather than filtering a handful of adverts.",
            "default": "any"
          },
          "sellerType": {
            "title": "👤 Seller",
            "enum": [
              "any",
              "agency",
              "owner"
            ],
            "type": "string",
            "description": "Agency and developer adverts carry a company block with a VAT number, a registered address and the estate-agency licence details. Private-owner adverts carry a first name and a phone the seller published themselves. The two split the category exactly.",
            "default": "any"
          },
          "onlyWithPhoto": {
            "title": "📷 Only adverts with photos",
            "type": "boolean",
            "description": "Skip adverts that have no photograph. Photoless adverts are a small minority on Kufar and are usually stale or placeholder listings.",
            "default": false
          },
          "newBuildingOnly": {
            "title": "🏗️ Only in new buildings",
            "type": "boolean",
            "description": "Keep only apartments the seller marked as being in a newly built block. This is a different question from the new-versus-resale field: a resale flat can sit in a new building.",
            "default": false
          },
          "minskDistricts": {
            "title": "📍 Minsk micro-districts",
            "uniqueItems": true,
            "type": "array",
            "description": "Minsk's named micro-districts — the level a local buyer actually shops at, below the administrative district. Leave empty to take the whole city. Only Minsk adverts carry a micro-district, so this filter empties a search outside the capital.",
            "items": {
              "type": "string",
              "enum": [
                "5",
                "10",
                "15",
                "20",
                "25",
                "30",
                "35",
                "40",
                "45",
                "50",
                "55",
                "65",
                "70",
                "80",
                "90",
                "95",
                "100",
                "105",
                "110",
                "120",
                "125",
                "130",
                "135",
                "140",
                "145",
                "150",
                "160",
                "325",
                "165",
                "170",
                "175",
                "177",
                "180",
                "185",
                "187",
                "200",
                "205",
                "210",
                "215",
                "195"
              ],
              "enumTitles": [
                "📍 Академия наук (Akademiya nauk)",
                "📍 Ангарская (Angarskaya)",
                "📍 Аэродромная (Aerodromnaya)",
                "📍 Боровая (Borovaya)",
                "📍 Боровляны (Derevnja Borovljany)",
                "📍 Брилевичи (Brilevichi)",
                "📍 Верхний город (Verhnij gorod)",
                "📍 Веснянка (Vesnyanka)",
                "📍 Восток (Vostok)",
                "📍 Восточный (Vostochnyj)",
                "📍 Грушевка (Grushevka)",
                "📍 Домбровка (Dombrovka)",
                "📍 Дражня (Drazhnya)",
                "📍 Запад (Zapad)",
                "📍 Заславская (Zaslavskaya)",
                "📍 Зацень (Zacen)",
                "📍 Зеленый луг (Zelenyj lug)",
                "📍 Каменная Горка (Kamennaya Gorka)",
                "📍 Каскад (Kaskad)",
                "📍 Комаровка (Komarovka)",
                "📍 Красный Бор (Krasnyj Bor)",
                "📍 Кунцевщина (Kuncevshchina)",
                "📍 Курасовщина (Kurasovshchina)",
                "📍 Лебяжий (Lebyazhij)",
                "📍 Лошица (Loshica)",
                "📍 Малиновка (Malinovka)",
                "📍 Масюковщина (Masyukovshchina)",
                "📍 Маяк Минска (Mayak Minska)",
                "📍 Медвежино (Medvezhino)",
                "📍 Минск-Мир (Minsk-Mir)",
                "📍 Михалово (Mihalovo)",
                "📍 Новая Боровая (Novaya Borovaya)",
                "📍 Новинки (Novinki)",
                "📍 Озерище (Ozerishche)",
                "📍 Осмоловка (Osmolovka)",
                "📍 Пулихова (Pulihova)",
                "📍 Раковское шоссе (Rakovskoe shosse)",
                "📍 Ржавец (Rzhavec)",
                "📍 Северный поселок (Severnyj poselok)",
                "📍 поселок Радужный (poselok Raduzhnyj)"
              ]
            },
            "default": []
          },
          "metroStations": {
            "title": "🚇 Minsk metro stations",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only adverts the seller attached to one of these Minsk metro stations. About one Minsk advert in seven names a station, so this is a sharp filter rather than a broad one.",
            "items": {
              "type": "string",
              "enum": [
                "2",
                "3",
                "36",
                "4",
                "5",
                "6",
                "7",
                "8",
                "32",
                "9",
                "10",
                "11",
                "12",
                "13",
                "14",
                "15",
                "35",
                "16",
                "17",
                "18",
                "19",
                "20",
                "21",
                "22",
                "33",
                "23",
                "24",
                "25",
                "34",
                "26",
                "27",
                "28",
                "29"
              ],
              "enumTitles": [
                "🚇 Автозаводская (Avtozavodskaya)",
                "🚇 Академия наук (Akademiya nauk)",
                "🚇 Аэродромная (Aerodromnaya)",
                "🚇 Борисовский тракт (Borisovskij trakt)",
                "🚇 Восток (Vostok)",
                "🚇 Грушевка (Grushevka)",
                "🚇 Институт культуры (Institut kultury)",
                "🚇 Каменная горка (Kamennaya gorka)",
                "🚇 Ковальская Слобода (Kovalskaya Sloboda)",
                "🚇 Кунцевщина (Kuncevshchina)",
                "🚇 Малиновка (Malinovka)",
                "🚇 Михалово (Mihalovo)",
                "🚇 Могилевская (Mogilevskaya)",
                "🚇 Молодежная (Molodezhnaya)",
                "🚇 Московская (Moskovskaya)",
                "🚇 Немига (Nemiga)",
                "🚇 Неморшанский сад (Nemorshanskij sad)",
                "🚇 Октябрьская (Купаловская) (Oktyabrskaya (Kupalovskaya))",
                "🚇 Парк Челюскинцев (Park Chelyuskincev)",
                "🚇 Партизанская (Partizanskaya)",
                "🚇 Первомайская (Pervomajskaya)",
                "🚇 Петровщина (Petrovshchina)",
                "🚇 Площадь Ленина (Вокзальная) (Ploshchad Lenina (Vokzalnaya))",
                "🚇 Площадь Победы (Ploshchad Pobedy)",
                "🚇 Площадь Франтишка Богушевича (Ploshchad Frantishka Bogushevicha)",
                "🚇 Площадь Якуба Коласа (Ploshchad Yakuba Kolasa)",
                "🚇 Пролетарская (Proletarskaya)",
                "🚇 Пушкинская (Pushkinskaya)",
                "🚇 Слуцкий гостинец (Sluckij gostinec)",
                "🚇 Спортивная (Sportivnaya)",
                "🚇 Тракторный завод (Traktornyj zavod)",
                "🚇 Уручье (Uruche)",
                "🚇 Фрунзенская (Юбилейная площадь) (Frunzenskaya (Yubilejnaya ploshchad))"
              ]
            },
            "default": []
          },
          "sort": {
            "title": "↕️ Sort by",
            "enum": [
              "newest",
              "oldest",
              "cheapest",
              "most-expensive"
            ],
            "type": "string",
            "description": "Newest first is what you want when you run this on a schedule and only care about what appeared since the last run.",
            "default": "newest"
          },
          "includeDetails": {
            "title": "📄 Add full details",
            "type": "boolean",
            "description": "Open each advert's own page for the complete seller description. The search returns only its first 150 characters, and on Kufar the terms, the viewing arrangements and the agent's own notes usually sit past that cut. It also adds the seller's feedback score and the video and 3D-tour flags. Costs one extra request per advert, billed as a Property Detail event on top of the listing row.",
            "default": false
          },
          "searchUrls": {
            "title": "🌐 Search URLs",
            "type": "array",
            "description": "Paste re.kufar.by search addresses instead of filling the fields above. Build the search on the site, copy the address bar, and the category, deal type, location and every filter in it are read straight off the URL — including facets this form does not expose.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "listingUrls": {
            "title": "🏠 Listing URLs",
            "type": "array",
            "description": "Used by the Property Detail operation: Kufar advert addresses to expand, e.g. https://re.kufar.by/vi/1084903128. A bare advert ID such as 1084903128 works too.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}