{
  "openapi": "3.0.1",
  "info": {
    "title": "Zonaprop Scraper — Avisos Inmobiliarios de Argentina",
    "description": "Extrae avisos inmobiliarios de Zonaprop (Argentina) con precio normalizado, superficie, ambientes, ubicacion y datos de contacto. Filtra por barrio, operacion y rango de precio.",
    "version": "0.1",
    "x-build-id": "XnXNXVINxjWFn0oVS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/juanoox~zonaprop-ar/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-juanoox-zonaprop-ar",
        "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/juanoox~zonaprop-ar/runs": {
      "post": {
        "operationId": "runs-sync-juanoox-zonaprop-ar",
        "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/juanoox~zonaprop-ar/run-sync": {
      "post": {
        "operationId": "run-sync-juanoox-zonaprop-ar",
        "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": {
          "startUrls": {
            "title": "URLs de listado",
            "type": "array",
            "description": "Pegá URLs de resultados ya filtradas en Zonaprop Scraper — Avisos Inmobiliarios de Argentina. Si cargás esto, se ignoran los filtros de abajo. Es la opción más precisa: filtrás en el sitio y el Actor copia exactamente ese resultado. Viene precargada una búsqueda de ejemplo: reemplazala por la tuya.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchQuery": {
            "title": "Término de búsqueda",
            "type": "string",
            "description": "Texto libre, ej. \"monoambiente con balcón\". Se combina con el resto de los filtros."
          },
          "locations": {
            "title": "Ubicaciones",
            "type": "array",
            "description": "Barrio, ciudad o provincia. Se genera una búsqueda por cada una.",
            "items": {
              "type": "string"
            }
          },
          "operation": {
            "title": "Operación",
            "enum": [
              "any",
              "sale",
              "rent",
              "temporary_rent"
            ],
            "type": "string",
            "description": "Tipo de operación a buscar.",
            "default": "any"
          },
          "propertyTypes": {
            "title": "Tipos de propiedad",
            "type": "array",
            "description": "Dejalo vacío para incluir todos.",
            "items": {
              "type": "string"
            }
          },
          "priceMin": {
            "title": "Precio mínimo",
            "minimum": 0,
            "type": "integer",
            "description": "En la moneda que muestra el portal. Vacío = sin mínimo."
          },
          "priceMax": {
            "title": "Precio máximo",
            "minimum": 0,
            "type": "integer",
            "description": "En la moneda que muestra el portal. Vacío = sin máximo."
          },
          "priceCurrency": {
            "title": "Moneda del precio",
            "enum": [
              "usd",
              "ars"
            ],
            "type": "string",
            "description": "Moneda en la que se interpretan el precio mínimo y máximo. Zonaprop publica ventas en dólares y alquileres en pesos.",
            "default": "usd"
          },
          "minRooms": {
            "title": "Ambientes mínimos",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Filtra por cantidad mínima de ambientes. Vacío = sin filtro."
          },
          "sortBy": {
            "title": "Ordenar por",
            "enum": [
              "relevance",
              "newest",
              "price_asc",
              "price_desc"
            ],
            "type": "string",
            "description": "Ordenar por \"Más nuevos\" es lo mejor para monitoreo diario: los avisos nuevos quedan primero.",
            "default": "relevance"
          },
          "maxItems": {
            "title": "Máximo de resultados",
            "minimum": 0,
            "maximum": 500000,
            "type": "integer",
            "description": "Corta el run al llegar a este número. 0 = sin tope. Es el control directo de cuánto gastás.",
            "default": 100
          },
          "maxPagesPerUrl": {
            "title": "Máximo de páginas por URL",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cuántas páginas de listado seguir por cada URL de arranque.",
            "default": 20
          },
          "scrapeDetails": {
            "title": "Entrar a cada aviso",
            "type": "boolean",
            "description": "Visita la página de cada aviso para traer el contacto de la inmobiliaria (nombre, teléfono y perfil), la dirección exacta y todas las fotos. Cuesta un request extra por aviso y se cobra un recargo por resultado.",
            "default": false
          },
          "includeSeen": {
            "title": "Incluir avisos ya vistos",
            "type": "boolean",
            "description": "Desactivalo para monitoreo: el Actor recuerda los avisos de runs anteriores y sólo devuelve los nuevos. Requiere reusar el mismo almacenamiento entre runs (usá un Schedule).",
            "default": true
          },
          "proxyTier": {
            "title": "Nivel de proxy inicial",
            "enum": [
              "none",
              "datacenter",
              "residential"
            ],
            "type": "string",
            "description": "Arrancá en datacenter. El Actor escala solo a residencial si detecta bloqueos, así no pagás ancho de banda residencial de más.",
            "default": "datacenter"
          },
          "maxProxyTier": {
            "title": "Techo de proxy",
            "enum": [
              "datacenter",
              "residential"
            ],
            "type": "string",
            "description": "Poné \"Datacenter\" para garantizar que el run nunca consuma ancho de banda residencial.",
            "default": "residential"
          },
          "maxConcurrency": {
            "title": "Concurrencia máxima",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Requests en paralelo. Bajalo si el portal te bloquea.",
            "default": 10
          },
          "maxRequestRetries": {
            "title": "Reintentos por request",
            "minimum": 0,
            "maximum": 15,
            "type": "integer",
            "description": "Cuántas veces reintentar una petición bloqueada. Cada reintento usa una IP de proxy distinta, así que un número más alto es lo que convierte un run bloqueado en uno exitoso.",
            "default": 8
          },
          "maxRequestsPerMinute": {
            "title": "Máximo de requests por minuto",
            "minimum": 1,
            "maximum": 600,
            "type": "integer",
            "description": "Limita el caudal del crawl. Zonaprop reacciona al ritmo de las peticiones, así que bajar esto suele ser más efectivo que cambiar de proxy.",
            "default": 60
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}