Generador de Informe de Marketing en PDF

Generate professional marketing reports in PDF format using Python scripts.

Proposito de la skill

Generar un informe de marketing profesional y visualmente cuidado en PDF usando el script Python scripts/generar_informe_pdf.py. La skill recoge toda la data disponible de auditorias, la estructura en el JSON esperado, invoca el script y produce un PDF con marca, medidores de score, barras, tablas comparativas, hallazgos y plan de accion priorizado.

Cuando usarla

  • El usuario quiere version PDF del informe (no solo Markdown)
  • El usuario prepara un entregable para presentacion a cliente
  • El usuario pide un informe "pulido", "listo para cliente" o en PDF
  • Se activa con /marketing informe-pdf o /marketing informe-pdf <dominio>

Cuando usar PDF vs Markdown

FormatoMejor paraProsContras
PDFPresentaciones a cliente, adjunto en email, sales collateralAspecto profesional, formato consistente, graficos, printableMas dificil de editar, requiere script
MarkdownUso interno, referencia rapida, edicion iterativa, gitFacil de editar, legible en cualquier editor, git-friendlyMenos pulido visual, sin graficos

Regla: si el informe va a cliente o prospecto, usa PDF. Para interno o edicion posterior, Markdown.

Como ejecutarla

Paso 1: Recoger toda la data disponible

Revisa archivos de skills previas en el directorio del proyecto:

Fuentes primarias:

  • AUDITORIA-MARKETING.md — auditoria global
  • LANDING-CRO.md — analisis CRO
  • AUDITORIA-SEO.md — hallazgos SEO
  • VOZ-MARCA.md — analisis de voz de marca
  • INFORME-COMPETIDORES.md — comparativa competitiva
  • ANALISIS-FUNNEL.md — analisis de funnel
  • CALENDARIO-REDES.md — auditoria de redes
  • SECUENCIAS-EMAIL.md — auditoria de email
  • CAMPANAS-ADS.md — auditoria de ads

Si no hay data previa:

  1. Recomienda ejecutar antes /marketing auditoria <url>
  2. Si el usuario insiste, analiza la URL directamente y construye la data desde cero
  3. Usa scripts/analizar_pagina.py para recoger datos automaticos: python3 scripts/analizar_pagina.py <url>

Paso 2: Construir la estructura JSON

El script scripts/generar_informe_pdf.py espera un JSON con esta estructura exacta:

{
  "url": "https://ejemplo.com",
  "date": "1 de marzo de 2026",
  "brand_name": "Ejemplo S.L.",
  "overall_score": 62,
  "executive_summary": "Resumen de 2-4 frases sobre salud de marketing, oportunidades clave e impacto estimado de implementar las recomendaciones.",
  "categories": {
    "Contenido y Mensaje": {
      "score": 68,
      "weight": "25%"
    },
    "Optimizacion de Conversion": {
      "score": 52,
      "weight": "25%"
    },
    "SEO y Descubrimiento": {
      "score": 74,
      "weight": "15%"
    },
    "Posicionamiento Competitivo": {
      "score": 48,
      "weight": "15%"
    },
    "Marca y Confianza": {
      "score": 70,
      "weight": "10%"
    },
    "Crecimiento y Estrategia": {
      "score": 55,
      "weight": "10%"
    }
  },
  "findings": [
    {
      "severity": "Critico",
      "finding": "Descripcion del hallazgo mas importante"
    },
    {
      "severity": "Alto",
      "finding": "Descripcion de hallazgo de alta prioridad"
    },
    {
      "severity": "Medio",
      "finding": "Descripcion de hallazgo de prioridad media"
    },
    {
      "severity": "Bajo",
      "finding": "Descripcion de hallazgo menor"
    }
  ],
  "quick_wins": ["Primer quick win", "Segundo quick win", "Tercer quick win"],
  "medium_term": [
    "Primera accion medio plazo",
    "Segunda accion medio plazo",
    "Tercera accion medio plazo"
  ],
  "strategic": [
    "Primera accion estrategica",
    "Segunda accion estrategica",
    "Tercera accion estrategica"
  ],
  "competitors": [
    {
      "name": "Competidor A",
      "positioning": "Posicion en el mercado",
      "pricing": "Modelo de pricing",
      "social_proof": "Senales de confianza",
      "content": "Enfoque de contenido"
    },
    {
      "name": "Competidor B",
      "positioning": "Posicion en el mercado",
      "pricing": "Modelo de pricing",
      "social_proof": "Senales de confianza",
      "content": "Enfoque de contenido"
    }
  ]
}

Paso 3: Guia campo a campo

url (string, obligatorio)

URL completa con protocolo.

date (string, obligatorio)

