Skills · Coding

PDF Marketing Report Generator

Unverified30/40

Originally by zubair-trabzada · MIT

Claude Code·UnknownFrontmatter could not be read
Cursor·UnknownWe have not crawled the repo tree, so we will not guess
Codex·UnknownWe have not crawled the repo tree, so we will not guess
Gemini CLI·UnknownThe spec defines no detection rule for Gemini
Copilot·UnknownWe have not crawled the repo tree, so we will not guess
npx agentalley add market-report-pdf

This command does not work yet — the CLI is still being built. Until then, use Raw in the reader below to take the file.

Who is stuck, and on what

The whole source

No sign-in, no blur, nothing truncated
market-report-pdf/SKILL.md349 lines13.7 KBRawView on GitHub
Frontmatter: no frontmatter — costs points on criterion B3.
1# PDF Marketing Report GeneratorA5No allowed-tools declared — no way to tell what this skill may touchB3Frontmatter: no frontmatter
2 
3## Skill Purpose
4Generate 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.
5 
6## When to Use
7- User wants a PDF version of the marketing report (not just Markdown)
8- User is preparing a deliverable for a client presentation
9- User asks for a "polished report", "client-ready report", or "PDF report"
10- User wants a visual report with charts and scores
11- Triggered by `/market report-pdf` or `/market report-pdf <domain>`
12 
13## When to Use PDF vs Markdown
14 
15| Format | Best For | Pros | Cons |
16|---|---|---|---|
17| **PDF** | Client presentations, email attachments, sales collateral | Professional appearance, consistent formatting, visual charts, printable | Harder to edit, requires Python script |
18| **Markdown** | Internal use, quick reference, iterative editing, version control | Easy to edit, readable in any editor, git-friendly | Less visually polished, no charts |
19 
20**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.
21 
22## How to Execute
23 
24### Step 1: Collect All Available Data
25Gather data from all previous skill runs. Check for these files in the project directory:
26 
27**Primary data sources:**
28- `MARKETING-AUDIT.md` -- Overall audit results
29- `LANDING-CRO.md` -- Landing page conversion analysis
30- `SEO-AUDIT.md` -- SEO findings
31- `BRAND-VOICE.md` -- Brand voice analysis
32- `COMPETITOR-ANALYSIS.md` -- Competitor comparison data
33- `FUNNEL-ANALYSIS.md` -- Funnel analysis
34- `SOCIAL-AUDIT.md` -- Social media audit
35- `EMAIL-AUDIT.md` -- Email marketing audit
36- `AD-AUDIT.md` -- Advertising audit
37 
38**If no previous data exists:**
391. Recommend the user run `/market audit <url>` first for the best results
402. If the user insists on generating a report without prior audits, analyze the provided URL directly and build the data structure from scratch
413. Use the analyze_page.py script to gather automated data: `python scripts/analyze_page.py <url>`
42 
43### Step 2: Build the JSON Data Structure
44The `scripts/generate_pdf_report.py` script expects a JSON file as input with this exact structure:
45 
46```json
47{
48 "url": "https://example.com",
49 "date": "March 1, 2026",
50 "brand_name": "Example Co",
51 "overall_score": 62,
52 "executive_summary": "A 2-4 sentence summary of the overall marketing health, key opportunities, and estimated revenue impact of implementing recommendations.",
53 "categories": {
54 "Content & Messaging": {
55 "score": 68,
56 "weight": "25%"
57 },
58 "Conversion Optimization": {
59 "score": 52,
60 "weight": "20%"
61 },
62 "SEO & Discoverability": {
63 "score": 74,
64 "weight": "20%"
65 },
66 "Competitive Positioning": {
67 "score": 48,
68 "weight": "15%"
69 },
70 "Brand & Trust": {
71 "score": 70,
72 "weight": "10%"
73 },
74 "Growth & Strategy": {
75 "score": 55,
76 "weight": "10%"
77 }
78 },
79 "findings": [
80 {
81 "severity": "Critical",
82 "finding": "Description of the most important finding"
83 },
84 {
85 "severity": "High",
86 "finding": "Description of a high-priority finding"
87 },
88 {
89 "severity": "Medium",
90 "finding": "Description of a medium-priority finding"
91 },
92 {
93 "severity": "Low",
94 "finding": "Description of a lower-priority finding"
95 }
96 ],
97 "quick_wins": [
98 "First quick win action item",
99 "Second quick win action item",
100 "Third quick win action item"
101 ],
102 "medium_term": [
103 "First medium-term action item",
104 "Second medium-term action item",
105 "Third medium-term action item"
106 ],
107 "strategic": [
108 "First strategic action item",
109 "Second strategic action item",
110 "Third strategic action item"
111 ],
112 "competitors": [
113 {
114 "name": "Competitor A",
115 "positioning": "Their market position",
116 "pricing": "Their pricing model",
117 "social_proof": "Their trust signals",
118 "content": "Their content approach"
119 },
120 {
121 "name": "Competitor B",
122 "positioning": "Their market position",
123 "pricing": "Their pricing model",
124 "social_proof": "Their trust signals",
125 "content": "Their content approach"
126 }
127 ]
128}
129```
130 
131### Step 3: Field-by-Field Data Assembly Guide
132 
133#### `url` (string, required)
134The target website URL. Use the full URL including protocol.
135 
136#### `date` (string, required)
137The report generation date. Format: "Month DD, YYYY" (e.g., "March 1, 2026").
138 
139#### `brand_name` (string, required)
140The company or brand name. Used in competitor comparison table headers.
141 
142#### `overall_score` (integer, 0-100, required)
143The weighted average of all category scores. Calculate as:
144```
145overall_score = (content * 0.25) + (conversion * 0.20) + (seo * 0.20) + (competitive * 0.15) + (brand * 0.10) + (growth * 0.10)
146```
147 
148#### `executive_summary` (string, required)
149A 2-4 sentence summary covering:
150- Current marketing health assessment
151- Top 1-2 most impactful findings
152- Estimated revenue impact of implementing recommendations
153- Recommended first step
154 
155Keep it concise and impactful. This appears on the cover page right below the score gauge.
156 
157#### `categories` (object, required)
158Exactly 6 categories with their scores. The categories map to these evaluation areas:
159 
160| Category | What It Measures | Scoring Guidance |
161|---|---|---|
162| 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 |
163| 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 |
164| 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 |
165| Competitive Positioning | Differentiation, pricing clarity, comparison content, market awareness | 80+: Clear positioning, comparison pages exist. 60-79: Some differentiation. <60: No clear positioning |
166| Brand & Trust | Design quality, trust badges, security indicators, professional appearance | 80+: Modern design, trust signals throughout. 60-79: Adequate design. <60: Outdated or unprofessional |
167| 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 |
168 
169#### `findings` (array, required)
170An array of finding objects, each with `severity` and `finding` fields.
171 
172**Severity levels:**
173- `Critical` -- Directly losing revenue or customers. Fix immediately.
174- `High` -- Significant impact on growth. Fix within 1-2 weeks.
175- `Medium` -- Meaningful improvement opportunity. Fix within 1 month.
176- `Low` -- Nice-to-have improvement. Fix when time allows.
177 
178**Writing effective findings:**
179- Be specific: "Homepage headline says 'Welcome to Our Platform'" not "Headline needs improvement"
180- Quantify impact: "Missing meta descriptions on 8 of 12 landing pages"
181- Reference benchmarks: "Page load time is 4.2s (benchmark: under 2s)"
182- Include evidence: "No testimonials found on homepage, pricing page, or signup page"
183 
184Aim for 5-10 findings. Order from most to least severe.
185 
186#### `quick_wins` (array, required)
1873-5 action items that can be implemented within one week with minimal effort. Each should be a specific, actionable instruction.
188 
189**Good quick win:** "Rewrite the homepage headline from 'Welcome to Our Platform' to 'Cut Your Reporting Time by 75% -- Automated Analytics for Growth Teams'"
190 
191**Bad quick win:** "Improve the headline" (too vague)
192 
193#### `medium_term` (array, required)
1943-5 action items requiring 1-3 months to implement. These are more involved but have high impact.
195 
196#### `strategic` (array, required)
1973-5 action items requiring 3-6 months. These are foundational changes that require planning and sustained effort.
198 
199#### `competitors` (array, optional)
200Up to 3 competitor objects for the comparison table. If no competitor data is available, omit this field -- the script will skip the competitor section.
201 
202### Step 4: Write the JSON File
203Save the assembled data as a temporary JSON file:
204 
205```bash
206# Write the JSON data to a temporary file
207cat > /tmp/report_data.json << 'JSONEOF'
208{
209 ... assembled JSON data ...
210}
211JSONEOF
212```
213 
214### Step 5: Invoke the PDF Generator Script
215 
216**Prerequisites check:**
217First, verify that `reportlab` is installed:
218```bash
219python3 -c "import reportlab" 2>/dev/null || pip3 install reportlab
220```
221 
222**Generate the report:**
223```bash
224python3 scripts/generate_pdf_report.py /tmp/report_data.json "MARKETING-REPORT-<domain>.pdf"
225```
226 
227Replace `<domain>` with the target website's domain name (without protocol or www), using hyphens instead of dots. For example:
228- `example.com` becomes `MARKETING-REPORT-example-com.pdf`
229- `myapp.io` becomes `MARKETING-REPORT-myapp-io.pdf`
230 
231**Demo mode (no arguments):**
232Running the script without arguments generates a sample report with placeholder data:
233```bash
234python3 scripts/generate_pdf_report.py
235# Creates: MARKETING-REPORT-sample.pdf
236```
237 
238### Step 6: Verify the Output
239After generation, verify the PDF was created:
240```bash
241ls -la "MARKETING-REPORT-<domain>.pdf"
242```
243 
244Report the file path and size to the user.
245 
246### Step 7: Clean Up
247Remove the temporary JSON file:
248```bash
249rm /tmp/report_data.json
250```
251 
252## PDF Report Contents
253 
254The generated PDF includes the following pages:
255 
256### Page 1: Cover Page
257- Report title: "Marketing Audit Report"
258- Target URL
259- Generation date
260- Overall score gauge (circular visualization with color coding)
261- Grade letter (A+ through F)
262- Executive summary paragraph
263 
264### Page 2: Score Breakdown
265- Horizontal bar chart showing all 6 category scores with color coding
266- Score table with category names, scores, weights, and status labels
267- Color coding: Green (80+), Blue (60-79), Yellow (40-59), Red (<40)
268 
269### Page 3: Key Findings
270- Findings table with severity labels and descriptions
271- Color-coded severity indicators (Critical = red, High = orange, Medium = yellow, Low = blue)
272- Findings ordered from most to least severe
273 
274### Page 4: Prioritized Action Plan
275- Quick Wins section (This Week)
276- Medium-Term section (1-3 Months)
277- Strategic section (3-6 Months)
278- Numbered action items in each tier
279 
280### Page 5: Competitive Landscape (if competitor data provided)
281- Comparison table with client vs up to 3 competitors
282- Rows: Positioning, Pricing, Social Proof, Content
283 
284### Final Page: Methodology
285- Scoring methodology explanation
286- Category weights and measurement criteria
287- Footer: "Generated by AI Marketing Suite for Claude Code"
288 
289## Color Scheme
290 
291The PDF uses a professional color palette:
292 
293| Element | Color | Hex Code |
294|---|---|---|
295| Primary (headers, titles) | Dark Navy | #1B2A4A |
296| Accent (links, highlights) | Blue | #2D5BFF |
297| Highlight (attention) | Orange | #FF6B35 |
298| Success (high scores) | Green | #00C853 |
299| Warning (medium scores) | Amber | #FFB300 |
300| Danger (low scores, critical) | Red | #FF1744 |
301| Light background | Light Gray | #F5F7FA |
302| Body text | Dark Gray | #2C3E50 |
303| Secondary text | Medium Gray | #7F8C9B |
304| Borders | Light Border | #E0E6ED |
305 
306## Score-to-Color Mapping
307- 80-100: Green (#00C853) -- Strong performance
308- 60-79: Blue (#2D5BFF) -- Solid with room to improve
309- 40-59: Amber (#FFB300) -- Needs attention
310- 0-39: Red (#FF1744) -- Critical issues
311 
312## Troubleshooting
313 
314| Issue | Solution |
315|---|---|
316| `ModuleNotFoundError: No module named 'reportlab'` | Run `pip3 install reportlab` |
317| Script produces empty PDF | Check that JSON data has all required fields |
318| Score gauge not rendering | Ensure `overall_score` is a number 0-100 |
319| Competitor table missing | Ensure `competitors` array has objects with `name`, `positioning`, `pricing`, `social_proof`, `content` fields |
320| PDF is only 1 page | Check for JSON parsing errors -- run `python3 -c "import json; json.load(open('/tmp/report_data.json'))"` |
321| Fonts look wrong | The script uses Helvetica (built into reportlab). No custom fonts needed. |
322 
323## Integration with Other Skills
324 
325This skill works best when combined with other audit skills. The recommended workflow:
326 
3271. Run `/market audit <url>` -- Generates comprehensive audit data
3282. Run `/market competitors <url>` -- Adds competitor comparison data
3293. Run `/market seo <url>` -- Adds detailed SEO findings
3304. Run `/market landing <url>` -- Adds CRO analysis
3315. Run `/market report-pdf <url>` -- Compiles everything into a PDF
332 
333The PDF report skill will automatically look for output files from these skills and incorporate their data into the report JSON.
334 
335## Output
336- **File:** `MARKETING-REPORT-<domain>.pdf`
337- **Location:** Project root directory
338- **Size:** Typically 200KB-500KB depending on content volume
339- **Pages:** 5-7 pages depending on whether competitor data and additional sections are included
340 
341## Key Principles
342- The PDF report is the most client-facing deliverable in the toolkit. Quality matters.
343- Always verify the JSON data is complete and accurate before generating. Garbage in, garbage out.
344- Use the PDF for initial client impressions and sales conversations. Follow up with the more detailed Markdown report if the client engages.
345- Every score should be justifiable. If a client asks "why did I get a 52 in Conversion Optimization?", the findings should provide clear evidence.
346- Round scores to whole numbers. Decimals imply false precision.
347- Keep the executive summary tight -- 2-4 sentences maximum. Clients skim cover pages.
348- If generating for a prospect (not yet a client), the report serves as a sales tool. Make the opportunities compelling and the action plan achievable.
349 

Reviews

Installed this one?Write the first review and take the Trailblazer badge.

Reviews only open after a real install, so this is empty — and we leave it empty rather than invent one.

Alternatives

Also in Coding