npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@ads-repo/meta-ads-dashboard

v1.0.3

Published

Generate a Meta Ads dashboard from your Google Sheet — drop-in Claude Code skill

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.sh

The installer asks whether to install globally (~/.claude/, available in every session) or per-project (./.claude/ in the current directory), then:

  1. Copies the skill into <scope>/.claude/skills/meta-dashboard-adlib/
  2. Copies the slash command into <scope>/.claude/commands/meta-dashboard-adlib.md
  3. Runs npm install inside the skill folder
  4. 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)

  1. Move meta-dashboard-adlib/ to ~/.claude/skills/ (or <project>/.claude/skills/)
  2. Move meta-dashboard-adlib/commands/meta-dashboard-adlib.md to the matching .claude/commands/ directory
  3. Run npm install inside the skill folder
  4. 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

  1. Parse the sheet URL and discover all tabs
  2. Classify each data tab as one-time or daily based on Scraped Period values
  3. Aggregate ads per Page Name
  4. Trim daily data to the last 60 days (for performance)
  5. Generate a single HTML file at content/dashboards/YYYYMMDD-meta-dashboard-adlib.html
  6. Open the dashboard in your default browser

Output

content/dashboards/
└── 20260501-meta-dashboard-adlib.html   # ~5–15 MB self-contained file

The 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.