Skip to main content
Glama
README.md
# REM · Ingeniería inversa de marketing

> Pega el enlace de una empresa. Obtén un expediente con **cómo consigue clientes**, y la prueba de cada afirmación.

REM es una herramienta que construí para que un equipo de marketing pueda estudiar a la competencia con rigor, no con intuiciones. Recoge todo lo que una empresa deja público sobre su adquisición de clientes: anuncios, píxeles, redes, SEO, prensa, podcasts, fundadores, precios e historial de mensajes. Con eso arma un expediente donde **cada dato enlaza a su evidencia** y **lo que no se pudo ver queda marcado como desconocido**, nunca como "no lo hacen".

Funciona en tu equipo, como aplicación web local, desde la terminal o como servidor MCP para tu agente (Claude Code, Codex, Cursor…).

---

## Por qué existe

Cuando un competidor crece, casi siempre deja rastro: anuncios que llevan meses activos (los que funcionan), píxeles que delatan en qué plataformas compra medios, familias de páginas para SEO, un fundador que publica a diario, un podcast propio, picos de prensa que coinciden con un lanzamiento…

El problema es que ese rastro está repartido en veinte sitios distintos, y que es muy fácil confundir una pista con un hecho. REM resuelve las dos cosas:

1. **Lo reúne todo en un solo análisis**, con fuentes oficiales y públicas.
2. **Separa lo observado de lo inferido.** En el modo por defecto, "Solo hechos", el informe no puede especular: si algo no tiene cita, va a la lista de desconocidos.

## Empezar

Necesitas **Node.js 22 o superior**. **Google Chrome** es opcional, pero recomendable: con él REM ve los píxeles disparando de verdad.

```bash
git clone https://github.com/pierreabboud05/rem-pmaa.git
cd rem-pmaa
npm install
npm run build
npm link          # deja disponible el comando `rem`

rem doctor        # qué fuentes, navegador y buscador tienes activos
rem web           # abre la app en http://localhost:4321
```

