Install
$ agentstack add skill-thesmokedev-geo-skills-geo-report-pdf ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
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.
Prerequisites
- ReportLab must be installed:
pip install reportlab - The PDF generation script is located at:
~/.claude/skills/geo/scripts/generate_pdf_report.py - 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 ` 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**:
```bash
python3 ~/.claude/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", "Perplexity", etc.
- **Crawler Status**: Look for tables with "Allowed" or "Blocked" status for crawlers like GPTBot, ClaudeBot
- **Findings**: Look for sections titled "Key Findings", "Critical Issues", "Recommendations"
- **Action Items**: Look for sections titled "Quick Wins", "Action Plan", "Recommendations"
## Notes
- If ReportLab is not installed, run: `pip install reportlab`
- The PDF is designed for US Letter size (8.5" x 11")
- Color palette: Navy primary (#1a1a2e), Blue accent (#0f3460), Coral highlight (#e94560), Green success (#00b894)
- Each page has a header line, page numbers, "Confidential" watermark, and generation date
- Score gauges use traffic-light colors: green (80+), blue (60-79), yellow (40-59), red (below 40)
## Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- **Author:** [TheSmokeDev](https://github.com/TheSmokeDev)
- **Source:** [TheSmokeDev/geo-skills](https://github.com/TheSmokeDev/geo-skills)
- **License:** MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.