@ads-repo/meta-ads-dashboard
v1.0.3
Published
Generate a Meta Ads dashboard from your Google Sheet — drop-in Claude Code skill
Maintainers
Readme
Meta Ads Library Dashboard
Generate a self-contained, interactive HTML dashboard from Meta Ad Library data stored in a public Google Sheet. The output is a single HTML file with embedded data, charts, filters, and tabs that opens directly in your browser — no server, no database, no API keys required.
What you get
- One HTML file with all data embedded (gzip+base64 compressed for fast load)
- Sidebar tabs: How to Read, Top-Level View, Daily Check, Top Performers
- Interactive charts (Chart.js) with country / format / link caption filters
- Heatmaps for country, creative format, link caption, platform, gender, age
- Daily timeline for daily-scrape sheets
- Ad Library browser with its own filters
- adsrepo.com brand styling (Raleway font, orange accent #ff5722)
- Responsive layout (desktop / tablet / phone)
Requirements
- Node.js 18+ (download)
- Public Google Sheet with Meta Ad Library scraped data
- Sharing: "Anyone with the link can view"
- Format: standard 70-column layout from the Meta Ads Library Scraper script
- Tabs are auto-discovered; one-time and daily scrapes are auto-classified
Installation
There are two ways to use this skill — pick whichever fits your workflow.
Option A — Claude Code (recommended)
If you use Claude Code, the bundled install.sh does everything for you:
unzip meta-dashboard-adlib.zip
cd meta-dashboard-adlib
./install.shThe installer asks whether to install globally (~/.claude/, available in every session) or per-project (./.claude/ in the current directory), then:
- Copies the skill into
<scope>/.claude/skills/meta-dashboard-adlib/ - Copies the slash command into
<scope>/.claude/commands/meta-dashboard-adlib.md - Runs
npm installinside the skill folder - Verifies Node.js 18+ is available and warns on conflicts
After it finishes, restart Claude Code (so the slash command is loaded), then in any session type:
/meta-dashboard-adlib…or just say "create a meta ads dashboard from this sheet: [URL]" — Claude will auto-trigger the skill.
Manual install (if you'd rather not run the script)
- Move
meta-dashboard-adlib/to~/.claude/skills/(or<project>/.claude/skills/) - Move
meta-dashboard-adlib/commands/meta-dashboard-adlib.mdto the matching.claude/commands/directory - Run
npm installinside the skill folder - Restart Claude Code
Option B — Standalone CLI (no Claude Code)
If you just want to generate the dashboard without Claude Code:
cd meta-dashboard-adlib
npm install
npm run generate -- "https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/edit"Or directly:
node scripts/generate-dashboard.js "https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/edit"What the script does
- Parse the sheet URL and discover all tabs
- Classify each data tab as
one-timeordailybased on Scraped Period values - Aggregate ads per Page Name
- Trim daily data to the last 60 days (for performance)
- Generate a single HTML file at
content/dashboards/YYYYMMDD-meta-dashboard-adlib.html - Open the dashboard in your default browser
Output
content/dashboards/
└── 20260501-meta-dashboard-adlib.html # ~5–15 MB self-contained fileThe file works fully offline once generated. You can email it, host it on a static server, or open it locally.
Troubleshooting
| Problem | Fix |
|---|---|
| Failed to fetch sheet | Confirm the sheet is shared as "Anyone with the link can view" |
| No data tabs found | Verify your sheet has a column named "Page Name" and uses the standard 70-column scraper format |
| Wrong tab used | All tabs containing "Page Name" are auto-detected; remove or rename non-data tabs if needed |
| Browser doesn't open | The HTML is still saved — open content/dashboards/*.html manually |
Metrics glossary
The dashboard's "How to Read" tab includes worked examples for every metric:
- Total Reach — cumulative reach since each ad was first turned on
- Est. Period Reach — reach earned only during the scraped period (
Avg Daily Reach × days active in period) - Country Breakdown — multi-country ads split reach equally; single-country ads attribute precisely
- Avg Ad Lifespan — average days an ad runs before being turned off
- Incremental Reach (daily scrapes only) — today's total reach minus yesterday's
License
Copyright (c) 2026 Tomas Kliment / adsrepo.com. All rights reserved. See LICENSE for terms.