Sin ninguna clave ya obtienes un expediente útil. Las claves amplían la cobertura (ver [Configuración](#configuración)).

## Cómo trabaja un análisis

```
enlace
  │
  ├─ 1. Sitio web en un navegador real ─► mensaje, CTAs, precios, enlaces, píxeles DISPARANDO
  │
  ├─ 2. En paralelo:
  │     anuncios (Meta, Google, LinkedIn, Apple) · redes (TikTok, Instagram, YouTube, X,
  │     LinkedIn, Bluesky) · SEO y búsqueda con IA · historial en Wayback · apps ·
  │     fundadores · Reddit, Hacker News, Product Hunt, GitHub · prensa · podcasts · Wikipedia
  │
  ├─ 3. Scorecard determinista ─► 25 canales puntuados sin IA, cada fila con su evidencia
  │
  ├─ 4. Redacción ─► Claude Code, Codex o la API de Anthropic interpretan el expediente
  │
  └─ 5. Verificación ─► el validador revisa citas, secciones, inversión inventada e inferencias;
                        si algo falla, el redactor recibe los fallos y corrige el informe
```

Cada pieza de evidencia es una **observación** (vista en una URL o API) o una **derivación** (calculada a partir de observaciones, como publicaciones por semana). Lo que no se pudo revisar es un **desconocido**, con su motivo y un enlace para comprobarlo a mano.

## Qué analiza

| Área | Qué obtiene | Clave |
|---|---|---|
| **Sitio web** | Mensaje principal, CTAs, precios y modelo (gratis, prueba, por asiento, por uso), señales de venta consultiva, programa de afiliados, prueba social | — |
| **Píxeles y stack** | Píxeles de Meta, Google Ads, TikTok, LinkedIn, Reddit, X, Pinterest, Snap y Microsoft, **observados disparando en un navegador real** (con ID de cuenta y evento) y también dentro de Google Tag Manager; analítica, atribución móvil, email, chat, identificación de visitantes | — |
| **Anuncios de Meta** | Anuncios activos e históricos, los que **más tiempo llevan activos**, lanzados en 30 días, hooks, formatos, CTAs, landings, UTMs y variantes | Scrape Creators |
| **Google y LinkedIn Ads** | Anuncios por dominio, formatos, recencia, **otros anunciantes que pujan por la marca** | Scrape Creators |
| **Apple Search Ads** | Anuncios en App Store en la UE, mensajes, mercados e imitadores | — |
| **Redes** | TikTok, Instagram, X y LinkedIn con estadísticas; **YouTube** (página pública + RSS oficial) y **Bluesky** sin clave | Parcial |
| **SEO y búsqueda con IA** | Tamaño del sitemap, familias de páginas programáticas, cadencia de contenido, comparativas, `llms.txt` y crawlers de IA bloqueados | — |
| **Fundadores** | Nombres desde Wikidata, JSON-LD y la propia web, con nivel de confianza; audiencia y publicaciones | Parcial |
| **Comunidad** | Reddit (con clave), Hacker News, Product Hunt y **GitHub** (estrellas, repos activos) | Parcial |
| **Prensa y podcasts** | Artículos de 12 meses (índice abierto GDELT), podcast propio y apariciones en episodios | — |
| **Notoriedad** | Vistas mensuales en Wikipedia y su tendencia | — |
| **Historia** | Cómo cambió el mensaje de la home en Wayback Machine | — |
| **Apps** | Valoraciones, instalaciones y cadencia de actualizaciones en App Store y Google Play | — |

## Cómo se lee un expediente

- **Mapa de canales.** El relleno indica cuánta certeza hay: **sólido** = observado, **rayado** = solo hay un píxel, **gris** = inactivo, **vacío** = no detectado, **punteado** = desconocido. Al pulsar un canal se abre la evidencia que lo sostiene.
- **Informe.** Cada `E12` resaltado abre el dato original. Con "Solo hechos" no hay "probablemente".
- **Creatividades.** Anuncios, vídeos, posts, artículos y episodios, ordenables por rendimiento o por días activos. Guarda los mejores en el **Tablero**.
- **Puntos ciegos.** Lo que no se pudo ver, con enlace para revisarlo y casilla para marcarlo como revisado.
- **Cambios.** Vuelve a analizar la misma empresa días después y verás qué anuncios lanzó o retiró, cómo crecieron sus audiencias y si cambió su mensaje.
- **Comparar.** Elige 2–4 expedientes y verás quién lidera cada canal.

El informe se exporta a PDF (con una hoja de estilo para presentar), Markdown o JSON.

## Modo "Solo hechos"

Viene activado por defecto en la app (en la terminal: `--strict`).

- El informe solo puede contener observaciones y derivaciones citadas.
- Queda prohibido el lenguaje especulativo ("probablemente", "parece", "sugiere"…).
- Si no se observa una conexión entre canales, el informe lo dice tal cual en vez de imaginarla.
- El validador añade dos comprobaciones: **sin inferencias** y **hechos citados**. Si fallan, el redactor corrige el informe automáticamente.

Si quieres interpretación, elige **Análisis completo**: las inferencias se permiten, pero marcadas y apoyadas en evidencia.

## Configuración

Todas las claves son opcionales. Ponlas en un archivo `.env` (copia `.env.example`) o en tu entorno.

| Variable | Qué desbloquea |
|---|---|
| `SCRAPECREATORS_API_KEY` | Bibliotecas de anuncios de Meta, Google y LinkedIn, estadísticas de TikTok, Instagram, X y LinkedIn, fundadores y Reddit. Entre 25 y 50 créditos por análisis. |
| `ANTHROPIC_API_KEY` | Redacción con la API de Anthropic. No hace falta si usas Claude Code o Codex con tu suscripción. |
| `BRAVE_SEARCH_API_KEY` · `TAVILY_API_KEY` · `SEARXNG_URL` | Búsqueda web sin Scrape Creators, para descubrir cuentas y fundadores que la web no enlaza. |
| `GITHUB_TOKEN` | Más margen en la API pública de GitHub. |
| `REM_BROWSER=0` · `REM_CHROME_PATH` | Desactivar el navegador real, o indicar otra instalación de Chrome o Chromium. |
| `REM_MODEL` · `REM_MAX_CREDITS` · `REM_PORT` | Modelo de redacción, presupuesto de créditos y puerto de la app. |

## Desde la terminal

```bash
rem empresa.com                       # análisis completo + informe (si hay motor de redacción)
rem empresa.com --strict              # informe en modo "Solo hechos"
rem empresa.com --no-ai               # solo evidencia, sin redacción
rem empresa.com --only paid,social    # limitar áreas
rem empresa.com --handle tiktok=usuario
rem diff empresa.com                  # qué cambió desde el análisis anterior
rem https://apps.apple.com/…/id123    # también acepta enlaces de App Store y Google Play
```

La salida se guarda en `./rem-reports/<dominio>-<fecha>/` (`report.md` + `evidence.json`).

## Desde tu agente (MCP)

```bash
rem setup             # detecta Claude Code y Codex, enseña el plan y pregunta antes de tocar nada
```

`setup` registra el servidor MCP de **esta instalación** e instala la skill [`skills/rem`](skills/rem/SKILL.md), que enseña al agente el método completo: investigar, cubrir cada canal, citar, verificar y corregir.

| Herramienta | Para qué |
|---|---|
| `analyze_company` | Recoge todo y devuelve scorecard, índice de evidencia, desconocidos y `run_id` |
| `get_evidence` · `get_content` | Datos completos de una evidencia, y los anuncios y posts concretos |
| `get_playbook` | El método del analista (con `strict: true`, las reglas de "Solo hechos") |
| `validate_report` | Comprueba el informe del agente (con `strict: true`, también las inferencias) |
| `compare_runs` | Qué cambió entre dos análisis |
| `write_report` | Redacta en el servidor con la API de Anthropic |

## Preguntas frecuentes

**¿Es legal?** REM solo lee información pública: páginas web, bibliotecas de transparencia publicitaria y APIs públicas. No inicia sesión, no resuelve CAPTCHAs, no usa técnicas anti-detección y no acepta cookies. Lo que no es público queda como desconocido.

**¿Ensucia la analítica del competidor?** No. En el navegador real, las peticiones de seguimiento se registran y se bloquean antes de salir.

**¿Por qué dice "desconocido" y no "no tienen anuncios"?** Porque no haber visto algo no prueba que no exista. Un negativo solo se afirma cuando una fuente se revisó y salió vacía.

**¿Da cifras de inversión?** Nunca, salvo que una fuente las publique. Usa indicadores: anuncios activos, longevidad y ritmo de lanzamientos.

## Límites

- Apple Search Ads solo es visible en la UE. TikTok y X no tienen biblioteca pública global de anuncios. Reddit cerró la suya.
- Los conteos de las bibliotecas salen de muestras; el informe lo dice.
- GDELT admite una consulta cada 5 segundos. Si limita la consulta, la prensa queda como desconocida.
- Las coincidencias por búsqueda (fundadores, cuentas, menciones en podcasts) pueden fallar y se marcan con su nivel de confianza.
- El tracking del lado del servidor y las herramientas de email no se ven desde fuera.

## Uso responsable

Estudia la estrategia y crea la tuya. Aprende qué ángulos, ofertas y canales funcionan; no copies anuncios, textos, vídeos ni marcas de otros. Respeta los términos de cada sitio y la ley de tu país.

## Desarrollo

```bash
npm run dev -- empresa.com --no-ai   # ejecutar desde el código
npm run typecheck && npm test        # tipos y tests
npm run eval                         # valida informes grabados contra su evidencia
```

La arquitectura y las reglas para contribuir están en [AGENTS.md](AGENTS.md) y [CONTRIBUTING.md](CONTRIBUTING.md).

## Créditos

Desarrollado por **Pierre Abboud**. REM parte de un proyecto open source con licencia MIT, cuyo aviso de copyright se conserva en [LICENSE](LICENSE), y toma la filosofía de [REA (Reverse Engineer Anything)](https://github.com/morluto/rea): hallazgos con su evidencia y sus límites.

## Licencia

[MIT](LICENSE).