Skip to content
Marketing
Skill

/geo-report-pdf

Generate a professional PDF report from GEO audit data using ReportLab. Creates a polished, client-ready PDF with score gauges, bar charts, platform readiness visualizations, color-coded tables, and prioritized action plans.

From plugin
thl-open
1817 skills

Claude Code

$ npx -y skills add techhorizonlabs/thl-open --skill geo-report-pdf --agent claude-code

SKILL.md

geo-report-pdf.SKILL.md
name: geo-report-pdf
description: Generate a professional PDF report from GEO audit data using ReportLab. Creates a polished, client-ready PDF with score gauges, bar charts, platform readiness visualizations, color-coded tables, and prioritized action plans.
version: 1.0.0
author: geo-seo-claude
tags: [geo, pdf, report, client-deliverable, professional]
allowed-tools: Read, Grep, Glob, Bash, WebFetch, Write

GEO PDF Report Generator

Purpose

This skill generates a professional, visually polished PDF report from GEO audit data. The PDF includes score gauges, bar charts, platform readiness visualizations, color-coded tables, and a prioritized action plan, ready to deliver directly to clients.

> **Two PDF paths: pick one.** For a **branded, client-ready** deliverable, prefer the TypeScript [`tools/audit-report-kit`](../../tools/audit-report-kit) (react-pdf, THL brand tokens, provenance tags, `n/a` for null scores, compile-checked JSON-LD alongside). The ReportLab script below is the lightweight Python path when you don't want a Node toolchain. They render the same audit JSON; don't run both.

Prerequisites

  • **ReportLab** must be installed: `pip install reportlab`
  • The Python PDF generation script lives at [`../geo/scripts/generate_pdf_report.py`](../geo/scripts/generate_pdf_report.py) (shared with the `geo` umbrella skill). Run it from the repo root: `python3 skills/geo/scripts/generate_pdf_report.py <data.json> <out.pdf>`.
  • Run a full GEO audit first (using `geo-audit`) to have data to include in the report

How to Generate a PDF Report

Step 1: Collect Audit Data

After running a full `/geo-audit`, collect all scores, findings, and recommendations into a JSON structure. The JSON data must follow this schema:

{
    "url": "https://example.com",
    "brand_name": "Example Company",
    "date": "2026-02-18",
    "geo_score": 65,
    "scores": {
        "ai_citability": 62,
        "brand_authority": 78,
        "content_eeat": 74,
        "technical": 72,
        "schema": 45,
        "platform_optimization": 59
    },
    "platforms": {
        "Google AI Overviews": 68,
        "ChatGPT": 62,
        "Perplexity": 55,
        "Gemini": 60,
        "Bing Copilot": 50
    },
    "executive_summary": "A 4-6 sentence summary of the audit findings...",
    "findings": [
        {
            "severity": "critical",
            "title": "Finding Title",
            "description": "Description of the finding and its impact."
        }
    ],
    "quick_wins": [
        "Action item 1",
        "Action item 2"
    ],
    "medium_term": [
        "Action item 1",
        "Action item 2"
    ],
    "strategic": [
        "Action item 1",
        "Action item 2"
    ],
    "crawler_access": {
        "GPTBot": {"platform": "ChatGPT", "status": "Allowed", "recommendation": "Keep allowed"},
        "ClaudeBot": {"platform": "Claude", "status": "Blocked", "recommendation": "Unblock for visibility"}
    }
}

Step 2: Write JSON Data to a Temp File

Write the collected audit data to a temporary JSON file:

# Write audit data to temp file
cat > /tmp/geo-audit-data.json << 'EOF'
{ ... audit JSON data ... }
EOF

Step 3: Generate the PDF

Run the PDF generation script:

python3 skills/geo/scripts/generate_pdf_report.py /tmp/geo-audit-data.json GEO-REPORT-[brand].pdf

