From thinking-frameworks-skills
Automates Substack stats collection via Chrome browser automation, parsing the dashboard for subscribers, posts, and engagement data into a structured WeekExport object. Primary path for the Growth Analyst; alternative to manual CSV export.
How this skill is triggered — by the user, by Claude, or both
Slash command
/thinking-frameworks-skills:fetch-substack-statsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
- [Prerequisites](#prerequisites)
Related skills: Primary alternative to ingest-substack-csv. Produces the same WeekExport contract so downstream skills (compute-baseline, attribute-performance, per-section-tracking) don't care which path produced the data.
tabs_context_mcp, tabs_create_mcp, navigate, get_page_text, read_page, optionally javascript_tool.https://thethinkersnotebook.substack.com/publish/stats (the dashboard URL shape — verify on first run).Per weekly run (Mondays) or on-demand:
- [ ] Step 1: tabs_context_mcp — inspect existing tabs; if a Substack stats tab is already open, reuse; else tabs_create_mcp
- [ ] Step 2: navigate to https://substack.com/publish/stats (or publication-specific dashboard URL)
- [ ] Step 3: get_page_text on the rendered dashboard; parse:
- Total subscribers (headline number)
- Weekly delta
- Posts table with columns: title, date, opens, open rate, clicks, CTR, views, sent
- Activity-tier distribution (free / paid, active / at-risk / churned)
- [ ] Step 4: For each post in the last 7 days, also navigate to the individual post stats page for:
- Referral sources breakdown
- Post-specific engagement
- [ ] Step 5: Normalize into WeekExport object (schema matches ingest-substack-csv's output)
- [ ] Step 6: Archive the scraped stats as CSV in corpus/stats/YYYY-WW.csv (so historical baseline works identically)
- [ ] Step 7: Close the Substack tab (do NOT leave stats pages open in the user's browser)
Substack exposes referral source breakdowns only on individual post stats pages. The scraper navigates to each outlier post (|z| ≥ 1.0 candidate, determined after baseline compute — so this step may be deferred to attribute-performance) to pull referral data. For non-outliers, per-post referral is skipped.
Same schema as ingest-substack-csv:
{
"subscribers_end": int,
"delta_subscribers": int,
"posts": [
{"slug", "title", "post_date", "views", "opens", "open_rate", "clicks", "sent", ...}
],
"sends_this_week": int,
"free_subs": int,
"paid_subs": int,
"activity_tier_distribution": {...},
"source": "chrome-scrape", # vs. "csv-export" from the other skill
"scraped_at": ISO8601
}
Written to corpus/stats/YYYY-WW.csv (same archive path as CSV imports). The source field marks provenance so the writer can tell at a glance whether a week came from live scrape or manual export.
Trigger: Monday morning, Growth Analyst invokes fetch-substack-stats.
tabs_context_mcp — no existing Substack tab.tabs_create_mcp + navigate → Substack dashboard stats page.get_page_text — reads:
navigate → post-specific stats → referral breakdown shows 60% direct, 20% Notes, 20% search.WeekExport{subscribers_end: 148, delta_subscribers: 6, posts: [...], ...}.corpus/stats/2026-W17.csv.Downstream pipeline (compute-baseline, attribute-performance, etc.) runs identically whether data came from CSV or scrape — the WeekExport contract is stable.
corpus/stats/{YYYY-WW}.csv already exists for today's ISO week, compare — don't overwrite unless the scrape is strictly more recent and differs meaningfully.fetch-substack-stats FAILED: {reason}; falling back to ingest-substack-csv and halt — let the writer decide whether to retry or drop a manual CSV.login-required message; writer handles auth manually.corpus/stats/YYYY-WW.csv on success.ingest-substack-csv if browser path fails.npx claudepluginhub lyndonkl/claude --plugin thinking-frameworks-skillsFetches public subscriber counts and post view counts from Substack pages via WebFetch to supplement stale CSV data. Useful when CSV exports are outdated or external-share attribution needs verification.
Generates Substack Note ideas by scanning YouTube videos, newsletters, and prior Notes. Orchestrates fetching, processed-log management, duplicate prevention, and delegation to idea extraction. Use for content repurposing and posting cadence.
Writes, optimizes, and grows Substack newsletters and web posts including ghostwriting with voice matching, algorithm optimization, Notes strategy, SEO, growth tactics, and monetization planning.