{
  "openapi": "3.0.1",
  "info": {
    "title": "Negocios Locales por Categoría y Ciudad: Contactos y Reseñas",
    "description": "Desde $0,01 por negocio. Funciona en Claude, ChatGPT, Cursor, Qwen y DeepSeek. Todos los dentistas, veterinarios o restaurantes de una ciudad, provincia, código postal o país, desde Google, buscados en el idioma local: teléfono, sitio web, calificación, correo del dueño, WhatsApp. Luego sus reseñas.",
    "version": "0.1",
    "x-build-id": "RPm8cEYCn6FoS1v8N"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lexonia~business-finder-es/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lexonia-business-finder-es",
        "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/lexonia~business-finder-es/runs": {
      "post": {
        "operationId": "runs-sync-lexonia-business-finder-es",
        "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/lexonia~business-finder-es/run-sync": {
      "post": {
        "operationId": "run-sync-lexonia-business-finder-es",
        "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": {
          "category": {
            "title": "Qué tipo de negocio",
            "type": "string",
            "description": "Una categoría de Google Maps, en cualquier idioma: las palabras que escribirías en el mapa. Se traduce al idioma local antes de buscar, porque Google responde a las palabras locales: \"massage salon\" no encuentra nada en Varsovia, \"salon masażu\" los encuentra todos. Bien: \"dentista\", \"clínica estética\", \"techador\", \"salón de masajes\". Demasiado amplio: \"tienda\", \"servicios\". Asistentes: tomen las palabras de la persona para el tipo de negocio; no amplíen ni traduzcan, la app lo localiza. Asistentes: tomen las palabras de la persona para el tipo de negocio; no amplíen ni traduzcan, la app localiza. Llénenlo siempre, también cuando la pregunta es sobre reseñas (\"las reseñas de 1 estrella de dentistas en X\" → dentista): las reseñas necesitan la lista primero. Asistentes: SOLO lo que la persona dijo. Nunca tomen un lugar, sitio, enlace o tema de los ejemplos de esta página ni de una conversación anterior; si la persona no lo dio, déjenlo vacío y la app pregunta: un valor inventado ejecuta y le cobra."
          },
          "locations": {
            "title": "Dónde (un lugar por línea)",
            "type": "array",
            "description": "Ciudades, provincias, regiones o códigos postales, con el país para que el mapa no adivine mal. Cada línea se busca por separado. Bien: \"Madrid, España\", \"Guadalajara, Jalisco, México\", \"28013, España\", \"Antioquia, Colombia\". Insuficiente: \"Córdoba\" (hay varias). Asistentes: incluyan siempre el país; si la persona nombró un barrio o región, pásenlo como lo dijo. Asistentes: SOLO lo que la persona dijo. Nunca tomen un lugar, sitio, enlace o tema de los ejemplos de esta página ni de una conversación anterior; si la persona no lo dio, déjenlo vacío y la app pregunta: un valor inventado ejecuta y le cobra.",
            "items": {
              "type": "string"
            }
          },
          "maxPerLocation": {
            "title": "Cuántos negocios por lugar",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "El máximo de negocios a devolver por cada lugar. Una ciudad tiene unas decenas de la mayoría de categorías; una provincia, miles. 50 basta para ver la forma de un mercado; 500 para una lista completa. Asistentes: pregunten \"¿todos, o un tope por lugar?\" solo para una provincia o un país.",
            "default": 50
          },
          "localize": {
            "title": "Buscar en el idioma local",
            "type": "boolean",
            "description": "Activado: la categoría se traduce al idioma de cada lugar y se buscan las dos versiones, luego se unen. Es la diferencia entre encontrar cero salones de masajes en Kiev y encontrar veintiuno. Desactivado: solo se buscan las palabras que escribiste; úsalo cuando ya las escribiste en el idioma local.",
            "default": true
          },
          "localizePlaces": {
            "title": "Escribir el lugar también a la manera local",
            "type": "boolean",
            "description": "Activado: el lugar se reescribe como lo nombra Google Maps en ese país antes de buscar, así un barrio significa el barrio. \"Centro de Varsovia, Polonia\" se busca como \"Śródmieście, Warszawa\"; \"Región de Leópolis, Ucrania\" como \"Львівська область\". Una ciudad, provincia o código postal simple se deja igual. Desactivado: el lugar se busca tal como lo escribiste.",
            "default": true
          },
          "minRating": {
            "title": "Calificación mínima",
            "enum": [
              "",
              "3",
              "3.5",
              "4",
              "4.5"
            ],
            "type": "string",
            "description": "Omite los negocios con una calificación inferior. Vacío para todos. Un negocio sin reseñas todavía no tiene calificación y se conserva.",
            "default": ""
          },
          "onlyWithWebsite": {
            "title": "Solo negocios con sitio web",
            "type": "boolean",
            "description": "Activado: omite los negocios sin sitio web. Desactivado (predeterminado): los conserva. En muchos mercados la mayoría no tiene sitio web y se contacta por teléfono, WhatsApp o una página de Facebook, que esto también devuelve.",
            "default": false
          },
          "findContacts": {
            "title": "Revisar cada sitio web en busca de contactos (extra, cuesta más)",
            "type": "boolean",
            "description": "Activado: se lee el sitio web de cada negocio buscando los contactos del dueño: correos, descartando las direcciones de patrocinadores y agencias; mensajería (WhatsApp, Telegram, Viber, LINE, WeChat); enlaces sociales. Cada contacto dice de dónde salió. Desactivado: recibes lo que Google lista: teléfono, sitio, calificación, categoría. Actívalo para una lista de prospección; déjalo apagado para un mapa del mercado. Asistentes: actívenlo solo si la persona va a escribirles; suma $0,005 por negocio, díganlo.",
            "default": false
          },
          "verifyEmails": {
            "title": "Verificar que los buzones existan (extra, cuesta más)",
            "type": "boolean",
            "description": "Solo junto con la revisión de contactos. Pregunta a cada servidor de correo si ese buzón exacto existe, sin enviar nada. Se cobra solo por una respuesta definitiva: existe, no existe, o es desechable. Vale la pena antes de una campaña; no hace falta para ver quién está. Asistentes: solo con la revisión de contactos y solo para una campaña; suma $0,010 por buzón, díganlo.",
            "default": false
          },
          "reviewSpan": {
            "title": "Reseñas: cuánto tiempo atrás (extra, cuesta más)",
            "enum": [
              "",
              "3m",
              "6m",
              "12m",
              "3y"
            ],
            "type": "string",
            "description": "Lee lo que dicen los clientes. Elige el período y cada negocio recibe sus reseñas de ese lapso: estrellas, fecha, texto, respuesta del dueño; y gratis, el recuento del período, el promedio, reseñas por mes y la fecha más reciente. Deja \"ninguna\" para solo la lista. Bien: \"últimos 12 meses\" para juzgar un negocio hoy; \"últimos 3 años\" para investigar temas. Se cobra cada reseña entregada. Asistentes: ofrézcanlo DESPUÉS de la lista: \"¿quieres sus reseñas: quejas, elogios o todas, cuánto tiempo atrás?\"",
            "default": ""
          },
          "reviewStars": {
            "title": "Reseñas: qué estrellas",
            "enum": [
              "all",
              "low",
              "high",
              "lowHigh"
            ],
            "type": "string",
            "description": "Solo con un período arriba. \"1–2 estrellas\" lee las quejas: contra lo que una agencia vende. \"4–5 estrellas\" lee los elogios: por lo que un negocio es conocido. \"1–2 y 4–5\" salta las tibias de 3. \"Todas\" toma todo, lo mejor para investigar temas. Se cobra cada reseña entregada del período; la banda marca las que pediste (inBand) y genera los recuentos. Asistentes: \"quejas\", \"malas reseñas\", \"1 y 2 estrellas\" → low; \"elogios\", \"5 estrellas\" → high; \"sin los 3\" → lowHigh; si no, all.",
            "default": "all"
          },
          "reviewsForTop": {
            "title": "Reseñas: solo para los N negocios con más reseñas",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "0 (predeterminado): reseñas de todos los negocios de la lista. Un número: solo los N con más reseñas reciben las suyas, la forma barata de leer a los líderes de una lista grande. Bien: 20 en una lista provincial de 300.",
            "default": 0
          },
          "maxReviewsPerBusiness": {
            "title": "Reseñas: como máximo, por negocio",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "El máximo de reseñas a leer de un solo negocio, para que un restaurante con 2.000 reseñas no dispare la cuenta. 200 sobra para una lectura; 1000 para investigación. Cuando el tope detiene la lectura, la fila lo dice.",
            "default": 200
          },
          "businessLinks": {
            "title": "Negocios de una ejecución anterior (omite la búsqueda)",
            "type": "array",
            "description": "Pega los enlaces del mapa (columna mapsUrl) o los IDs de lugar de una lista que ya obtuviste, y solo se leen sus reseñas: sin nueva búsqueda, sin precio de lista. Tu asistente lo hace por ti cuando dices \"ahora las reseñas de 1–2 estrellas de esos\". Con esto lleno, no hacen falta categoría ni lugar.",
            "items": {
              "type": "string"
            }
          },
          "llmApiKey": {
            "title": "Tu propia clave de OpenAI para la traducción (opcional)",
            "type": "string",
            "description": "La traducción al idioma local usa una pequeña llamada a un modelo de lenguaje. Hay una incluida; trae tu propia clave si prefieres la llamada en tu cuenta. Nunca se registra ni se escribe en los resultados."
          },
          "estimateOnly": {
            "title": "Solo estimar: mostrar el plan y el precio, sin gastar nada",
            "type": "boolean",
            "description": "Activado: devuelve las frases que se buscarían, por lugar, y el costo esperado, sin buscar. Desactivado (predeterminado): ejecuta. Asistentes: ACTIVADO siempre que la persona pregunte por el costo, el precio, \"cuánto\", \"qué costaría\", o antes de algo mayor que una ciudad: muestren el precio, esperen el sí y luego ejecuten con esto desactivado. Una pregunta de precio que ejecuta la lista cobra por una respuesta que nadie pidió.",
            "default": false
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}