# Meta Ads Performance Presentation — Porter MCP Prompt Copy everything below the line into a fresh chat with Porter MCP connected. --- Build me a client-ready Meta Ads performance presentation as a .pptx file. I want an editorial/NYT/Stripe aesthetic — serif display type, lots of whitespace, dark background, almost no chrome. Same quality bar as a magazine feature, not a SaaS dashboard. Fill in these before running: - Client account name in Porter: `[CLIENT ACCOUNT NAME]` - Reporting period: `[DATE RANGE — e.g. "Q1 2026" or "last 90 days"]` - Output filename: `[FILENAME.pptx]` ## Step 1 — Pull data from Porter MCP 1. `list_accounts` for facebook-ads. Find the account matching the name above (fuzzy match is fine; confirm with me if ambiguous). Use the full account object in every later call. 2. `get_blend_id` once, reuse everywhere. 3. Run these four queries for the date range: - **Overall KPIs** (one row): `facebook_ads_spend`, `facebook_ads_impressions`, `facebook_ads_reach`, `facebook_ads_frequency`, `facebook_ads_cpm`, `facebook_ads_clicks`, `facebook_ads_inline_link_clicks`, `facebook_ads_ctr`, `facebook_ads_inline_link_click_ctr`, `facebook_ads_cpc`, `facebook_ads_cpc_link`, `facebook_ads_purchase`, `facebook_ads_value_omni_purchase`, `facebook_ads_purchase_roas_purchase` - **Monthly trend**: add `facebook_ads_year_month` as a dimension, same metrics - **Campaigns**: `facebook_ads_campaign_name`, `facebook_ads_objective` + `facebook_ads_spend`, `facebook_ads_impressions`, `facebook_ads_clicks`, `facebook_ads_ctr`, `facebook_ads_cpm`, `facebook_ads_purchase`, `facebook_ads_value_omni_purchase`, `facebook_ads_purchase_roas_purchase` - **Platforms**: `facebook_ads_publisher_platform` + `facebook_ads_spend`, `facebook_ads_impressions`, `facebook_ads_clicks`, `facebook_ads_ctr`, `facebook_ads_purchase`, `facebook_ads_value_omni_purchase` If the date range returns zero rows, fall back to the most recent 3 complete months that have data and tell me you did. ## Step 2 — Anonymize for template use - Replace the real client name with "Brand Name" on the cover and in deck metadata - Replace gendered or identifying campaign segments with neutral labels ("Segment A", "Segment B", "geo-targeted", "paid social"). Keep the shape of each campaign name — objective prefix, count, order — so the story stays intact. - Keep numeric values real (don't placeholder them — real numbers make the template credible) ## Step 3 — Build the deck Before writing any code, read `/mnt/skills/public/pptx/SKILL.md` and `/mnt/skills/public/pptx/pptxgenjs.md`. Use pptxgenjs, `LAYOUT_WIDE` (13.3 × 7.5"). Write to `/home/claude/`, render to PDF + JPG to verify, fix any overlap/overflow defects, then present the file. ### Palette (exact values) - Background `0A0A0B`, hairline `57544E` - Ink `F5F2EB` (warm off-white), dim `A09B92`, muted `57544E` - Amber accent `E8B96A` (use once or twice per slide max — on the eyebrow label, a section number, or a recommendation marker) - Red `C85A5A` for negative ROAS, green `7FA97F` for positive ### Typography - Georgia for all display type, headlines, and numbers - Calibri for top-meta chrome, page numbers, and data labels - Two weights only: regular and italic. No bold anywhere. - Cover title: 96pt Georgia. Executive-summary lede stat: 120pt. Section dividers: 72pt. Detail-slide headlines: 44pt two-liners. Stat block values: 36pt. Sublabels: 12pt italic. ### Structural rules (keep these consistent across every slide) - Top-meta line: 9pt Calibri, muted color, left = section name uppercase, right = period or section number. That's the entire header. No underline accent, no colored bar. - Page numbers: 8pt Calibri in bottom corners ("Porter Metrics" bottom-left, "N / 10" bottom-right). - Hairlines (0.008" thin rectangles) are the only divider. Never accent bars, never card backgrounds, never shadows. - Generous whitespace. Slides should feel under-filled. ### Slide-by-slide structure (10 slides) 1. **Cover** — small eyebrow "PORTER METRICS · CLIENT REPORT", massive Georgia "Brand Name", italic "Meta Ads performance, [period]" subtitle, hairline, date range, "Prepared by Porter Metrics · Data via Meta Ads API", tiny month stamp bottom-right. 2. **Executive summary** — one huge lede stat (total spend at 120pt), then an italic sentence that reveals revenue and ROAS ("returning $X in revenue, for a ROAS of Y.x" — ROAS colored red if under 1.0x). Hairline. Three short monthly column notes below with amber uppercase month labels. 3. **Section divider 1** — small amber "PART 1 OF 3", muted kicker "Visibility", big Georgia headline "Who saw the ads", hairline. Mostly whitespace. 4. **Visibility detail** — editorial two-line headline framing the story ("X impressions, reaching Y people — over half in [top month] alone."). Hairline. Four stat blocks across the width: Impressions, Reach, Frequency, CPM. Each block = tiny hairline on top, uppercase label, 36pt value, italic sublabel. No chart on this slide. 5. **Section divider 2** — "Engagement / Did people click". 6. **Engagement detail** — two-line headline (italic first line, roman punchline). Hairline. Left: stripped-down CTR line chart (no gridlines, no Y-axis labels, no legend, just month names and point labels as percentages — pass fractions like 0.0061 with format "0.00%"). Right: dictionary-style stat list with hairline separators — Clicks, CTR, CPC, Link clicks. 7. **Section divider 3** — "Conversion / Did they buy". 8. **Conversion detail** — two-line headline (setup italic, punchline roman). Hairline. Four stat blocks: Purchases, Revenue, Spend, ROAS (ROAS value in red if under 1.0x, sublabel reads "Target: 1.00x"). 9. **Breakdown: Campaigns × Platforms** — headline 34pt (smaller than other slides to leave room). Two columns under a shared hairline. Left: campaign list typeset like a table-of-contents — campaign name in Georgia, tiny uppercase objective code in Calibri below each. Spend and ROAS right-aligned. Campaigns that never spent: muted color, italic, "—" and "Not run". Right: platform section. Two platforms stacked (Facebook above Instagram), each with platform name, big 40pt purchase count, italic "purchase(s)" next to it, small support line showing "$X revenue on $Y spend · Z.ZZx" with ROAS colored green/red. 10. **Recommendations** — big headline "Three moves for [next period]." Hairline. Three rows. Each row: amber italic roman numeral (I., II., III.) at 28pt on the left, row title in Georgia 19pt, body text in Calibri 12pt muted color below. Wording ideas: - "Activate the dormant sales campaigns." - "Rebalance Instagram spend." - "Diagnose the [weakest month] drop before scaling." **Narrative rule**: every detail slide's headline is a pull-quote sentence that tells the story ("6.4 million impressions, reaching 2.3 million people — over half in January alone."). The numbers support the sentence; the sentence is the point. ### Known pitfalls to avoid (learned the hard way) - pptxgenjs value axis format "0.00%" multiplies by 100 — pass fractions, not percentages. - Stat value font size over 36pt in a 4-column layout across 11.9" will wrap dollar amounts like $18,019. Keep values at 36pt max with ~2.3" column width. - Two-line 44pt headlines need at least 0.9–1.0" between Y positions to avoid descender/ascender collisions. - Skip ROUNDED_RECTANGLE with any accent overlays; just don't use cards or accents at all in this design. - After each render, view every slide image and fix any real defect (overflow, overlap, missing data) before presenting. Don't loop on cosmetic tweaks. Once the deck looks clean on all 10 slides, present the file.