Esta guía cubre los accesos del hackathon en tres bloques: Base (lo que usa todo el mundo), SEO y Revenue. No hace falta configurar todo: seguí la Base, y después solo lo que necesite tu track. Cada bloque dice qué es, cómo se conecta y cómo validar que funciona.
Las credenciales reales (tokens, keys, secrets, service accounts) no están en este documento — viven en Passbolt. Acá tenés el cómo; los valores los copiás de ahí. Nunca las pegues en repos, issues ni canales abiertos, y nunca las commitees (van en .env, que está gitignoreado).
GitHub, Claude y MCP
Las tres piezas que usa todo el equipo, sin importar el track. Sin esto no arrancás.
Cuenta en la org requerido
Qué es: el repo del hackathon vive en la organización FARO-DataLab en GitHub. Ahí están las ideas, los prototipos y el board. GitHub Desktop es la app con botones para clonar/commit/push sin terminal (ideal si no sos dev).
Cómo se conecta:
- Creá (o usá) tu cuenta de GitHub y avisá tu usuario para que te sumen a
FARO-DataLab/gkt-hackaton-julio-2026. - Instalá GitHub Desktop, iniciá sesión y File → Clone repository → elegí el repo.
- Alternativa por terminal:
gh auth loginy despuésgh repo clone FARO-DataLab/gkt-hackaton-julio-2026.
En GitHub Desktop, el repo aparece en la lista y ves el historial de commits. Por terminal: gh auth status dice Logged in y gh repo view FARO-DataLab/gkt-hackaton-julio-2026 devuelve el README sin error 404.
El agente y la app requerido
Qué es: Claude Desktop es la app para charlar y conectar MCPs; Claude Code es el agente que corre en la terminal y construye. Con tu cuenta de Growketing.
Cómo se conecta:
# Claude Desktop: descargar de claude.ai/download (Mac/Windows) e iniciar sesión
# Claude Code (CLI) — necesita Node.js
npm install -g @anthropic-ai/claude-code
cd gkt-hackaton-julio-2026
claude # la 1ª vez abre el navegador para loguearte
claude --version imprime una versión; al correr claude entrás a la sesión sin pedir login de nuevo. En Desktop, Settings muestra tu cuenta de Growketing activa. Guía oficial: docs.claude.com/claude-code.
Enchufarle herramientas al agente requerido
Qué es: un MCP es la forma estándar de darle herramientas y datos al agente (un "USB universal"). El más usado acá es el MCP del Data Platform (campañas, métricas, clientes sin tocar SQL); también hay MCPs oficiales de terceros.
Cómo se conecta — Claude Desktop (Settings → Developer → Edit Config, dentro de mcpServers):
{
"mcpServers": {
"data-platform": {
"url": "https://mcp.data-platform.growketing.io/mcp",
"headers": { "Authorization": "Bearer <passbolt>" }
}
}
}
Cómo se conecta — Claude Code:
claude mcp add --transport http data-platform https://mcp.data-platform.growketing.io/mcp \
--header "Authorization: Bearer <passbolt>"
claude mcp list # lista los servers configurados y su estado
claude mcp list muestra el server como conectado (reiniciá Claude después de editar la config). Prueba de fuego: pedile a Claude "listá los clientes del data platform" y tiene que devolver la lista.
El stack de datos SEO
Search Console, analítica, backlinks, performance y catálogo. Todo de lectura. Algunos accesos están en proceso — abajo aclaro el estado real de cada uno.
ADC con analytics@ listo
Qué es: GSC da queries, páginas, impresiones, clics, CTR y posición del orgánico; GA4 da tráfico, usuarios y conversiones. Se acceden con ADC (Application Default Credentials) usando la service account analytics@, que ya tiene acceso de lectura a las propiedades.
Cómo se conecta: lo más simple es a través del MCP del Data Platform (paso 03), que ya expone GSC y GA4. Para acceso directo por API, bajás el JSON de la SA analytics@ de Passbolt y apuntás GOOGLE_APPLICATION_CREDENTIALS a ese archivo:
# opción A — usuario (abre el navegador, tu cuenta @growketing.com)
gcloud auth application-default login
# opción B — service account analytics@ (JSON de Passbolt)
export GOOGLE_APPLICATION_CREDENTIALS=secrets/analytics-sa.json
Vía MCP: "traé las top 10 queries de GSC del cliente X en los últimos 28 días" devuelve datos. Por API: la Search Console API sites.list lista los sitios verificados, y la GA4 Data API runReport devuelve sessions sin error 403 de permisos.
Performance y Core Web Vitals listo
Qué es: PageSpeed Insights corre un Lighthouse de una URL (performance de laboratorio + oportunidades). CrUX (Chrome UX Report) da los Core Web Vitals reales de usuarios (campo). Ambas son APIs de Google con una API key.
Cómo se conecta: copiás la API key de Passbolt y la pasás como query param. Son endpoints públicos, sin OAuth.
# PageSpeed Insights — Lighthouse de una URL
curl "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://ejemplo.com&strategy=mobile&key=$PSI_KEY"
# CrUX — Core Web Vitals de campo
curl -X POST "https://chromeuxreport.googleapis.com/v1/records:queryRecord?key=$CRUX_KEY" \
-H "Content-Type: application/json" -d '{"url":"https://ejemplo.com"}'
PageSpeed devuelve un JSON con lighthouseResult.categories.performance.score. CrUX devuelve record.metrics con largest_contentful_paint cumulative_layout_shift. Si la key falla, la respuesta trae error.status: "INVALID_ARGUMENT" o 403.
Backlinks y keywords listo
Qué es: la fuente de backlinks, dominios de referencia, keywords orgánicas y análisis de competidores. Clave para el link gap del track SEO. Se accede con la Ahrefs API v3 (Bearer token).
Cómo se conecta: token de Passbolt en el header Authorization.
curl "https://api.ahrefs.com/v3/subscription-info/limits-and-usage" \
-H "Authorization: Bearer <passbolt>"
El endpoint limits-and-usage devuelve tu plan y las units disponibles (200). Si el token está mal, es 401. Ojo con no quemar units en pruebas: empezá siempre por ese endpoint barato.
SERPs y datos a escala sin créditos
Qué es: API para datos de SERP, keywords y rankings a escala (útil cuando Ahrefs no alcanza o querés SERP en vivo). Autenticación Basic (login:password).
Estado: la cuenta existe pero todavía no tiene créditos cargados, así que los endpoints de datos en vivo van a devolver saldo insuficiente. La conexión se puede validar igual (endpoint de cuenta), y el saldo queda como pendiente a destrabar antes de usarlo en serio.
curl -u "<login>:<passbolt>" "https://api.dataforseo.com/v3/appendix/user_data"
user_data responde 200 con tu cuenta → las credenciales andan. Mirá money.balance: si está en 0, la conexión es válida pero falta cargar créditos (los endpoints de tareas darán error de fondos). Marcá ese pendiente y no bloquees el prototipo con datos mock mientras tanto.
Catálogo y performance de productos listo
Qué es: catálogo y performance de productos vía la Merchant API (v1). Se usa una service account (archivo JSON) con acceso a un grupo de cuentas habilitadas.
Cómo se conecta: bajá el JSON de la SA de Passbolt a secrets/; con eso genera el token solo (scope content).
from google.oauth2 import service_account
import google.auth.transport.requests as gtr
SCOPE = "https://www.googleapis.com/auth/content"
creds = service_account.Credentials.from_service_account_file(
"secrets/gkt-merchant-center.json", scopes=[SCOPE])
creds.refresh(gtr.Request()) # si esto no tira, la SA anda
creds.refresh() sin excepción → la SA está OK. Después, un reports:search sobre una cuenta habilitada con SELECT product_view.id FROM product_view LIMIT 5 devuelve filas. Usá v1 (no v1beta). Tablas útiles: product_view product_performance_view.
Fichas de negocio / local waitlist
Qué es: la API de Google Business Profile (perfiles de negocio, reseñas, insights locales). Útil para SEO local.
Estado: el acceso a la API está en waitlist — Google todavía no aprobó la cuota del proyecto. Hasta que la habiliten, no hay conexión programática; se puede trabajar sobre exports manuales del panel de GBP.
En Google Cloud Console, la Business Profile API figura como habilitada y la cuota deja de ser 0. Mientras siga en waitlist, la validación es simplemente chequear el estado de la solicitud; no la pongas en el camino crítico de ninguna demo.
Crawler técnico de sitios licencias a destrabar
Qué es: el crawler de escritorio para auditorías técnicas (títulos, metas, redirects, canonical, status codes, enlaces internos). Se corre en tu máquina; la versión con licencia levanta el límite de 500 URLs y habilita el modo headless para automatizar.
Estado: las licencias están a destrabar — coordinar con IT cuántos seats hay y a quién se le asignan. Sin licencia funciona en modo gratis (tope 500 URLs, sin headless).
Cómo se conecta: instalás la app, y en Licence → Enter Licence Key pegás la key (de Passbolt, cuando esté asignada). Para automatizar, modo headless desde terminal:
screamingfrogseospider --headless --crawl https://ejemplo.com \
--output-folder ./out --export-tabs "Internal:All"
En Licence → Licence Details el estado es activa (sin el límite de 500). Un crawl de una URL cualquiera completa y exporta el CSV de Internal:All con más de 500 filas si el sitio las tiene.
HubSpot
El CRM donde viven contactos, deals y las automatizaciones comerciales. Para propuestas, follow-ups y el cruce con SEO en los sweet spots.
CRM · conectado con Level Blue listo
Qué es: el CRM del track Revenue: contactos, empresas, deals, pipelines, actividad. La conexión ya está establecida a través de Level Blue (la integración que administra el portal), así que el token/acceso sale de ahí — no se crea una private app nueva por persona.
Cómo se conecta: pedís el token de acceso (gestionado vía Level Blue) desde Passbolt y pegás llamadas contra la HubSpot API v3 con el header Authorization: Bearer. Todo de lectura para el hackathon.
curl "https://api.hubapi.com/crm/v3/objects/contacts?limit=1" \
-H "Authorization: Bearer <passbolt>"
La llamada a /crm/v3/objects/contacts?limit=1 devuelve 200 con un contacto → el token y los scopes de lectura andan. Un 401 es token vencido/mal; un 403 es scope faltante (pedir el scope correcto vía Level Blue). Nada de escrituras: si algo necesita crear/actualizar en HubSpot, va como borrador con gate humano.
¿Un acceso no anda o falta? No frenes el prototipo: marcá el pendiente en el board y seguí con datos mock. Los estados sin créditos / waitlist / licencias son cosas a destrabar antes o durante la semana, no bloqueantes de arranque.