🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Posthog Analytics

by @solomonneas

Automate PostHog dashboard creation, sync, update, and export via API. Covers dashboard CRUD, insight creation, cohort management, and API-driven analytics w...

Versionv1.2.0
Downloads489
TERMINAL
clawhub install posthog-analytics

πŸ“– About This Skill


name: posthog-analytics description: "Automate PostHog dashboard creation, sync, update, and export via API. Covers dashboard CRUD, insight creation, cohort management, and API-driven analytics workflows." version: 1.2.0 env: - name: POSTHOG_PERSONAL_API_KEY required: true description: "PostHog personal API key with read/write access" - name: POSTHOG_HOST required: false default: "us.i.posthog.com" description: "PostHog API host (EU: eu.i.posthog.com)" - name: POSTHOG_UI_HOST required: false default: "us.posthog.com" description: "PostHog UI host for dashboard URLs"

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

  • PostHog API Docs
  • Personal API Keys
  • βš™οΈ Configuration

    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.