Fecha de generacion. Formato: "DD de Mes de AAAA" (ej. "1 de marzo de 2026").

brand_name (string, obligatorio)

Nombre de la empresa/marca. Aparece en headers de la tabla competitiva.

overall_score (entero, 0-100, obligatorio)

Media ponderada de las 6 categorias. Calculo:

overall_score = (contenido * 0,25) + (conversion * 0,25) + (seo * 0,15) + (competitivo * 0,15) + (marca * 0,10) + (crecimiento * 0,10)

Justificacion de pesos: priorizamos conversion sobre SEO porque la mayoria de webs B2B en Espana viven de trafico de pago + outbound, no de SEO organico.

executive_summary (string, obligatorio)

2-4 frases cubriendo:

  • Estado actual del marketing
  • Top 1-2 hallazgos de mayor impacto
  • Impacto estimado en ingresos de implementar
  • Primer paso recomendado

Breve y potente. Aparece en portada debajo del gauge.

categories (object, obligatorio)

Exactamente 6 categorias:

CategoriaQue mideGuia de scoring
Contenido y MensajeCalidad de copy, value prop, claridad de headline, texto de CTAs, consistencia de voz de marca80+: claro, orientado a beneficio, especifico. 60-79: correcto pero generico. <60: vago, feature-focused
Optimizacion de ConversionSocial proof, formularios, ubicacion de CTAs, gestion de objeciones, urgencia80+: multiples pruebas, forms optimizados, CTAs claros. 60-79: algunos elementos. <60: faltan criticos
SEO y DescubrimientoTitles, meta, headers, schema, linking interno, velocidad80+: optimizado. 60-79: presente con gaps. <60: issues mayores o ausencias
Posicionamiento CompetitivoDiferenciacion, transparencia de pricing, contenido comparativo, conciencia de mercado80+: posicion clara, comparativas. 60-79: algo de diferenciacion. <60: sin posicionamiento
Marca y ConfianzaCalidad de diseno, trust badges, indicadores de seguridad, aspecto profesional80+: diseno moderno, senales de confianza. 60-79: diseno correcto. <60: desfasado
Crecimiento y EstrategiaCaptura de leads, email marketing, estrategia de contenido, canales de adquisicion80+: estrategia multicanal. 60-79: algunos canales activos. <60: sin estrategia clara

findings (array, obligatorio)

Array de hallazgos con severity y finding.

Niveles de severidad:

  • Critico — perdida directa de ingresos o clientes. Corregir ya.
  • Alto — impacto significativo en crecimiento. 1-2 semanas.
  • Medio — oportunidad relevante. 1 mes.
  • Bajo — nice-to-have. Cuando haya tiempo.

Como escribir hallazgos efectivos:

  • Concreto: "El headline de home dice 'Bienvenido a nuestra plataforma'" no "el headline necesita mejora"
  • Cuantifica: "Faltan meta descriptions en 8 de 12 landings"
  • Usa benchmarks: "Tiempo de carga 4,2s (benchmark: <2s)"
  • Incluye evidencia: "Sin testimonios en home, pricing ni signup"

5-10 hallazgos. Ordena de mas a menos severo.

quick_wins (array, obligatorio)

3-5 acciones ejecutables en una semana con esfuerzo minimo. Cada una concreta y accionable.

Buen quick win: "Reescribir el headline de home de 'Bienvenido a nuestra plataforma' a 'Reduce tu tiempo de reporting un 75% — analytics automatico para equipos de growth'"

Mal quick win: "Mejorar el headline" (demasiado vago)

medium_term (array, obligatorio)

3-5 acciones de 1-3 meses.

strategic (array, obligatorio)

3-5 acciones de 3-6 meses. Cambios de fundacion.

competitors (array, opcional)

Hasta 3 competidores para la tabla comparativa. Si no hay data, omite el campo y el script se salta la seccion.

Paso 4: Guardar el JSON

Escribe la data en un fichero JSON temporal:

cat > /tmp/datos_informe.json << 'JSONEOF'
{
  ... JSON ensamblado ...
}
JSONEOF

Paso 5: Invocar el generador de PDF

Check de requisitos: Verifica que reportlab esta instalado:

python3 -c "import reportlab" 2>/dev/null || pip3 install reportlab

Generar el informe:

python3 scripts/generar_informe_pdf.py /tmp/datos_informe.json "INFORME-MARKETING-<dominio>.pdf"

Sustituye <dominio> por el dominio del cliente (sin protocolo ni www), usando guiones en vez de puntos. Ejemplos:

  • ejemplo.com -> INFORME-MARKETING-ejemplo-com.pdf
  • miapp.io -> INFORME-MARKETING-miapp-io.pdf

