geo-report-pdf
Generate a professional PDF report from a GEO audit using pandoc + Chrome headless. Converts GEO-AUDIT-REPORT.md into a styled, client-ready PDF with a cover page, color-coded score tables, severity-tagged findings, and a 90-day roadmap.
By zubair-trabzada · 589 installs
npx skills add zubair-trabzada/geo-seo-claude --skill geo-report-pdf
Source repository · Upstream listing
GEO PDF Report Generator (pandoc pipeline)
Prerequisites
pandoc — brew install pandoc
Google Chrome — must be installed at /Applications/Google Chrome.app/
No Python dependencies. No ReportLab. No JSON data wrangling.
How It Works
1. Read GEO AUDIT REPORT.md in the current directory (created by /geo audit )
2. Extract cover metadata from the report (brand name, domain, GEO score, date, locations)
3. Run pandoc with the bundled CSS + HTML template to produce a self contained GEO REPORT.html
4. Run Chrome headless to print the HTML to GEO REPORT.pdf
The pandoc template ( ~/.claude/skills/geo/templates/geo report template.html ) injects:
A full bleed dark navy cover section with the GEO score badge
Per section cover metadata (date, business type, locations, platform)
JavaScript that runs inside Chrome before printing to color code score cells and severity tag finding sections
Workflow
Step 1: Check for audit report
Look for GEO AUDIT REPORT.md in the current directory. If absent, tell the user to run /geo audit <url first.
Step 2: Extract cover metadata from the report
Read the top of GEO AUDIT REPORT.md and extract:
Field Where to find it
brand name First H1 title (after "GEO Audit Report:")
domain Second bold line (e.g. Domain: alexamediasolutions.com )
geo score Line matching Overall GEO Score: XX / 100
score label Word after the score on that same line (e.g. "Poor", "Fair", "Good")
date Audit Date: line
business type Business Type: line
locations Locations: line
platform CMS: line
Step 3: Run pandoc
Replace <field placeholders with values extracted in Step 2. If a field is not found in the report, omit that metadata flag — the template has sensible defaults.
Step 4: Run Chrome headless
Step 5: Report completion
Tell the user:
GEO REPORT.pdf was generated in the current directory
File size
Optionally: open GEO REPORT.pdf to preview it
What the PDF Contains
Cover page — Dark navy gradient, brand name, domain, GEO score badge (colored by score), audit date, business type, locations, CMS platform
Score tables — Cells containing XX/100 are color coded: ≥80 green, ≥65 blue, ≥50 amber, ≥35 orange, <35 red
Finding sections — h3 headings containing "Critical / High / Medium / Low" get severity colored left border callout blocks (red / orange / yellow / green)
Section page breaks — Major sections (High Priority, 90 Day Roadmap, Component Score Summary, Generated Schema) break to new pages automatically
Code blocks — JSON schema templates render with dark theme monospace styling
Page footer — Brand name · GEO Audit · date + page numbers (via CSS @page )
Customizing the Report
Colors / typography — Edit ~/.claude/skills/geo/templates/geo report style.css
Cover layout — Edit ~/.claude/skills/geo/templates/geo report template.html
Score thresholds for color coding — Edit the scoreColor() function in the template's <script block
Which sections get page breaks — Edit the breakBefore array in the template's <script block
Troubleshooting
Problem Fix
pandoc: command not found brew install pandoc
Chrome not found Check path: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
PDF is blank / empty Increase virtual time budget to 8000
Cover metadata missing Check GEO AUDIT REPORT.md has the standard header format
Fonts not loading PDF is rendered offline; system fonts are used as fallback — this is expected