{"_id":"@ads-repo/meta-ads-dashboard","_rev":"5-b83d8171291978cafe168ee20060d630","name":"@ads-repo/meta-ads-dashboard","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.0":{"name":"@ads-repo/meta-ads-dashboard","version":"1.0.0","keywords":["claude-code","skill","meta-ads","dashboard","adsrepo"],"author":{"name":"adsrepo"},"license":"MIT","_id":"@ads-repo/meta-ads-dashboard@1.0.0","maintainers":[{"name":"adsrepo","email":"tomas@adsrepo.com"}],"homepage":"https://adsrepo.com/products/meta-ads-dashboard","bin":{"install-meta-ads-dashboard":"install-to-claude.js"},"dist":{"shasum":"f9b6bc2079599263da93476a7b80ae23151938cf","tarball":"https://registry.npmjs.org/@ads-repo/meta-ads-dashboard/-/meta-ads-dashboard-1.0.0.tgz","fileCount":6,"integrity":"sha512-yfbYZP7EaTCZVQs6/z0uWCWbvg3b3Zx5Saai4PgLVYrr3arGkUyiFPn7TBfX1XEAtoOrFxcznhJcXy3iLmYVgw==","signatures":[{"sig":"MEUCIQDyhBRcL9FHSSTVkYwQ9u7znGt4TZxtnl3ZLOrw9LD6hgIgJ7t/cOO2ARfHoj9LxMk1mkfHuvkuVKpSduHqaIjQB7k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":340591},"engines":{"node":">=18"},"gitHead":"078f9bb11dbe216b081ac5de386ecfe63c76e11e","scripts":{"generate":"node scripts/generate-dashboard.js","postinstall":"node ./install-to-claude.js"},"_npmUser":{"name":"adsrepo","email":"tomas@adsrepo.com"},"_npmVersion":"10.9.3","description":"Generate a Meta Ads dashboard from your Google Sheet — drop-in Claude Code skill","directories":{},"_nodeVersion":"22.19.0","dependencies":{"csv-parse":"^6.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/meta-ads-dashboard_1.0.0_1779199155981_0.6283108200742309","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@ads-repo/meta-ads-dashboard","version":"1.0.1","keywords":["claude-code","skill","meta-ads","dashboard","adsrepo"],"author":{"name":"adsrepo"},"license":"SEE LICENSE IN LICENSE","_id":"@ads-repo/meta-ads-dashboard@1.0.1","maintainers":[{"name":"adsrepo","email":"tomas@adsrepo.com"}],"homepage":"https://adsrepo.com/products/meta-ads-dashboard","bin":{"install-meta-ads-dashboard":"install-to-claude.js"},"dist":{"shasum":"77b2c927c1f729b3a8ebdaa5f27b404e9f71326a","tarball":"https://registry.npmjs.org/@ads-repo/meta-ads-dashboard/-/meta-ads-dashboard-1.0.1.tgz","fileCount":7,"integrity":"sha512-FfybUj6fGxaQIjTFvhIOwVQnv0NuTzRmZpmDYRDjfDYuUXGMz839o08P6pFYxPpZqRhiFUL4VhW9yPXpNgV6qg==","signatures":[{"sig":"MEQCICF/NfavRUCK4zT/zMtNPn88KtM2OSIX7Qz3Rx5e6DBrAiAwI29o+YIhgE7e9O256AOyutxvAuVwLBi1W5BB7l/JmQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":341194},"engines":{"node":">=18"},"gitHead":"75bd60343fbe8e9cc5c716aed91623af7d28d177","scripts":{"generate":"node scripts/generate-dashboard.js","postinstall":"node ./install-to-claude.js"},"_npmUser":{"name":"adsrepo","email":"tomas@adsrepo.com"},"_npmVersion":"10.9.3","description":"Generate a Meta Ads dashboard from your Google Sheet — drop-in Claude Code skill","directories":{},"_nodeVersion":"22.19.0","dependencies":{"csv-parse":"^6.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/meta-ads-dashboard_1.0.1_1779715464665_0.7244548236664154","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@ads-repo/meta-ads-dashboard","version":"1.0.2","keywords":["claude-code","skill","meta-ads","dashboard","adsrepo"],"author":{"name":"adsrepo"},"license":"SEE LICENSE IN LICENSE","_id":"@ads-repo/meta-ads-dashboard@1.0.2","maintainers":[{"name":"adsrepo","email":"tomas@adsrepo.com"}],"homepage":"https://adsrepo.com/products/meta-ads-dashboard","bin":{"install-meta-ads-dashboard":"install-to-claude.js"},"dist":{"shasum":"0d60d472b6980a2246818c14fbd71d2c3f2b888b","tarball":"https://registry.npmjs.org/@ads-repo/meta-ads-dashboard/-/meta-ads-dashboard-1.0.2.tgz","fileCount":7,"integrity":"sha512-h541X/lWkKqQBiTKhKJ6Swt+eVIWo+mSE9FIU71SPJ/Tj9DqbHjIgRaWkL98CtF68uOdw5Xvx0PjROrjdMxAtA==","signatures":[{"sig":"MEUCIQCfuZ+rxltjR1xLYvoXYo/PMzJVG/6xlnMYm36EYb2VxQIgUY2jAcBxcraDbAgo8YUSrZXk8At7aE9Cfauz+d8dx/A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":341211},"engines":{"node":">=18"},"gitHead":"75bd60343fbe8e9cc5c716aed91623af7d28d177","scripts":{"generate":"node scripts/generate-dashboard.js","postinstall":"node ./install-to-claude.js"},"_npmUser":{"name":"adsrepo","email":"tomas@adsrepo.com"},"_npmVersion":"10.9.3","description":"Generate a Meta Ads dashboard from your Google Sheet — drop-in Claude Code skill","directories":{},"_nodeVersion":"22.19.0","dependencies":{"csv-parse":"^6.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/meta-ads-dashboard_1.0.2_1779715616858_0.4729535860702454","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@ads-repo/meta-ads-dashboard","version":"1.0.3","keywords":["claude-code","skill","meta-ads","dashboard","adsrepo"],"author":{"name":"adsrepo"},"license":"SEE LICENSE IN LICENSE","_id":"@ads-repo/meta-ads-dashboard@1.0.3","maintainers":[{"name":"adsrepo","email":"tomas@adsrepo.com"}],"homepage":"https://adsrepo.com/products/meta-ads-dashboard","bin":{"install-meta-ads-dashboard":"install-to-claude.js"},"dist":{"shasum":"1afd94780bc82c2d6abd7c455fbe966babfdabdd","tarball":"https://registry.npmjs.org/@ads-repo/meta-ads-dashboard/-/meta-ads-dashboard-1.0.3.tgz","fileCount":7,"integrity":"sha512-xmMuCOH706eGZjmRSUK/zyE30mhIln9VIyJuMSsns7ftMx6M0RLXpM5Uvw/OrolU0rYmcTZb2+dQfbLuN3P18A==","signatures":[{"sig":"MEQCIE0U24kRueeYz//WLFLL5KVD83+5v1zS7eHQ7XLVF689AiAaQ5wU7G3VNp8+DSCqvMDkkbIVPtsxYrRvi9CPE8vL1g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":341208},"engines":{"node":">=18"},"gitHead":"75bd60343fbe8e9cc5c716aed91623af7d28d177","scripts":{"generate":"node scripts/generate-dashboard.js","postinstall":"node ./install-to-claude.js"},"_npmUser":{"name":"adsrepo","email":"tomas@adsrepo.com"},"_npmVersion":"10.9.3","description":"Generate a Meta Ads dashboard from your Google Sheet — drop-in Claude Code skill","directories":{},"_nodeVersion":"22.19.0","dependencies":{"csv-parse":"^6.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/meta-ads-dashboard_1.0.3_1779718382295_0.8153487520544456","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-05-19T13:59:15.881Z","modified":"2026-08-12T16:08:36.822Z","1.0.0":"2026-05-19T13:59:16.121Z","1.0.1":"2026-05-25T13:24:24.823Z","1.0.2":"2026-05-25T13:26:57.040Z","1.0.3":"2026-05-25T14:13:02.444Z"},"author":{"name":"adsrepo"},"license":"SEE LICENSE IN LICENSE","homepage":"https://adsrepo.com/products/meta-ads-dashboard","keywords":["claude-code","skill","meta-ads","dashboard","adsrepo"],"description":"Generate a Meta Ads dashboard from your Google Sheet — drop-in Claude Code skill","maintainers":[{"email":"tomas@adsrepo.com","name":"adsrepo"},{"email":"denis@adsrepo.com","name":"denis-adsrepo"}],"readme":"# Meta Ads Library Dashboard\n\nGenerate 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.\n\n## What you get\n\n- **One HTML file** with all data embedded (gzip+base64 compressed for fast load)\n- Sidebar tabs: How to Read, Top-Level View, Daily Check, Top Performers\n- Interactive charts (Chart.js) with country / format / link caption filters\n- Heatmaps for country, creative format, link caption, platform, gender, age\n- Daily timeline for daily-scrape sheets\n- Ad Library browser with its own filters\n- adsrepo.com brand styling (Raleway font, orange accent #ff5722)\n- Responsive layout (desktop / tablet / phone)\n\n## Requirements\n\n- **Node.js 18+** ([download](https://nodejs.org))\n- **Public Google Sheet** with Meta Ad Library scraped data\n  - Sharing: \"Anyone with the link can view\"\n  - Format: standard 70-column layout from the Meta Ads Library Scraper script\n  - Tabs are auto-discovered; one-time and daily scrapes are auto-classified\n\n## Installation\n\nThere are two ways to use this skill — pick whichever fits your workflow.\n\n### Option A — Claude Code (recommended)\n\nIf you use [Claude Code](https://claude.com/claude-code), the bundled `install.sh` does everything for you:\n\n```bash\nunzip meta-dashboard-adlib.zip\ncd meta-dashboard-adlib\n./install.sh\n```\n\nThe installer asks whether to install **globally** (`~/.claude/`, available in every session) or **per-project** (`./.claude/` in the current directory), then:\n\n1. Copies the skill into `<scope>/.claude/skills/meta-dashboard-adlib/`\n2. Copies the slash command into `<scope>/.claude/commands/meta-dashboard-adlib.md`\n3. Runs `npm install` inside the skill folder\n4. Verifies Node.js 18+ is available and warns on conflicts\n\nAfter it finishes, **restart Claude Code** (so the slash command is loaded), then in any session type:\n\n```\n/meta-dashboard-adlib\n```\n\n…or just say \"create a meta ads dashboard from this sheet: [URL]\" — Claude will auto-trigger the skill.\n\n#### Manual install (if you'd rather not run the script)\n\n1. Move `meta-dashboard-adlib/` to `~/.claude/skills/` (or `<project>/.claude/skills/`)\n2. Move `meta-dashboard-adlib/commands/meta-dashboard-adlib.md` to the matching `.claude/commands/` directory\n3. Run `npm install` inside the skill folder\n4. Restart Claude Code\n\n### Option B — Standalone CLI (no Claude Code)\n\nIf you just want to generate the dashboard without Claude Code:\n\n```bash\ncd meta-dashboard-adlib\nnpm install\nnpm run generate -- \"https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/edit\"\n```\n\nOr directly:\n\n```bash\nnode scripts/generate-dashboard.js \"https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/edit\"\n```\n\n## What the script does\n\n1. Parse the sheet URL and discover all tabs\n2. Classify each data tab as `one-time` or `daily` based on Scraped Period values\n3. Aggregate ads per Page Name\n4. Trim daily data to the last 60 days (for performance)\n5. Generate a single HTML file at `content/dashboards/YYYYMMDD-meta-dashboard-adlib.html`\n6. Open the dashboard in your default browser\n\n## Output\n\n```\ncontent/dashboards/\n└── 20260501-meta-dashboard-adlib.html   # ~5–15 MB self-contained file\n```\n\nThe file works fully offline once generated. You can email it, host it on a static server, or open it locally.\n\n## Troubleshooting\n\n| Problem | Fix |\n|---|---|\n| `Failed to fetch sheet` | Confirm the sheet is shared as \"Anyone with the link can view\" |\n| `No data tabs found` | Verify your sheet has a column named \"Page Name\" and uses the standard 70-column scraper format |\n| `Wrong tab used` | All tabs containing \"Page Name\" are auto-detected; remove or rename non-data tabs if needed |\n| Browser doesn't open | The HTML is still saved — open `content/dashboards/*.html` manually |\n\n## Metrics glossary\n\nThe dashboard's \"How to Read\" tab includes worked examples for every metric:\n\n- **Total Reach** — cumulative reach since each ad was first turned on\n- **Est. Period Reach** — reach earned only during the scraped period (`Avg Daily Reach × days active in period`)\n- **Country Breakdown** — multi-country ads split reach equally; single-country ads attribute precisely\n- **Avg Ad Lifespan** — average days an ad runs before being turned off\n- **Incremental Reach** (daily scrapes only) — today's total reach minus yesterday's\n\n## License\n\nCopyright (c) 2026 Tomas Kliment / adsrepo.com. All rights reserved. See [LICENSE](https://adsrepo.com/license) for terms.\n","readmeFilename":"README.md"}