Modo demo (sin argumentos): Ejecutar el script sin argumentos genera un informe de ejemplo con placeholders:

python3 scripts/generar_informe_pdf.py
# Genera: INFORME-MARKETING-ejemplo.pdf

Paso 6: Verificar el output

Comprueba que el PDF se genero:

ls -la "INFORME-MARKETING-<dominio>.pdf"

Reporta la ruta y el tamano al usuario.

Paso 7: Limpieza

Borra el JSON temporal:

rm /tmp/datos_informe.json

Contenido del PDF

El PDF generado incluye:

Pagina 1: Portada

  • Titulo: "Informe de Auditoria de Marketing"
  • URL objetivo
  • Fecha de generacion
  • Gauge con score global (visualizacion circular con color)
  • Letra de calificacion (A+ hasta F)
  • Parrafo de resumen ejecutivo

Pagina 2: Desglose de scores

  • Barra horizontal con las 6 categorias y color
  • Tabla con nombre, score, peso y estado
  • Colores: verde (80+), azul (60-79), amarillo (40-59), rojo (<40)

Pagina 3: Hallazgos clave

  • Tabla con severidad y descripcion
  • Indicadores de severidad por color (Critico=rojo, Alto=naranja, Medio=amarillo, Bajo=azul)
  • Ordenados de mas a menos severo

Pagina 4: Plan de accion priorizado

  • Quick Wins (esta semana)
  • Medio plazo (1-3 meses)
  • Estrategicas (3-6 meses)
  • Items numerados en cada tier

Pagina 5: Panorama competitivo (si hay data)

  • Tabla comparativa cliente vs hasta 3 competidores
  • Filas: Posicionamiento, Pricing, Social Proof, Contenido

Pagina final: Metodologia

  • Explicacion de scoring
  • Pesos y criterios
  • Footer: "Generado con Marketing Claude Code"

Paleta de colores

Paleta profesional del PDF:

ElementoColorHex
Primario (headers, titulos)Azul oscuro#1B2A4A
Acento (enlaces, highlights)Azul#2D5BFF
Highlight (atencion)Naranja#FF6B35
Exito (scores altos)Verde#00C853
Advertencia (scores medios)Ambar#FFB300
Danger (scores bajos, critico)Rojo#FF1744
Fondo claroGris claro#F5F7FA
Texto bodyGris oscuro#2C3E50
Texto secundarioGris medio#7F8C9B
BordesBorde claro#E0E6ED

Mapeo score-color

  • 80-100: Verde (#00C853) — performance solida
  • 60-79: Azul (#2D5BFF) — correcta con margen
  • 40-59: Ambar (#FFB300) — requiere atencion
  • 0-39: Rojo (#FF1744) — critico

Troubleshooting

IssueSolucion
ModuleNotFoundError: No module named 'reportlab'pip3 install reportlab
Script genera PDF vacioRevisa que el JSON tiene todos los campos obligatorios
Gauge no renderizaoverall_score debe ser un numero 0-100
Tabla de competidores ausenteAsegura que competitors tiene name, positioning, pricing, social_proof, content
PDF de una sola paginaRevisa errores de parseo JSON: python3 -c "import json; json.load(open('/tmp/datos_informe.json'))"
Fuentes rarasEl script usa Helvetica (nativa de reportlab). Sin fuentes custom.

Integracion con otras skills

Mejor workflow combinado:

  1. /marketing auditoria <url> — data de auditoria completa
  2. /marketing competidores <url> — data comparativa
  3. /marketing seo <url> — hallazgos SEO detallados
  4. /marketing landing <url> — analisis CRO
  5. /marketing informe-pdf <url> — compila todo en PDF

La skill del PDF busca automaticamente los outputs de estas skills e incorpora la data al JSON.

Output

  • Archivo: INFORME-MARKETING-<dominio>.pdf
  • Ubicacion: raiz del proyecto
  • Tamano tipico: 200-500 KB segun contenido
  • Paginas: 5-7 segun datos de competidores y extras

Principios clave

  • El PDF es el entregable mas orientado a cliente del toolkit. La calidad importa.
  • Verifica que el JSON esta completo y correcto antes de generar. Basura dentro, basura fuera.
  • Usa el PDF para primeras impresiones y conversaciones de venta. El Markdown va despues para detalles.
  • Todo score debe ser justificable. Si el cliente pregunta "por que saco 52 en Conversion", los hallazgos tienen que explicarlo.
  • Redondea a enteros. Los decimales fingen precision.
  • Resumen ejecutivo ajustado: 2-4 frases maximo. Los decisores solo escanean.
  • Si es para prospecto, el informe es herramienta de venta. Oportunidades compelling, plan alcanzable.