{
  "openapi": "3.0.1",
  "info": {
    "title": "4zida.rs Scraper - Serbia Property Listings & Prices",
    "description": "Scrape 4zida.rs: sale and rental listings across Serbia with price, area, rooms, floor, year built, agency and phone. Serbian-language property data from the country's #1 portal.",
    "version": "1.0",
    "x-build-id": "lAZc1ibnnVxeKim2x"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~4zida-property-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-4zida-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~4zida-property-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-4zida-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~4zida-property-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-4zida-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 walks 4zida.rs's own listing pages for any place the portal indexes (apartments, houses, offices, lots or garages, sale or rental) and returns 20-26 listings per page with price, area, rooms, floor, heating, registration, agency and the publish date. Property Detail takes 4zida listing URLs and returns the full advert: seller's description, complete photo set, coordinates, year built, deposit and the agency's phone number.",
            "default": "search"
          },
          "locations": {
            "title": "📍 Places in Serbia",
            "type": "array",
            "description": "Where to search, one place per line. Serbia's cities and towns resolve by name in Serbian Latin (Beograd, Novi Sad, Niš, Kragujevac, Subotica) or by the exact 4zida place address in the URL (beograd, novi-sad). Leave empty to read all of Serbia. For a city micro-location the form cannot name (a blok, a street, a gradska lokacija), paste the 4zida search address into Search URLs instead.",
            "default": [
              "beograd"
            ],
            "items": {
              "type": "string"
            }
          },
          "dealType": {
            "title": "🏷️ Sale or rental",
            "enum": [
              "prodaja",
              "izdavanje"
            ],
            "type": "string",
            "description": "For-sale listings (prodaja) or rentals (izdavanje). Rental prices come back in euros per month exactly as 4zida publishes them.",
            "default": "prodaja"
          },
          "unitTypes": {
            "title": "🏠 Property types",
            "uniqueItems": true,
            "type": "array",
            "description": "Which kinds of property to read. Leave empty to take apartments only, 4zida's default surface. The values are 4zida's own property-type paths, so the list is exactly what the site offers: apartments, houses, commercial premises, lots and garages/parking. One place combined with several types runs one search per type, the way a site visitor would open them one by one.",
            "items": {
              "type": "string",
              "enum": [
                "stanovi",
                "kuca",
                "poslovni-prostora",
                "placeva",
                "garaza-i-parkinga"
              ],
              "enumTitles": [
                "🏢 Stanovi — apartments",
                "🏡 Kuće — houses",
                "🏬 Poslovni prostori — commercial premises",
                "🌳 Placevi — lots & land",
                "🚗 Garaže i parking — garages & parking"
              ]
            },
            "default": []
          },
          "sellerType": {
            "title": "🤝 Seller type",
            "enum": [
              "",
              "vlasnik",
              "agencija",
              "firma",
              "investitor"
            ],
            "type": "string",
            "description": "Keep only listings advertised by one kind of seller, one of the same four categories 4zida's own seller filter offers. Empty means everyone. Every row also carries the seller type it came from, so you can split the export later instead of re-running.",
            "default": ""
          },
          "maxResults": {
            "title": "🔢 Max results",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many results across the whole run, not per place. One page carries 20-26 results, so a run ends on the first page that crosses your limit.",
            "default": 100
          },
          "includeDetails": {
            "title": "📄 Full advert details",
            "type": "boolean",
            "description": "Open each listing's own page as well and fold in what it adds: the seller's description, the complete photo set, coordinates, year built, deposit, price per m² and the agency's phone. One extra request and one extra charge per listing.",
            "default": false
          },
          "minPrice": {
            "title": "💵 Min price (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only results priced at or above this, in euros. 0 means no lower bound. On rentals this is the monthly rent. Applied by 4zida's own price filter, so a narrow band costs you nothing but time.",
            "default": 0
          },
          "maxPrice": {
            "title": "💰 Max price (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only results priced at or below this, in euros. 0 means no upper bound.",
            "default": 0
          },
          "minArea": {
            "title": "📐 Min area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only properties of at least this many square metres. 0 means no minimum.",
            "default": 0
          },
          "maxArea": {
            "title": "📏 Max area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only properties of at most this many square metres. 0 means no maximum.",
            "default": 0
          },
          "searchUrls": {
            "title": "🌐 4zida search URLs",
            "type": "array",
            "description": "Paste 4zida search addresses instead of filling the form, e.g. https://www.4zida.rs/prodaja-stanova/novi-sad or a filtered one like https://www.4zida.rs/izdavanje-stanova/beograd/vlasnik?jeftinije_od=600eur. Build the search on 4zida.rs, copy the address bar, and the place, property type, seller type and filters in it are read straight off the URL. A page number in the address is ignored; the run starts at page one and pages forward on its own.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "listingUrls": {
            "title": "🔗 4zida listing URLs",
            "type": "array",
            "description": "For Property Detail: paste the 4zida advert addresses, e.g. https://www.4zida.rs/prodaja-stanova/novo-naselje-gradske-lokacije-novi-sad/dvoiposoban-stan/6a96b4940e849d4f120358d2. Every URL a Property Search returns works here as-is.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}