skills/sylphai-inc/skills/posthog-analytics

posthog-analytics

SKILL.md

PostHog Analytics Skill

Automate PostHog dashboard creation, sync, update, and export via API.

Prerequisites

Required Tools

  • curl - HTTP client (pre-installed on macOS/Linux)
  • jq - JSON processor: brew install jq or apt install jq
  • bash - Shell (the script is bash)

PostHog API Key

  1. Go to PostHog Settings → Personal API Keys
  2. Create a new key with read/write access
  3. Export it:
export POSTHOG_PERSONAL_API_KEY=phx_xxx

Note: The API key determines your organization and project. The script uses @current project context (your default project).

Verify Setup

# Test your API key - should return your project info
curl -s -H "Authorization: Bearer $POSTHOG_PERSONAL_API_KEY" \
  "https://us.i.posthog.com/api/projects/@current/" | jq '{id, name}'

Expected output:

{
  "id": 209268,
  "name": "Default project"
}

If you get an error, check your API key is correct and has proper permissions.

Quick Start: Blog Analytics Example

Step 1: Write Your Config

Create blog_dashboard.json:

{
  "name": "Blog Analytics",
  "description": "Track blog performance and reader engagement",
  "filter": {"key": "source", "value": "blog"},
  "dashboard_id": null,
  "insights": [
    {"name": "Blog Pageviews (Total)", "type": "pageviews_total"},
    {"name": "Unique Blog Readers", "type": "unique_users"},
    {"name": "Blog Traffic Trend", "type": "traffic_trend"},
    {"name": "Top Blog Posts", "type": "top_pages"}
  ]
}

Note: Set dashboard_id: null for new dashboards.

Step 2: Create Dashboard

./scripts/posthog_sync.sh create blog_dashboard.json

Output:

Creating dashboard: Blog Analytics
Dashboard created: ID 1166599
Creating insight: Blog Pageviews (Total)
{id: 6520531, name: "Blog Pageviews (Total)"}
...
Dashboard URL: https://us.posthog.com/project/209268/dashboard/1166599

The script:

  • Creates a new dashboard in your PostHog project
  • Returns dashboard_id (e.g., 1166599) and project_id (e.g., 209268) in the URL
  • Automatically updates your config file with the dashboard_id

Step 3: Add New Insights (Sync)

Edit config to add new insights, then:

./scripts/posthog_sync.sh sync blog_dashboard.json

Only creates NEW insights. Existing ones (matched by name) are skipped.

Step 4: Update Existing Insights

Changed your filter? Edit config, then:

./scripts/posthog_sync.sh update blog_dashboard.json

Updates ALL insights with current config settings. Use when changing filters.

Step 5: Export Existing Dashboard

./scripts/posthog_sync.sh export 1166599 > exported_dashboard.json

Config Reference

Field Required Description
name Yes Dashboard name
description No Dashboard description
filter No* Event property filter: {"key": "source", "value": "blog"}
domain_filter No* URL filter fallback: "blog.sylph.ai"
dashboard_id No Set to null for create, or existing ID for sync/update
insights Yes Array of insight objects

*At least one filter recommended. filter takes precedence over domain_filter.

Insight Types

Type Display Description
pageviews_total BoldNumber Total pageview count
unique_users BoldNumber Unique visitors (DAU)
traffic_trend LineGraph Traffic over time
top_pages Table Top pages breakdown

Optional Insight Fields

Field Default Options
math total total, dau, weekly_active, monthly_active
display Auto BoldNumber, ActionsLineGraph, ActionsTable
date_range -30d -7d, -30d, -90d, etc.

Environment Variables

Variable Required Default Description
POSTHOG_PERSONAL_API_KEY Yes - Your API key (determines org/project)
POSTHOG_HOST No us.i.posthog.com API host (EU: eu.i.posthog.com)
POSTHOG_UI_HOST No us.posthog.com UI host for dashboard URLs

Files

  • scripts/posthog_sync.sh - CLI script (create/sync/update/export)
  • examples/blog_dashboard.json - Example config

References

Weekly Installs
6
GitHub Stars
9
First Seen
Jan 29, 2026
Installed on
claude-code5
adal4
kilo3
gemini-cli3
antigravity3
github-copilot3