Leer la visibilidad
GET https://seerepo.com/api/v1/repos/:repo/found
Devuelve Páginas por fuera como se lee en la app: cada página pública con sus señales (título, descripción, canónica, imagen, tarjeta, noindex, si está en el sitemap, datos estructurados, versiones por idioma, encabezado principal, y qué le dice el robots.txt a Googlebot, OAI-SearchBot y GPTBot), cada una con una etiqueta honesta y el archivo y la línea que la prueban. Las etiquetas no prometen indexación ni tráfico: BLOCK (algo impide que un buscador la liste), WARN (algo que conviene añadir), UNKNOWN (el código no basta para saberlo), INFO (se dice sin juzgar) y PASS.
Petición
| Parámetro | Dónde | Descripción |
|---|---|---|
repo |
ruta | El id del repo, o owner/name con %2F. |
curl "https://seerepo.com/api/v1/repos/6ad79fd8e89233277ded17c9/found" \
-H "Authorization: Bearer $SEEREPO_KEY"
Respuesta
| Campo | Tipo | Descripción |
|---|---|---|
data.repo |
object | El repo: su id y su nombre. |
data.summary |
object|null | Cuántas páginas públicas hay, cuántas más no se juzgaron porque no se vio su puerta (unseen), cuántas necesitan trabajo (un WARN o un BLOCK), cuántas se leyeron, cuántas están bloqueadas, las que abre su enlace y las privadas según quién entra. Y findable, el aro de Visibilidad en la app: de las públicas que quieren salir en Google, cuántas se pueden encontrar (n) de cuántas (of), y cuántas escondiste a propósito (hidden), que no cuentan; null si ninguna quiere salir. Null hasta que un escaneo las lea. |
data.site |
object | Los archivos para máquinas de cada app: de dónde sale robots, los sitemaps que anuncia, sus sitemaps y su llms.txt. |
data.pages[] |
object | Cada página pública: su ruta de archivo, su dirección, su nombre, quién entra, y sus signals[], cada una con su key, status, label, proof (su ruta, su línea y su url en GitHub en el commit escaneado) y, cuando lo hay, su value fijo y su why. |
data.withLink[] |
object | Las páginas que abre lo que trae su enlace, aparte: no deberían estar en el buscador. |
data.live |
object|null | Lo que contestó el sitio publicado el último día del proyecto en que se le preguntó (una vez al día, solo si el repo tiene sitio web o página en GitHub): el día, dónde se preguntó, cuántas páginas públicas se midieron, cuántas están bloqueadas y cuántas quedaron incompletas, y el robots.txt y el sitemap del sitio; o por qué no se preguntó nada (no-address, free, demo). Cada página trae entonces live (dónde se pidió y cómo contestó la página entera, o por qué no se pidió; redirected cuando el sitio la mandó a otra página, y entonces sus señales no se cruzan), y cada señal con su par en el sitio trae live (el estado del auditor, lo que dice y su evidencia) y agrees (si el código y el sitio dicen lo mismo, cuando los dos pudieron decirlo). Null hasta el primer día, y en el vistazo gratis. |
data.search |
object|null | Lo que dice Google Search Console, cuando el proyecto está conectado (null si no, y en un repo gratis): la ventana (from, to), sus clicks, impressions y pages, y cuántas páginas se inspeccionaron, cuántas están indexadas y cuántas no; o por qué no se leyó (reason). Cada página trae entonces su search: sus clics, impresiones, CTR, posición y, una vez inspeccionada, el veredicto de Google sobre su índice. |
data.rules |
object | La versión de las reglas con que juzgó su último escaneo, la vigente y cada cambio con su fecha: una cifra que se mueve porque cambió una regla lo dice. |
data.visits |
object|null | Lo que DataFast cuenta en el sitio en sus últimos 30 días, cuando el proyecto está conectado y ya se leyó (null si no): la ventana (from, to), el total, cada día en series[] (d, n), cada pantalla que no es una página pública en screens[] (path, n) y las direcciones que no son ninguna pantalla del código en other[] (route, n). Una visita es una persona en una pantalla en un día. Cada página de data.pages[] trae entonces la suya en visits.n. |
data.reads |
object | Si las visitas se leyeron: visits es read, unread (conectado y sin leer todavía) o na (sin conectar). |
data.locked |
boolean | Un repo del vistazo gratis: solo cuántas páginas públicas hay y cuántas necesitan trabajo, como en la app. |
Ejemplo
{
"status": "success",
"data": {
"repo": { "id": "6ad79fd8e89233277ded17c9", "name": "shop" },
"summary": { "public": 12, "unseen": 0, "needWork": 4, "checked": 12, "blocked": 1, "withLink": 1, "private": { "signed-in": 8, "member": 0, "owner": 1 }, "findable": { "n": 10, "of": 11, "hidden": 1 } },
"site": [{ "app": "app", "robots": { "path": "app/robots.ts", "computed": false }, "announced": [{ "url": "https://shop.example/sitemap.xml", "line": 8 }], "sitemaps": ["app/sitemap.ts"], "llms": null }],
"pages": [
{
"path": "app/checkout/page.tsx",
"route": "/checkout",
"name": "Pay",
"who": "anyone",
"read": true,
"signals": [{ "key": "title", "status": "ok", "label": "PASS", "proof": { "path": "app/checkout/page.tsx", "line": 3 }, "value": "Pay | Shop", "by": "rule" }]
}
],
"withLink": [],
"live": { "d": "2026-10-21", "at": "2026-10-21T15:00:00.000Z", "origin": "https://shop.example", "from": "website", "pages": 12, "measured": 12, "blocked": 0, "incomplete": 1, "site": [] },
"rules": { "version": 1, "current": 1, "changes": [{ "folder": "found", "version": 1, "d": "2026-10-21", "id": "found-1", "what": "Each public page's search signals read from the code, labeled as foundvia-discovery labels them" }] },
"locked": false,
"visits": null,
"reads": { "visits": "na" }
}
}
Autenticación
Una clave de la API como Authorization: Bearer sr_…. Mira Autenticación.
Errores
Los que tiene todo endpoint (401, 404, 429), mira Errores.