The script will produce a professional PDF report with:

  • **Cover Page:** Brand name, URL, date, overall GEO score with visual gauge
  • **Executive Summary:** Key findings and top recommendations
  • **Score Breakdown:** Table and bar chart of all 6 scoring categories
  • **AI Platform Readiness:** Visual horizontal bar chart per platform with scores
  • **AI Crawler Access:** Color-coded table (green=allowed, red=blocked)
  • **Key Findings:** Severity-coded findings list (critical/high/medium/low)
  • **Prioritized Action Plan:** Quick wins, medium-term, and strategic initiatives
  • **Appendix:** Methodology, data sources, and glossary

Step 4: Return the PDF Path

After generation, tell the user where the PDF was saved and its file size.

Complete Workflow Example

When the user runs this skill, follow this exact sequence:

1. **Check for existing audit data.** Look for recent GEO audit reports in the current directory:

  • `GEO-CLIENT-REPORT.md`
  • `GEO-AUDIT-REPORT.md`
  • Or any `GEO-*.md` files from a recent audit

2. **If no audit data exists:** tell the user to run `/geo-audit <url>` first, then come back for the PDF.

3. **If audit data exists:** parse the markdown report to extract:

  • Overall GEO score
  • Category scores (citability, brand authority, content/E-E-A-T, technical, schema, platform)
  • Platform readiness scores (Google AIO, ChatGPT, Perplexity, Gemini, Bing Copilot)
  • AI crawler access status
  • Key findings with severity levels
  • Quick wins, medium-term, and strategic action items
  • Executive summary

4. **Build the JSON.** Structure all data into the JSON schema shown above.

5. **Write JSON to temp file.** Save to `/tmp/geo-audit-data.json`

6. **Run the PDF generator**:

   python3 skills/geo/scripts/generate_pdf_report.py /tmp/geo-audit-data.json "GEO-REPORT-[brand_name].pdf"

7. **Report success.** Tell the user the PDF was generated, its location, and file size.

If the User Provides a URL

If the user runs `/geo-report-pdf https://example.com` with a URL: 1. First run a full audit: invoke the `geo-audit` skill for that URL 2. Then collect all the audit data from the generated report files 3. Generate the PDF as described above

Parsing Markdown Audit Data

When extracting data from existing GEO markdown reports, look for these patterns:

  • **GEO Score**: Look for "GEO Score: XX/100" or "Overall: XX/100" or "GEO Readiness Score: XX"
  • **Category Scores**: Look for score tables with columns like "Component | Score | Weight"
  • **Platform Scores**: Look for tables with "Google AI Overviews", "ChatGPT", "Perp
Read more
@techhorizonlabs
Ships withthl-open

Turn a client website into an AI-readiness audit, a ranked fix plan and a branded report. Open agent skills and reporting tools from Tech Horizon Labs. Start in Claude Code, or use a compatible agent that reads SKILL.md files.

Stars on GitHub

Momentum

stars in total
18
Star history of techhorizonlabs/thl-open on GitHub, a chart by star-history.com

Other skills on thl-open.

found-by-ai

found-by-ai

Measure whether AI engines actually recommend a business when buyers ask. Runs the free live scan at areyoufoundbyai.com (no…

geo-audit

geo-audit

Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit…

geo-compare

geo-compare

Monthly delta tracking and progress reporting for GEO clients. Compares two GEO audits (baseline vs. current), calculates score…

More skills from other plugins.

seo

seo

Comprehensive SEO analysis for any website or business type. Full site audits, single-page analysis, technical SEO (crawlability,…

@agricidaniel@agricidanielInstall Skill
brag

brag

Turn the current project website into a short, polished, shareable launch video using Hyperframes. Use when someone says "/brag",…

brag2w21k
@latent-spaces@latent-spacesInstall Skill
geo-audit

geo-audit

Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit…

Questions about geo-report-pdf.

Which coding agents can use geo-report-pdf?
geo-report-pdf installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.