skills/market-report-pdf/SKILL.md
# PDF Marketing Report Generator ## Skill Purpose Generate a professional, visually polished PDF marketing report using the Python script `scripts/generate_pdf_report.py`. This skill collects all available audit and analysis data, structures it into the expected JSON format, invokes the script, and produces a branded PDF with score gauges, bar charts, comparison tables, findings, and a prioritized action plan. ## When to Use - User wants a PDF version of the marketing report (not just Markdown
npx skillsauth add zubair-trabzada/ai-marketing-claude skills/market-report-pdfInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate a professional, visually polished PDF marketing report using the Python script scripts/generate_pdf_report.py. This skill collects all available audit and analysis data, structures it into the expected JSON format, invokes the script, and produces a branded PDF with score gauges, bar charts, comparison tables, findings, and a prioritized action plan.
/market report-pdf or /market report-pdf <domain>| Format | Best For | Pros | Cons | |---|---|---|---| | PDF | Client presentations, email attachments, sales collateral | Professional appearance, consistent formatting, visual charts, printable | Harder to edit, requires Python script | | Markdown | Internal use, quick reference, iterative editing, version control | Easy to edit, readable in any editor, git-friendly | Less visually polished, no charts |
Rule of thumb: If the report is going to a client or prospect, use PDF. If it is for internal use or further editing, use Markdown.
Gather data from all previous skill runs. Check for these files in the project directory:
Primary data sources:
MARKETING-AUDIT.md -- Overall audit resultsLANDING-CRO.md -- Landing page conversion analysisSEO-AUDIT.md -- SEO findingsBRAND-VOICE.md -- Brand voice analysisCOMPETITOR-ANALYSIS.md -- Competitor comparison dataFUNNEL-ANALYSIS.md -- Funnel analysisSOCIAL-AUDIT.md -- Social media auditEMAIL-AUDIT.md -- Email marketing auditAD-AUDIT.md -- Advertising auditIf no previous data exists:
/market audit <url> first for the best resultspython scripts/analyze_page.py <url>The scripts/generate_pdf_report.py script expects a JSON file as input with this exact structure:
{
"url": "https://example.com",
"date": "March 1, 2026",
"brand_name": "Example Co",
"overall_score": 62,
"executive_summary": "A 2-4 sentence summary of the overall marketing health, key opportunities, and estimated revenue impact of implementing recommendations.",
"categories": {
"Content & Messaging": {
"score": 68,
"weight": "25%"
},
"Conversion Optimization": {
"score": 52,
"weight": "20%"
},
"SEO & Discoverability": {
"score": 74,
"weight": "20%"
},
"Competitive Positioning": {
"score": 48,
"weight": "15%"
},
"Brand & Trust": {
"score": 70,
"weight": "10%"
},
"Growth & Strategy": {
"score": 55,
"weight": "10%"
}
},
"findings": [
{
"severity": "Critical",
"finding": "Description of the most important finding"
},
{
"severity": "High",
"finding": "Description of a high-priority finding"
},
{
"severity": "Medium",
"finding": "Description of a medium-priority finding"
},
{
"severity": "Low",
"finding": "Description of a lower-priority finding"
}
],
"quick_wins": [
"First quick win action item",
"Second quick win action item",
"Third quick win action item"
],
"medium_term": [
"First medium-term action item",
"Second medium-term action item",
"Third medium-term action item"
],
"strategic": [
"First strategic action item",
"Second strategic action item",
"Third strategic action item"
],
"competitors": [
{
"name": "Competitor A",
"positioning": "Their market position",
"pricing": "Their pricing model",
"social_proof": "Their trust signals",
"content": "Their content approach"
},
{
"name": "Competitor B",
"positioning": "Their market position",
"pricing": "Their pricing model",
"social_proof": "Their trust signals",
"content": "Their content approach"
}
]
}
url (string, required)The target website URL. Use the full URL including protocol.
date (string, required)The report generation date. Format: "Month DD, YYYY" (e.g., "March 1, 2026").
brand_name (string, required)The company or brand name. Used in competitor comparison table headers.
overall_score (integer, 0-100, required)The weighted average of all category scores. Calculate as:
overall_score = (content * 0.25) + (conversion * 0.20) + (seo * 0.20) + (competitive * 0.15) + (brand * 0.10) + (growth * 0.10)
executive_summary (string, required)A 2-4 sentence summary covering:
Keep it concise and impactful. This appears on the cover page right below the score gauge.
categories (object, required)Exactly 6 categories with their scores. The categories map to these evaluation areas:
| Category | What It Measures | Scoring Guidance | |---|---|---| | Content & Messaging | Copy quality, value proposition, headline clarity, CTA text, brand voice consistency | 80+: Clear, benefit-driven, specific. 60-79: Adequate but generic. <60: Vague, feature-focused, unclear | | Conversion Optimization | Social proof, form design, CTA placement, objection handling, urgency | 80+: Multiple proof types, optimized forms, clear CTAs. 60-79: Some elements present. <60: Missing critical elements | | SEO & Discoverability | Title tags, meta descriptions, headers, schema, internal linking, page speed | 80+: Fully optimized. 60-79: Mostly present with gaps. <60: Major issues or missing elements | | Competitive Positioning | Differentiation, pricing clarity, comparison content, market awareness | 80+: Clear positioning, comparison pages exist. 60-79: Some differentiation. <60: No clear positioning | | Brand & Trust | Design quality, trust badges, security indicators, professional appearance | 80+: Modern design, trust signals throughout. 60-79: Adequate design. <60: Outdated or unprofessional | | Growth & Strategy | Lead capture, email marketing, content strategy, acquisition channels | 80+: Multi-channel strategy in place. 60-79: Some channels active. <60: No clear growth strategy |
findings (array, required)An array of finding objects, each with severity and finding fields.
Severity levels:
Critical -- Directly losing revenue or customers. Fix immediately.High -- Significant impact on growth. Fix within 1-2 weeks.Medium -- Meaningful improvement opportunity. Fix within 1 month.Low -- Nice-to-have improvement. Fix when time allows.Writing effective findings:
Aim for 5-10 findings. Order from most to least severe.
quick_wins (array, required)3-5 action items that can be implemented within one week with minimal effort. Each should be a specific, actionable instruction.
Good quick win: "Rewrite the homepage headline from 'Welcome to Our Platform' to 'Cut Your Reporting Time by 75% -- Automated Analytics for Growth Teams'"
Bad quick win: "Improve the headline" (too vague)
medium_term (array, required)3-5 action items requiring 1-3 months to implement. These are more involved but have high impact.
strategic (array, required)3-5 action items requiring 3-6 months. These are foundational changes that require planning and sustained effort.
competitors (array, optional)Up to 3 competitor objects for the comparison table. If no competitor data is available, omit this field -- the script will skip the competitor section.
Save the assembled data as a temporary JSON file:
# Write the JSON data to a temporary file
cat > /tmp/report_data.json << 'JSONEOF'
{
... assembled JSON data ...
}
JSONEOF
Prerequisites check:
First, verify that reportlab is installed:
python3 -c "import reportlab" 2>/dev/null || pip3 install reportlab
Generate the report:
python3 scripts/generate_pdf_report.py /tmp/report_data.json "MARKETING-REPORT-<domain>.pdf"
Replace <domain> with the target website's domain name (without protocol or www), using hyphens instead of dots. For example:
example.com becomes MARKETING-REPORT-example-com.pdfmyapp.io becomes MARKETING-REPORT-myapp-io.pdfDemo mode (no arguments): Running the script without arguments generates a sample report with placeholder data:
python3 scripts/generate_pdf_report.py
# Creates: MARKETING-REPORT-sample.pdf
After generation, verify the PDF was created:
ls -la "MARKETING-REPORT-<domain>.pdf"
Report the file path and size to the user.
Remove the temporary JSON file:
rm /tmp/report_data.json
The generated PDF includes the following pages:
The PDF uses a professional color palette:
| Element | Color | Hex Code | |---|---|---| | Primary (headers, titles) | Dark Navy | #1B2A4A | | Accent (links, highlights) | Blue | #2D5BFF | | Highlight (attention) | Orange | #FF6B35 | | Success (high scores) | Green | #00C853 | | Warning (medium scores) | Amber | #FFB300 | | Danger (low scores, critical) | Red | #FF1744 | | Light background | Light Gray | #F5F7FA | | Body text | Dark Gray | #2C3E50 | | Secondary text | Medium Gray | #7F8C9B | | Borders | Light Border | #E0E6ED |
| Issue | Solution |
|---|---|
| ModuleNotFoundError: No module named 'reportlab' | Run pip3 install reportlab |
| Script produces empty PDF | Check that JSON data has all required fields |
| Score gauge not rendering | Ensure overall_score is a number 0-100 |
| Competitor table missing | Ensure competitors array has objects with name, positioning, pricing, social_proof, content fields |
| PDF is only 1 page | Check for JSON parsing errors -- run python3 -c "import json; json.load(open('/tmp/report_data.json'))" |
| Fonts look wrong | The script uses Helvetica (built into reportlab). No custom fonts needed. |
This skill works best when combined with other audit skills. The recommended workflow:
/market audit <url> -- Generates comprehensive audit data/market competitors <url> -- Adds competitor comparison data/market seo <url> -- Adds detailed SEO findings/market landing <url> -- Adds CRO analysis/market report-pdf <url> -- Compiles everything into a PDFThe PDF report skill will automatically look for output files from these skills and incorporate their data into the report JSON.
MARKETING-REPORT-<domain>.pdftesting
# Social Media Content Calendar & Generation You are the social media engine for `/market social <topic/url>`. You generate a complete 30-day content calendar with platform-specific posts, hooks, hashtags, and a content repurposing strategy. Every post is ready to publish or hand to a social media manager. ## When This Skill Is Invoked The user runs `/market social <topic/url>`. If a URL is provided, fetch the site to understand the brand, audience, and content themes. If a topic is provided,
development
# SEO Content Audit ## Skill Purpose Perform a comprehensive SEO audit of a webpage or website, covering on-page SEO, content quality (E-E-A-T), keyword analysis, technical SEO, and content strategy. This skill combines automated analysis via `scripts/analyze_page.py` with expert-level manual review to produce an actionable SEO audit document. ## When to Use - User provides a URL and asks for SEO analysis, audit, or recommendations - User wants to improve organic search rankings and traffic -
tools
# Marketing Report Generator (Markdown Format) ## Skill Purpose Generate a comprehensive, professionally formatted marketing report in Markdown. This skill compiles data from all previous audit and analysis results into a single, client-ready document with scores, findings, recommendations, and a prioritized action plan with revenue impact estimates. ## When to Use - User wants a full marketing report for a client or their own business - User has completed one or more audit skills and wants a
tools
# Client Proposal Generator for Marketing Services ## Skill Purpose Generate a professional, client-ready marketing services proposal. This skill produces a complete proposal document that positions the agency/consultant as the clear choice, frames pricing with anchoring and tiered options, and includes ROI projections to justify the investment. ## When to Use - User wants to create a proposal for a prospective marketing client - User has completed a discovery call and needs to formalize the e