$npx -y skills add zubair-trabzada/ai-ads-claude --skill ads-report-pdfProfessional PDF Ad Strategy Report Generator
| 1 | # PDF Ad Strategy Report Generator |
| 2 | |
| 3 | ## Skill Purpose |
| 4 | Generate a polished, client-ready PDF advertising strategy report using the ReportLab Python library. This skill scans the current working directory for all ads output files, extracts scores, audience personas, campaign structure, budget allocation, and competitive intelligence, compiles them into structured JSON, and produces a professional PDF with a cover page featuring an Ad Readiness Score gauge, audience persona cards, campaign funnel diagram, budget allocation chart, competitive positioning map, creative direction summary, and a prioritized 90-day action plan. |
| 5 | |
| 6 | ## When to Use |
| 7 | - User wants a PDF version of the ad strategy report (not just Markdown) |
| 8 | - User is preparing a deliverable for a client or stakeholder presentation |
| 9 | - User asks for a "polished report", "client-ready report", or "PDF report" |
| 10 | - User wants a visual report with charts, scores, and professional formatting |
| 11 | - Triggered by `/ads report-pdf` or `/ads report-pdf <business name>` |
| 12 | |
| 13 | ## When to Use PDF vs Markdown |
| 14 | |
| 15 | | Format | Best For | Pros | Cons | |
| 16 | |--------|---------|------|------| |
| 17 | | **PDF** | Client presentations, email attachments, proposals, sales collateral | Professional appearance, charts and gauges, printable, consistent formatting | Requires Python script, harder to edit | |
| 18 | | **Markdown** | Internal use, quick reference, iterative editing, version control | Easy to edit, fast to generate, git-friendly | Less visually polished, no charts | |
| 19 | |
| 20 | **Rule of thumb:** If the report goes to a client, prospect, or executive, use PDF. If it is for internal use or further editing, use Markdown. |
| 21 | |
| 22 | ## How to Execute |
| 23 | |
| 24 | ### Step 1: Check for PDF Generation Script |
| 25 | |
| 26 | First, check if the dedicated PDF generation script exists: |
| 27 | |
| 28 | ```bash |
| 29 | ls ~/.claude/skills/ads/scripts/generate_ads_pdf.py 2>/dev/null |
| 30 | ``` |
| 31 | |
| 32 | **If the script exists:** Use it directly (skip to Step 4). |
| 33 | **If the script does not exist:** Generate the PDF inline using ReportLab (follow all steps). |
| 34 | |
| 35 | ### Step 2: Collect All Available Data |
| 36 | |
| 37 | Scan the current working directory for all ads skill outputs. Search for these files: |
| 38 | |
| 39 | **Primary data sources (search for all of these):** |
| 40 | - `ADS-STRATEGY-*.md` — Full strategy report (composite scores, all sections) |
| 41 | - `ADS-AUDIENCE*.md` — Audience personas, targeting parameters |
| 42 | - `ADS-COPY-*.md` — Platform-specific ad copy |
| 43 | - `ADS-HOOKS*.md` — Scroll-stopping hooks |
| 44 | - `ADS-CREATIVE-BRIEF*.md` — Creative briefs for all formats |
| 45 | - `ADS-VIDEO-SCRIPTS*.md` — Video ad scripts |
| 46 | - `ADS-FUNNEL*.md` — Campaign funnel architecture |
| 47 | - `ADS-BUDGET*.md` — Budget allocation plan |
| 48 | - `ADS-COMPETITORS*.md` — Competitive intelligence |
| 49 | - `ADS-KEYWORDS*.md` — Keyword strategy (Google Ads) |
| 50 | - `ADS-TESTING-PLAN*.md` — A/B testing plan |
| 51 | - `ADS-LANDING*.md` — Landing page audit |
| 52 | - `ADS-AUDIT*.md` — Performance audit results |
| 53 | |
| 54 | **Search command:** |
| 55 | ```bash |
| 56 | ls ADS-*.md 2>/dev/null |
| 57 | ``` |
| 58 | |
| 59 | **For each file found**, extract: |
| 60 | - Scores and ratings |
| 61 | - Key findings and recommendations |
| 62 | - Audience personas and segments |
| 63 | - Campaign structure details |
| 64 | - Budget allocations and projections |
| 65 | - Competitive positioning data |
| 66 | - Top ad copy and hooks |
| 67 | - Action items and timelines |
| 68 | |
| 69 | ### Step 3: Structure the JSON Data |
| 70 | |
| 71 | Compile all extracted data into a structured JSON object for the PDF generator: |
| 72 | |
| 73 | ```json |
| 74 | { |
| 75 | "report_metadata": { |
| 76 | "business_name": "[Business Name]", |
| 77 | "website_url": "[URL]", |
| 78 | "industry": "[Industry]", |
| 79 | "report_date": "[YYYY-MM-DD]", |
| 80 | "generated_by": "AI Ads Strategist" |
| 81 | }, |
| 82 | "ad_readiness_score": { |
| 83 | "composite_score": 0, |
| 84 | "audience_clarity": {"score": 0, "weight": 25, "findings": []}, |
| 85 | "creative_quality": {"score": 0, "weight": 20, "findings": []}, |
| 86 | "funnel_architecture": {"score": 0, "weight": 20, "findings": []}, |
| 87 | "competitive_position": {"score": 0, "weight": 15, "findings": []}, |
| 88 | "budget_efficiency": {"score": 0, "weight": 20, "findings": []} |
| 89 | }, |
| 90 | "audience_personas": [ |
| 91 | { |
| 92 | "name": "[Persona Name]", |
| 93 | "age_range": "[Age Range]", |
| 94 | "role_title": "[Role/Title]", |
| 95 | "pain_points": [], |
| 96 | "motivations": [], |
| 97 | "platforms": [], |
| 98 | "targeting_params": {} |
| 99 | } |
| 100 | ], |
| 101 | "campaign_structure": { |
| 102 | "funnel_stages": [], |
| 103 | "campaigns": [], |
| 104 | "retargeting_flows": [] |
| 105 | }, |
| 106 | "budget_allocation": { |
| 107 | "total_monthly_budget": 0, |
| 108 | "platform_split": {}, |
| 109 | "funnel_stage_split": {}, |
| 110 | "projected_metrics": { |
| 111 | "estimated_impressions": 0, |
| 112 | "estimated_clicks": 0, |
| 113 | "estimated_conversions": 0, |
| 114 | "projected_cpa": 0, |
| 115 | "projected_roas": 0 |
| 116 | } |
| 117 | }, |
| 118 | "competitive_intelligence": { |
| 119 | "competitors_analyzed": [], |
| 120 | "positioning_gaps": [], |
| 121 | "messaging_opportunities": [] |
| 122 | }, |
| 123 | "top_ad_copy": { |
| 124 | "best_hooks": [], |
| 125 | "top_headlines": [], |
| 126 | "best_ctas": |