# How to Generate a Client-Ready GEO Report: Complete Automation Pipeline

> Generate client-ready GEO reports effortlessly. Automate your technical data collection, scoring, and markdown rendering with our complete pipeline. Get started today.

- Repository: [Zubair Trabzada/geo-seo-claude](https://github.com/zubair-trabzada/geo-seo-claude)
- Tags: how-to-guide
- Published: 2026-09-08

---

**To generate a client-ready GEO report, execute the prerequisite audit skills to collect technical data, aggregate individual scores into the composite GEO Readiness Score, then invoke the `geo-report` skill to render a polished markdown document via the Jinja-like template engine.**

The **geo-seo-claude** repository automates the creation of professional GEO deliverables through a structured skill-based pipeline. This system transforms raw audit data from multiple technical assessments into a single, client-ready document that follows strict formatting and tone guidelines.

## Understanding the GEO Report Architecture

A client-ready GEO report represents the final synthesis of all Generative Engine Optimization audit activities. According to the source code in [`skills/geo-report/SKILL.md`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/skills/geo-report/SKILL.md), the generation process follows a linear pipeline that combines outputs from discrete audit skills into a unified markdown file named [`GEO-CLIENT-REPORT.md`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/GEO-CLIENT-REPORT.md)【/skills/geo-report/SKILL.md#L18-L23】.

The report includes an executive summary, GEO readiness score, AI visibility dashboard, crawler access status, brand-authority analysis, citability insights, technical health summary, schema review, [`llms.txt`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/llms.txt) status, prioritized action plan, competitor comparison, and methodology appendix. All sections adhere to professional formatting guidelines that avoid technical jargon【/skills/geo-report/SKILL.md#L78-L82】.

## Step 1: Execute Prerequisite Audit Skills

Before generating the final report, you must run the individual audit skills that crawl the target website and evaluate specific technical domains. These skills output markdown files and JSON score data that the report generator consumes.

The required audit skills include:

- **geo-platform-optimizer** – Evaluates platform readiness for AI crawlers
- **geo-schema** – Analyzes structured data implementation
- **geo-technical** – Assesses core technical SEO health
- **geo-content** – Reviews content quality and citability
- **geo-llmstxt** (optional) – Validates [`llms.txt`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/llms.txt) file implementation
- **geo-brand-mentions** (optional) – Analyzes brand authority signals

Run these sequentially using the skill runner:

```python
import subprocess

audit_skills = [
    "geo-platform-optimizer",
    "geo-schema",
    "geo-technical",
    "geo-content",
    "geo-llmstxt",
    "geo-brand-mentions",
]

for skill in audit_skills:
    subprocess.run([
        "python", "-m", "skill_runner", 
        "--skill", skill,
        "--target", "example.com"
    ], check=True)

```

Each skill writes its findings to markdown files (e.g., [`GEO-PLATFORM-OPTIMIZATION.md`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/GEO-PLATFORM-OPTIMIZATION.md), [`GEO-SCHEMA-REPORT.md`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/GEO-SCHEMA-REPORT.md)) and JSON score files in their respective directories【/skills/geo-report/SKILL.md#L18-L23】.

## Step 2: Aggregate Audit Scores

The composite **GEO Readiness Score** requires aggregating individual metrics from each audit. The formula defined in [`skills/geo-report/SKILL.md`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/skills/geo-report/SKILL.md) combines platform, content, technical, schema, and brand scores into a single weighted value【/skills/geo-report/SKILL.md#L44-L48】.

Extract the scores from the JSON outputs produced in Step 1:

```python
import json
from pathlib import Path

def load_score(file_path):
    return json.loads(Path(file_path).read_text())["score"]

platform_score  = load_score("geo-platform-optimizer/score.json")
content_score   = load_score("geo-content/score.json")
technical_score = load_score("geo-technical/score.json")
schema_score    = load_score("geo-schema/score.json")
brand_score     = load_score("geo-brand-mentions/score.json")

```

These variables feed directly into the report generation parameters in the next step.

## Step 3: Invoke the geo-report Skill

With audit data collected and scores calculated, invoke the `geo-report` skill to compile the final document. The skill engine reads the skill definition at [`skills/geo-report/SKILL.md`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/skills/geo-report/SKILL.md) and applies the **Report Template** ([`templates/geo-report-template.html`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/templates/geo-report-template.html)) to produce [`GEO-CLIENT-REPORT.md`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/GEO-CLIENT-REPORT.md)【/skills/geo-report/SKILL.md#L30-L33】【/templates/geo-report-template.html】.

Pass the aggregated scores as parameters:

```python
subprocess.run([
    "python", "-m", "skill_runner",
    "--skill", "geo-report",
    "--target", "example.com",
    "--params", json.dumps({
        "platform_score": platform_score,
        "content_score": content_score,
        "technical_score": technical_score,
        "schema_score": schema_score,
        "brand_score": brand_score,
        "date": "2026-09-08"
    })
], check=True)

print("✅ GEO client report generated ➜ GEO-CLIENT-REPORT.md")

```

The skill automatically stitches together the collected audit data, applies professional formatting, and outputs the final markdown file to the current working directory.

## Step 4: Render to HTML or PDF (Optional)

Convert the generated markdown to client-ready HTML or PDF formats using the built-in styling templates. The [`templates/geo-report-template.html`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/templates/geo-report-template.html) includes CSS styling ([`templates/geo-report-style.css`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/templates/geo-report-style.css)) and JavaScript that colour-codes scores and highlights severity levels【/templates/geo-report-template.html#L50-L71】.

Use Pandoc to perform the conversion:

```bash

# Convert Markdown → HTML with custom styling

pandoc GEO-CLIENT-REPORT.md \
  -o GEO-CLIENT-REPORT.html \
  --css templates/geo-report-style.css

# Optional: Convert HTML → PDF

pandoc GEO-CLIENT-REPORT.html \
  -o GEO-CLIENT-REPORT.pdf

```

The resulting HTML file provides an interactive dashboard view suitable for web browsers, while the PDF format ensures consistent rendering for email delivery.

## Key Files in the GEO Report Pipeline

The following source files constitute the backbone of the client-ready report workflow:

| File | Purpose |
|------|---------|
| [`skills/geo-report/SKILL.md`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/skills/geo-report/SKILL.md) | Defines the report generation process, score calculation formulas, and template placeholders【/skills/geo-report/SKILL.md】 |
| [`templates/geo-report-template.html`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/templates/geo-report-template.html) | HTML skeleton with Jinja-like syntax for dynamic content injection【/templates/geo-report-template.html】 |
| [`templates/geo-report-style.css`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/templates/geo-report-style.css) | Professional CSS stylesheet ensuring consistent visual presentation【/templates/geo-report-style.css】 |
| [`scripts/webapp/app.py`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/scripts/webapp/app.py) | Web interface for triggering the skill pipeline through a browser |
| [`docs/architecture.md`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/docs/architecture.md) | System overview detailing skill interactions and data flow |

## Summary

- **Run prerequisite audits** first: Execute platform, schema, technical, content, and brand skills to generate raw data files.
- **Aggregate scores** using the composite GEO Readiness Score formula before invoking the report generator.
- **Invoke `geo-report`** via the skill runner, passing JSON parameters containing all individual audit scores.
- **Output format**: The skill produces [`GEO-CLIENT-REPORT.md`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/GEO-CLIENT-REPORT.md), which can optionally convert to HTML/PDF using Pandoc and the provided CSS templates.
- **Template system**: The Jinja-like renderer in [`templates/geo-report-template.html`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/templates/geo-report-template.html) handles professional formatting and colour-coded severity indicators.

## Frequently Asked Questions

### What is the GEO Readiness Score?

The **GEO Readiness Score** is a composite metric defined in [`skills/geo-report/SKILL.md`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/skills/geo-report/SKILL.md) that combines individual audit scores (platform, content, technical, schema, brand) into a single percentage or grade representing overall AI visibility preparedness【/skills/geo-report/SKILL.md#L44-L48】. This score appears prominently in the executive summary of the final report.

### Can I customize the report template?

Yes. The report uses the Jinja-like template located at [`templates/geo-report-template.html`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/templates/geo-report-template.html), which you can modify to adjust HTML structure, CSS styling in [`templates/geo-report-style.css`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/templates/geo-report-style.css), or JavaScript colour-coding logic【/templates/geo-report-template.html#L50-L71】. The skill engine renders the markdown through this template before final output.

### Which audit skills are mandatory for report generation?

The core required skills are **geo-platform-optimizer**, **geo-schema**, **geo-technical**, and **geo-content**【/skills/geo-report/SKILL.md#L18-L23】. Optional skills include **geo-llmstxt** for LLM text file validation and **geo-brand-mentions** for authority analysis. The report generates successfully with core skills alone, though optional skills provide additional insights.

### How do I automate this for multiple clients?

Wrap the Python subprocess calls in a loop iterating over client domains, or deploy the [`scripts/webapp/app.py`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/scripts/webapp/app.py) Flask interface to trigger the pipeline via API calls. Each execution creates isolated [`GEO-CLIENT-REPORT.md`](https://github.com/zubair-trabzada/geo-seo-claude/blob/main/GEO-CLIENT-REPORT.md) files per target domain when you specify unique `--target` parameters in the skill runner commands.