- name:
- meta-reporting
- description:
- Use this skill when analyzing or reporting Meta Ads performance — pulls live Meta insights, reads them like an operator (leading vs vanity signals), and generates a shareable branded HTML dashboard. Triggers: Meta report, Meta dashboard, Meta performance, analyze Meta ads, cost per lead, CPL report, Meta account audit, weekly Meta report, client dashboard, ad spend report.
Meta Ads Reporting and Dashboards
Turn raw Meta numbers into a decision. This skill pulls live performance, analyzes it against the operating system in the meta-ads skill, and renders a clean, client-ready dashboard.
What this covers
- Performance analysis - pull live spend, leads, CPL, CTR, CPM, reach at account and campaign level, then read it like an operator (leading vs vanity signals).
- Reporting - weekly or period-over-period rollups: what changed, what is working, what to fix first.
- Dashboards - a self-contained HTML dashboard branded with the Frontal logo, that you open in a browser or send to a client.
Scripts
Run from .claude/skills/meta-ads/scripts/ (shared client + .env) unless noted.
| Task | Command |
|---|---|
| Account snapshot (all KPIs, one call) | python account_overview.py |
| Campaign performance table | python get_campaign_performance.py --date-preset last_30d |
| Pull active ad copy (for a creative/audit read) | python get_active_ads_copy.py |
| Branded HTML dashboard | cd ../../meta-reporting/scripts && python generate_dashboard.py --date-preset last_30d |
The dashboard (with your logo)
generate_dashboard.py writes a shareable HTML file: KPI tiles (spend, leads, cost per lead, CTR, CPM, reach) plus a per-campaign table, sorted by spend.
cd .claude/skills/meta-reporting/scripts
python generate_dashboard.py # last 30 days -> meta-dashboard.html
python generate_dashboard.py --date-preset last_7d --out weekly.html
It ships with the Frontal logo by default. It's your dashboard - rebrand it:
- Set
DASHBOARD_LOGO_URLandDASHBOARD_BRAND_NAMEin.env, or - Pass
--logo https://yourbrand.com/logo.png --brand "Your Brand".
No image API, no external service - just the Meta API and Python. Open it with open meta-dashboard.html or attach the file to an email.
How to analyze (not just report)
Reporting is describing the numbers. Analysis is deciding what to do. Always:
- Lead with the outcome metric, not vanity. Cost per lead and lead volume first. Impressions, reach, and CPM are context, never the headline. (See /skill/ads-measurement-scorecard.)
- Separate leading from lagging signals. CTR and CPM move first; CPL and lead volume confirm. A rising CPM with flat CPL is fine; a rising CPL is the alarm.
- Read at the right altitude. Account -> campaign -> ad set -> ad. Find the level where the money is leaking before recommending a fix.
- Tie every number to an action. "CPL up 40% week over week, driven by the retargeting campaign fatiguing (frequency 4.2). Action: rotate creative, cap frequency." Not "CPL went up."
- Never fabricate a benchmark. If you do not have the account's own history, say so. Use the B2B benchmarks in
meta-ads/knowledge-base/optimization-playbook.mdas reference ranges, labeled as such.
Output standards
- Dashboards are client-ready: clean, branded, no jargon, no source citations.
- Written reports lead with wins, then concerns, with week-over-week numbers at the campaign level.
- Follow /skill/ads-writing-style for everything you write. No AI slop, no em dashes, no emoji.
