Generated banner for Dashboard Expert
Generated logo for Dashboard Expert

Dashboard Expert

OpenAIOfficialCreated by MixpanelDistributed by OpenAI

  • Skill
  • Tool integration
  • Data and AI
  • MIT
  • No issues found

From the author

Full CRUD and analysis for Mixpanel dashboards. Use when the user asks to build, create, analyze, read, understand, explain, modify, update, enhance, or manage dashboards, or asks about dashboard layout, text cards, or report arrangement. Covers dashboard analysis (read + understand existing), creation (new builds), modification (update existing), and explanation (data-driven annotation).
— the description by Mixpanel

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

Dashboard Expert provides a comprehensive framework for interacting with Mixpanel dashboards. It supports four primary modes: analyzing existing dashboards to extract insights, building new dashboards from scratch, modifying existing layouts or content, and adding data-driven annotations to provide context. The skill emphasizes a structured workflow, ensuring that data is investigated before building, and that modifications follow strict API ordering requirements to maintain dashboard integrity.

What it does

  • Analyzes dashboard structure and executes underlying reports to synthesize findings.
  • Builds new dashboards by planning layouts and querying metrics.
  • Modifies existing dashboards by adding, reordering, or deleting content.
  • Annotates dashboards with data-driven text cards to provide context.
  • Validates data availability before creating new reports.
  • Ensures correct API operation ordering for dashboard updates.

When to use it

  • When you need to understand the performance metrics displayed on a dashboard.
  • When creating a new dashboard to track product health or specific user behaviors.
  • When updating an existing dashboard to include new metrics or improve layout.
  • When you need to add explanatory text to clarify data trends for stakeholders.

Advantages

  • Provides a consistent, repeatable process for dashboard management.
  • Reduces errors by enforcing correct API operation sequences.
  • Enables data-driven insights through automated report execution and summarization.
  • Supports complex layout management including row and cell organization.

Usage examples

“Analyze the Product Health dashboard and summarize the key trends.”
The agent will read the dashboard structure, execute all contained reports, and provide a summary of metrics, trends, and cross-report correlations.
“Create a new dashboard for tracking signup conversion.”
The agent will investigate relevant events, propose a layout, and build a new dashboard with appropriate funnel and insight reports.
“Add a text card to the top of my dashboard explaining the recent drop in DAU.”
The agent will analyze the current dashboard, generate an insightful text card based on the data, and insert it into the layout.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/openai/dashboard-expert/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip dashboard-expert.zip -d .agents/skills

Documentation by Mixpanel

Dashboard Expert

Analyze, build, modify, and explain Mixpanel dashboards. Four modes — pick the one matching the user's intent.

Mode Selection

User intentModeKey actions
"analyze/understand/read/explore dashboard"AnalyzeRead structure, execute reports, summarize
"build/create/make a new dashboard"BuildInvestigate data → plan → create with layout
"modify/update/add to/fix/improve dashboard"ModifyRead current state → plan changes → execute
"explain/annotate/add insights to dashboard"ExplainAnalyze → generate data-driven text cards

Quick Start: Analyze an Existing Dashboard

import json, re
import mixpanel_headless as mp

ws = mp.Workspace()
dash = ws.get_dashboard(DASHBOARD_ID)
layout, contents = dash.layout, dash.contents

# Extract structure: rows → cells → content items
for row_id in layout["order"]:
    row = layout["rows"][row_id]
    for cell in row["cells"]:
        cid, ctype = str(cell["content_id"]), cell["content_type"]
        if ctype in ("report", "report-link"):
            info = contents["report"][cid]
            print(f"  [{cell['width']}w] {info['name']} ({info['type']}) {'[linked]' if ctype == 'report-link' else ''}")
        elif ctype == "text":
            md = contents["text"][cid].get("markdown", "")
            is_header = bool(re.search(r'<h2[\s>]', md, re.I))
            print(f"  [{cell['width']}w] TEXT {'[SECTION]' if is_header else ''}: {md[:60]}...")

# Execute each report → DataFrame
for cid, info in contents.get("report", {}).items():
    btype, bid = info["type"], info["id"]
    if btype == "flows":
        result = ws.query_saved_flows(bid)
    else:
        result = ws.query_saved_report(bid, bookmark_type=btype)
    df = result.df
    print(f"{info['name']}: {len(df)} rows, columns={list(df.columns)}")

Quick Start: Build a New Dashboard

from mixpanel_headless.types import CreateDashboardParams, DashboardRow, DashboardRowContent
import json

ws = mp.Workspace()
dau = ws.query("Login", math="dau", last=90)

def text(html):
    return DashboardRowContent(content_type="text", content_params={"markdown": html})

def report(name, btype, result):
    return DashboardRowContent(content_type="report", content_params={
        "bookmark": {"name": name, "type": btype, "params": json.dumps(result.params)}})

dashboard = ws.create_dashboard(CreateDashboardParams(
    title="Product Health", description="Core metrics.",
    rows=[
        DashboardRow(contents=[text("<h2>Product Health</h2><p>Core metrics.</p>")]),
        DashboardRow(contents=[report("DAU (90d)", "insights", dau)]),
    ],
))
ws.pin_dashboard(dashboard.id)  # Make visible to team

Mode: Analyze

Read existing dashboards, execute their reports, and synthesize understanding.

Phase A1: Read Dashboard Structure
dash = ws.get_dashboard(dashboard_id)
layout, contents = dash.layout, dash.contents

Parse the response into a structured representation:

  • layout["order"] — ordered list of row IDs

  • layout["rows"][row_id]["cells"] — cells with content_id, content_type, width

  • contents["report"][str(content_id)] — report metadata: id (bookmark_id), name, type, params, description

  • contents["text"][str(content_id)] — text card: markdown

Classify each cell:

  • content_type == "report" → owned, editable

  • content_type == "report-link" → linked from another dashboard, read-only

  • content_type == "text" → text card; detect section headers via re.search(r'<h2[\s>]', md, re.I)

Build a mental model: Group reports by section (text cards with <h2> tags delimit sections). Note each report's chart type, width, and position.

Phase A2: Extract Report Details

For deeper understanding, fetch full bookmark params:

bookmark = ws.get_bookmark(bookmark_id)
params = bookmark.params  # Full query definition dict

Key fields in params (Insights format):

  • params["sections"]["show"] — metrics with event names and math type

  • params["sections"]["group"] — breakdown properties

  • params["sections"]["filter"] — active filters

  • params["sections"]["time"] — date range

  • params["displayOptions"]["chartType"] — visualization type

Note: params in contents["report"][id] may be a JSON string — parse with json.loads() if needed.

Phase A3: Execute and Summarize

Execute each report to get live data:

for cid, info in contents.get("report", {}).items():
    bid, btype = info["id"], info["type"]
    if btype == "flows":
        result = ws.query_saved_flows(bid)
    else:
        result = ws.query_saved_report(bid, bookmark_type=btype)
    df = result.df

Summarize by report type:

TypeKey metrics to extract
insightsTotal, average, latest value, min, max, trend direction
funnelsStep names, counts, per-step and overall conversion rate
retentionDay 1, Day 7, Day 30 rates; stabilization point
flowsTop paths, conversion rate, drop-off points

Cross-correlate across reports: Look for relationships — DAU trends vs. retention, funnel drop-off vs. feature adoption.

Phase A4: Present Analysis

Structure findings as:

  1. Dashboard overview — title, purpose, section count, report count

  2. Section-by-section breakdown — what each section measures, key findings

  3. Cross-metric insights — correlations, anomalies, patterns

  4. Suggestions — missing metrics, better chart types, layout improvements

Multi-Dashboard Analysis

When analyzing multiple dashboards, build a unified picture:

dashboard_ids = [1001, 1002, 1003]
all_data = {}
for did in dashboard_ids:
    dash = ws.get_dashboard(did)
    for cid, info in dash.contents.get("report", {}).items():
        result = ws.query_saved_report(info["id"], bookmark_type=info["type"])
        all_data[f"{dash.title}/{info['name']}"] = result.df
# Cross-dashboard: join DataFrames on date index, compute correlations

Mode: Build

Create new dashboards from scratch. Five phases.

Phase B1: Investigate

Before building, discover the data. Never build reports for events with zero volume.

ws = mp.Workspace()
top = ws.top_events(limit=15)
for t in top:
    print(f"{t.event}: {t.count:,} ({t.percent_change:+.1%})")

# Validate candidate events
for event in candidate_events:
    result = ws.query(event, from_date="2025-01-01", to_date="2025-03-31")
    print(f"{event}: {result.df['count'].sum():,.0f} total")

# Explore properties for breakdowns
props = ws.properties(event="key_event")
values = ws.property_values(event="key_event", property="platform", limit=20)
Phase B2: Plan Structure

Present a proposed structure before building. Choose a template from references/dashboard-templates.md.

A plan includes: title + description, sections with text card headers, reports per section with chart type, grid layout.

Text cards use HTML (not markdown). Every dashboard must have an intro text card and section headers.

Allowed HTML tags: <h1>, <h2>, <h3>, <p>, <strong>, <em>, <u>, <s>, <mark>, <code>, <blockquote>, <hr>, <br>, <ul>, <ol>, <li>, <a href="...">

Forbidden (stripped): <div>, <span>, <b> (use <strong>), <i> (use <em>), <img>, <table>

Critical: Strip \n and collapse whitespace from HTML before sending. Each element renders as its own line.

Text card patterns:

Intro:     <h2>Dashboard Title</h2><p>What and why. Time period: last 90 days.</p>
Section:   <h2>Acquisition</h2><p>How users discover and sign up.</p>
Explainer: <p>^ Signup conversion is <strong>23.4%</strong>, up 2.1pp.</p>
Phase B3: Query and Build

Query each metric, verify data, then create with layout in one call.

def text(html):
    return DashboardRowContent(content_type="text", content_params={"markdown": html})

def report(name, btype, result, description=None):
    params = {"bookmark": {"name": name, "type": btype, "params": json.dumps(result.params)}}
    if description:
        params["bookmark"]["description"] = description
    return DashboardRowContent(content_type="report", content_params=params)

dashboard = ws.create_dashboard(CreateDashboardParams(
    title="Product Health Dashboard",
    description="Key metrics for product health monitoring.",
    rows=[
        DashboardRow(contents=[text("<h2>Product Health</h2><p>Updated daily.</p>")]),
        DashboardRow(contents=[
            report("DAU (90d)", "insights", dau),
            report("Signups (90d)", "insights", signups),
            report("Revenue (90d)", "insights", revenue),
        ]),
        DashboardRow(contents=[text("<h2>Conversion</h2><p>Key funnels.</p>")]),
        DashboardRow(contents=[report("Signup Funnel", "funnels", funnel)]),
    ],
))

On report failure, substitute a fallback text card:

try:
    result = ws.query(event, math="total", last=90)
    row_items.append(report(f"{event} Trend", "insights", result))
except Exception as e:
    row_items.append(text(f"<p><strong>Failed:</strong> {event} — {e}</p>"))
Phase B4: Enhance
  • Pin for team visibility: ws.pin_dashboard(dashboard.id) — dashboards are invisible by default

  • Favorite for personal use: ws.favorite_dashboard(dashboard.id)

  • Add explainer cards: see Mode: Explain

  • Adjust heights: see references/dashboard-reference.md Section 3.4

Phase B5: Verify

Open the dashboard and confirm all reports render with data, text cards display correctly, and layout matches the plan.


Mode: Modify

Update existing dashboards. Read first, then apply changes in the correct order.

Phase M1: Read Current State

Use Analyze Phase A1-A2 to understand the dashboard's structure. Present to user before making changes.

Phase M2: Plan Changes

Classify each change and plan execution order. Operations must follow this sequence:

  1. Metadata (title/description) — standalone PATCH

  2. Cell creates — add new content first

  3. Row reorder (rows_order) — after creates so temp IDs resolve

  4. Cell updates — modify existing content

  5. Cell deletes — remove content

  6. Row deletes — remove entire rows last

Phase M3: Execute Changes

Adding content to a specific existing row — send content AND layout together:

import copy
dash = ws.get_dashboard(dashboard_id)
layout = copy.deepcopy(dash.layout)
target_row = layout["rows"][target_row_id]

# Redistribute widths
new_count = len(target_row["cells"]) + 1
cell_width = 12 // new_count
for cell in target_row["cells"]:
    cell["width"] = cell_width
target_row["cells"].append({"temp_id": "-1", "width": cell_width})

ws.update_dashboard(dashboard_id, UpdateDashboardParams(
    content={"action": "create", "content_type": "report",
             "content_params": {"bookmark": {"name": "New Report", "type": "insights",
                                              "params": json.dumps(result.params)}}},
    layout={"rows_order": layout["order"], "rows": layout["rows"]},
))

Adding content as a new row — content action alone (appends to bottom):

ws.update_dashboard(dashboard_id, UpdateDashboardParams(
    content={"action": "create", "content_type": "text",
             "content_params": {"markdown": "<p>^ Explainer card.</p>"}},
))

Deleting content:

ws.update_dashboard(dashboard_id, UpdateDashboardParams(
    content={"action": "delete", "content_type": "report", "content_id": content_id},
))

Cross-type updates (e.g., text → report): API rejects changing content_type on update. Delete the old cell, then create the new one.

See references/dashboard-reference.md Section 8 for temp ID resolution, operation ordering details, and report-link semantics.


Mode: Explain

Combine analysis with targeted text card insertion.

  1. Analyze — run Mode: Analyze to extract structure and execute reports

  2. Generate insights — for each report, compute key metrics from the DataFrame:

    latest = df.iloc[-1]["count"]
    prev = df.iloc[-8]["count"]
    trend = ((latest - prev) / prev) * 100
    html = (f"<p>^ DAU is <strong>{latest:,.0f}</strong>, "
            f"{'up' if trend > 0 else 'down'} <strong>{abs(trend):.1f}%</strong> "
            f"vs. last week.</p>").replace("\n", "")
  3. Insert cards — add as new rows below each report section:

    ws.update_dashboard(dashboard_id, UpdateDashboardParams(
        content={"action": "create", "content_type": "text",
                 "content_params": {"markdown": html}},
    ))

Critical Gotchas

  1. Combined content+layout PATCH — send both content and layout in the same UpdateDashboardParams to add cells to specific existing rows. Without layout, new content appends as a full-width row at the bottom.

  2. Width auto-redistribution — when adding to an existing row with N cells, set all cells (including new) to 12 // (N+1) width.

  3. Update operation ordering — metadata → cell creates → rows_order → cell updates → cell deletes → row deletes. Wrong order causes failures.

  4. per_user requires math_property — using per-user aggregation without a numeric property raises BookmarkValidationError.

  5. CreateBookmarkParams(dashboard_id=X) does NOT add to layout — use add_report_to_dashboard() or inline content action.

  6. add_report_to_dashboard() CLONES — creates "Duplicate of..." copy. Use rows in CreateDashboardParams or inline content action instead.

  7. GET order vs PATCH rows_order — layout from GET uses order; PATCH expects rows_order.

  8. Never include version in layout PATCH — the API rejects it.

  9. Strip \n and collapse whitespace — call .replace("\n", "").strip() on text card HTML. Newlines cause TipTap to mangle content.

  10. Limits — title 255 chars, description 400 chars, text cards 2,000 chars, max 4 items/row, max 30 rows.

  11. Cross-type cell updates require delete+create — API rejects changing content_type on an update action.

  12. Report-link cells are read-only — content_type: "report-link" references a report owned by another dashboard. You can view but not edit its params.

  13. Auto-pin after creation — dashboards are invisible to the team by default. Call ws.pin_dashboard(dashboard.id).

  14. The markdown field accepts only HTML — despite the name. Markdown syntax renders as literal text.

See Also

  • references/dashboard-reference.md — Complete API reference, layout system, content actions, text card formatting, update operations, analysis patterns

  • references/dashboard-templates.md — 9 purpose-built dashboard templates with section layouts and report specs

  • references/bookmark-pipeline.md — End-to-end pipeline from typed query to dashboard report for all 4 engines

  • references/chart-types.md — Chart type selection guide with slugs, use cases, and width recommendations

Files

references/dashboard-templates.md

Dashboard Design Templates

9 purpose-built dashboard templates for common analytics use cases. Each template specifies a complete row-by-row layout, text card content, chart types, and placeholder events that an agent adapts to the user's actual schema.


How to Use These Templates

Adaptation Workflow
  1. Pick a template that matches the user's goal (or combine sections from multiple templates).

  2. Discover the schema -- run ws.events() and ws.properties(event=...) to find real event names.

  3. Map placeholders to real events -- replace {signup_event}, {login_event}, etc. with actual event names from the project. Drop any section whose placeholder events have zero volume.

  4. Validate data -- query each event before building a report. Skip reports that would render as empty charts.

  5. Adapt row count -- remove sections that don't apply, or add sections for project-specific needs. Stay within the 30-row dashboard limit.

  6. Build -- follow the Build mode workflow in SKILL.md, using the template layout as the Phase B2 plan.

Layout Conventions
SymbolMeaning
w=NCell width (columns out of 12). Widths in a row must sum to 12.
h=NRow height in pixels. h=0 means auto-height (text-only rows).
insights-metricBig-number KPI card (single value with comparison).
lineTime-series line chart.
barCategorical bar chart.
tableData table with sortable columns.
line + plotStyle: stackedStacked area/line chart for composition over time.
funnel-stepsFunnel visualization showing step-by-step conversion.
retention-curveRetention curve or cohort grid.
sankeySankey/flow diagram showing user paths.
Placeholder Event Conventions

Templates use curly-brace placeholders for event names. The agent replaces these with real events discovered from the project schema.

PlaceholderTypical Matches
{signup_event}Sign Up, Create Account, Registration Complete
{login_event}Login, Sign In, Session Start
{core_action_event}The primary value-delivery action (e.g., Send Message, Create Post, Place Order)
{purchase_event}Purchase, Order Completed, Subscription Started
{feature_event}The specific feature being tracked (agent fills in)
{error_event}Error, Exception, Crash, API Error
{page_view_event}Page Viewed, Screen View, $mp_web_page_view
{referral_event}Invite Sent, Referral Created, Share
{onboarding_step_N}Sequential onboarding steps (agent discovers from schema)

Template 1: KPI Dashboard

Description: Executive overview of key business metrics with trend lines and core funnels.

Use case: Weekly standups, board meetings, investor updates, team-wide visibility into product health.

Audience: Leadership, founders, board members, cross-functional stakeholders.

Placeholder events: {signup_event}, {login_event}, {core_action_event}

Layout
RowContentWidthHeightChart Type
1Intro text cardw=12h=0text
2KPI: DAUw=3h=336insights-metric
2KPI: WAUw=3h=336insights-metric
2KPI: MAUw=3h=336insights-metric
2KPI: New Signupsw=3h=336insights-metric
3Section header: Growth Trendsw=12h=0text
4DAU trend (90d)w=6h=418line
4New signups trend (90d)w=6h=418line
5Section header: Conversionw=12h=0text
6Signup-to-activation funnelw=12h=588funnel-steps
7Section header: Retentionw=12h=0text
8New user retention curvew=12h=500retention-curve
9Section header: Engagementw=12h=0text
10Sessions per user (bar)w=6h=418bar
10Top events by volume (table)w=6h=418table
Text Card Content

Row 1 -- Intro:

<h2>Key Performance Indicators</h2><p>Headline metrics for {product_name}. All reports use a rolling 90-day window unless noted.</p>

Row 3 -- Growth Trends:

<h2>Growth Trends</h2><p>User acquisition and daily engagement over time.</p>

Row 5 -- Conversion:

<h2>Conversion</h2><p>How effectively new visitors become activated users.</p>

Row 7 -- Retention:

<h2>Retention</h2><p>How well the product brings users back after their first visit.</p>

Row 9 -- Engagement:

<h2>Engagement</h2><p>Depth of product usage across active users.</p>
Report Specifications
ReportEventMathBreakdownNotes
DAU{login_event}dau--Compare to previous period
WAU{login_event}wau--Compare to previous period
MAU{login_event}mau--Compare to previous period
New Signups{signup_event}total--Compare to previous period
DAU trend{login_event}dau--Line chart, 90 days
Signups trend{signup_event}total--Line chart, 90 days
Signup funnel{signup_event} > {login_event} > {core_action_event}----3-step funnel
Retention curveBorn: {signup_event}, Return: {login_event}----12-week retention
Sessions/user{login_event}avg_count_per_user--Bar chart by week
Top eventsTop 10 eventstotal--Table, sorted by volume

Template 2: Feature Launch Dashboard

Description: Track adoption, engagement, and retention impact of a newly launched feature.

Use case: Post-launch monitoring during the first 30-90 days of a feature release.

Audience: Product managers, engineering leads, designers who built the feature.

Placeholder events: {feature_event}, {login_event}, {core_action_event}

Layout
RowContentWidthHeightChart Type
1Intro text cardw=12h=0text
2KPI: Adoption Ratew=4h=336insights-metric
2KPI: Feature DAUw=4h=336insights-metric
2KPI: Avg Uses per Userw=4h=336insights-metric
3Section header: Adoption Trendw=12h=0text
4Feature adoption over timew=12h=500line
5Section header: Discovery and Activationw=12h=0text
6Discovery-to-use funnelw=6h=418funnel-steps
6Time to first use (bar)w=6h=418bar
7Section header: Engagement Depthw=12h=0text
8Feature frequency distributionw=6h=418bar
8Feature usage by segmentw=6h=418bar
9Section header: Retention Impactw=12h=0text
10Feature-user retentionw=6h=418retention-curve
10Non-feature-user retentionw=6h=418retention-curve
11Section header: User Flowsw=12h=0text
12Post-feature user floww=12h=588sankey
Text Card Content

Row 1 -- Intro:

<h2>Feature Launch: {feature_name}</h2><p>Tracking adoption, engagement, and retention impact since {launch_date}.</p>

Row 3 -- Adoption Trend:

<h2>Adoption Trend</h2><p>Cumulative and daily adoption since launch.</p>

Row 5 -- Discovery and Activation:

<h2>Discovery and Activation</h2><p>How users find and first engage with the feature.</p>

Row 7 -- Engagement Depth:

<h2>Engagement Depth</h2><p>How often and how deeply users engage with the feature.</p>

Row 9 -- Retention Impact:

<h2>Retention Impact</h2><p>Comparing retention between feature adopters and non-adopters.</p>

Row 11 -- User Flows:

<h2>User Flows</h2><p>What users do immediately after using the feature.</p>
Report Specifications
ReportEventMathBreakdownNotes
Adoption Rate{feature_event} / {login_event}dau ratio--Percentage of DAU using feature
Feature DAU{feature_event}dau--Compare to previous period
Avg Uses/User{feature_event}avg_count_per_user--Compare to previous period
Adoption over time{feature_event}dau--Line chart since launch
Discovery funnel{page_view_event} > {feature_event}----2-step funnel
Time to first use{feature_event}totalTime since signup bucketBar chart
Frequency dist.{feature_event}totalUses per user bucketBar chart
Usage by segment{feature_event}totalPlatform or user tierBar chart
Feature-user retentionBorn: {feature_event}, Return: {login_event}----8-week retention
Non-feature retentionBorn: {login_event} (excl. feature), Return: {login_event}----8-week retention
Post-feature flowStart: {feature_event}----Sankey, top 5 next events

Template 3: AARRR / Pirate Metrics Dashboard

Description: Full-funnel product health tracking across the five AARRR stages: Acquisition, Activation, Retention, Revenue, and Referral.

Use case: Comprehensive growth health check; identifying which funnel stage needs the most attention.

Audience: Growth teams, product leadership, startup founders.

Placeholder events: {signup_event}, {login_event}, {core_action_event}, {purchase_event}, {referral_event}, {onboarding_step_1}, {onboarding_step_2}

Layout
RowContentWidthHeightChart Type
1Intro text cardw=12h=0text
2Section header: Acquisitionw=12h=0text
3KPI: New Users (total)w=4h=336insights-metric
3KPI: Signup Ratew=4h=336insights-metric
3KPI: Top Channelw=4h=336insights-metric
4New signups trendw=6h=418line
4Signups by channelw=6h=418bar
5Section header: Activationw=12h=0text
6KPI: Activation Ratew=4h=336insights-metric
6KPI: Time to Activatew=4h=336insights-metric
6KPI: Onboarding Completionw=4h=336insights-metric
7Activation funnelw=12h=588funnel-steps
8Section header: Retentionw=12h=0text
9KPI: D1 Retentionw=4h=336insights-metric
9KPI: D7 Retentionw=4h=336insights-metric
9KPI: D30 Retentionw=4h=336insights-metric
10Retention curvew=12h=500retention-curve
11Section header: Revenuew=12h=0text
12KPI: Revenue (total)w=4h=336insights-metric
12KPI: ARPUw=4h=336insights-metric
12KPI: Paid Conversionw=4h=336insights-metric
13ARPU trendw=6h=418line
13Conversion to paid funnelw=6h=418funnel-steps
14Section header: Referralw=12h=0text
15KPI: Referral Ratew=4h=336insights-metric
15KPI: Viral Coefficientw=4h=336insights-metric
15KPI: Referred Signupsw=4h=336insights-metric
16Referral trendw=6h=418line
16Referral funnelw=6h=418funnel-steps
Text Card Content

Row 1 -- Intro:

<h2>AARRR Pirate Metrics</h2><p>Full-funnel health across Acquisition, Activation, Retention, Revenue, and Referral.</p>

Row 2 -- Acquisition:

<h2>Acquisition</h2><p>How effectively the product attracts new users.</p>

Row 5 -- Activation:

<h2>Activation</h2><p>How quickly new users reach their first moment of value.</p>

Row 8 -- Retention:

<h2>Retention</h2><p>How well the product brings users back after signup.</p>

Row 11 -- Revenue:

<h2>Revenue</h2><p>Monetization health and conversion to paid.</p>

Row 14 -- Referral:

<h2>Referral</h2><p>Organic growth through user-driven sharing and invites.</p>
Report Specifications
ReportEventMathBreakdownNotes
New Users{signup_event}total--Compare to previous period
Signup Rate{signup_event} / {page_view_event}ratio--Visitor-to-signup conversion
Top Channel{signup_event}totalUTM sourceShow top value
Signups trend{signup_event}total--Line chart, 90 days
Signups by channel{signup_event}totalUTM sourceBar chart, top 5
Activation Rate{core_action_event} / {signup_event}ratio--Within first 7 days
Time to Activate{core_action_event}median_time--Median time from signup
Onboarding Completion{onboarding_step_2} / {onboarding_step_1}ratio--Completion rate
Activation funnel{signup_event} > {onboarding_step_1} > {core_action_event}----3-step funnel
D1 RetentionBorn: {signup_event}, Return: {login_event}----Day 1 value
D7 RetentionBorn: {signup_event}, Return: {login_event}----Day 7 value
D30 RetentionBorn: {signup_event}, Return: {login_event}----Day 30 value
Retention curveBorn: {signup_event}, Return: {login_event}----12-week curve
Revenue{purchase_event}sum of revenue property--Compare to previous period
ARPU{purchase_event}avg of revenue property--Per-user average
Paid Conversion{purchase_event} / {signup_event}ratio--Overall conversion
ARPU trend{purchase_event}avg of revenue property--Line chart, 90 days
Paid funnel{signup_event} > {core_action_event} > {purchase_event}----3-step funnel
Referral Rate{referral_event} / {login_event}ratio--% of users who refer
Viral Coefficient{referral_event}avg_count_per_user--Invites per user
Referred Signups{signup_event}totalReferral sourceFilter to referred
Referral trend{referral_event}total--Line chart, 90 days
Referral funnel{referral_event} > {signup_event} (referred)----2-step funnel

Template 4: Conversion Funnel Dashboard

Description: Deep dive into a specific conversion funnel with step-by-step drop-off analysis, segment comparisons, and trend tracking.

Use case: Optimizing a critical multi-step conversion flow (signup, checkout, onboarding).

Audience: Growth, marketing, product managers focused on conversion optimization.

Placeholder events: {funnel_step_1}, {funnel_step_2}, {funnel_step_3}, {funnel_step_4}

Layout
RowContentWidthHeightChart Type
1Intro text cardw=12h=0text
2KPI: Overall Conversionw=4h=336insights-metric
2KPI: Median Time to Convertw=4h=336insights-metric
2KPI: Daily Conversionsw=4h=336insights-metric
3Section header: Full Funnelw=12h=0text
4Complete funnel visualizationw=12h=588funnel-steps
5Section header: Step-by-Step Drop-offw=12h=0text
6Step 1 > 2 conversionw=4h=336insights-metric
6Step 2 > 3 conversionw=4h=336insights-metric
6Step 3 > 4 conversionw=4h=336insights-metric
7Section header: Segment Comparisonw=12h=0text
8Funnel by platformw=6h=418bar
8Funnel by sourcew=6h=418bar
9Section header: Funnel Trendw=12h=0text
10Conversion rate over timew=12h=500line
11Section header: Drop-off Analysisw=12h=0text
12Post-drop-off user floww=12h=588sankey
Text Card Content

Row 1 -- Intro:

<h2>{funnel_name} Funnel Analysis</h2><p>Deep dive into conversion performance across {step_count} steps. Identify where users drop off and which segments convert best.</p>

Row 3 -- Full Funnel:

<h2>Full Funnel</h2><p>End-to-end conversion from {funnel_step_1} to {funnel_step_4}.</p>

Row 5 -- Step-by-Step Drop-off:

<h2>Step-by-Step Drop-off</h2><p>Conversion rate between each consecutive pair of steps.</p>

Row 7 -- Segment Comparison:

<h2>Segment Comparison</h2><p>How conversion varies across user segments.</p>

Row 9 -- Funnel Trend:

<h2>Funnel Trend</h2><p>Overall conversion rate tracked over time to spot regressions.</p>

Row 11 -- Drop-off Analysis:

<h2>Drop-off Analysis</h2><p>Where non-converters go after abandoning the funnel.</p>
Report Specifications
ReportEventMathBreakdownNotes
Overall Conversion{funnel_step_1} > ... > {funnel_step_4}overall rate--Compare to previous period
Median Time{funnel_step_1} > {funnel_step_4}median_time--Time to complete funnel
Daily Conversions{funnel_step_4}total--Completed conversions/day
Full funnel{funnel_step_1} > {funnel_step_2} > {funnel_step_3} > {funnel_step_4}----Full funnel chart
Step 1>2 rate{funnel_step_1} > {funnel_step_2}step rate--Pairwise conversion
Step 2>3 rate{funnel_step_2} > {funnel_step_3}step rate--Pairwise conversion
Step 3>4 rate{funnel_step_3} > {funnel_step_4}step rate--Pairwise conversion
By platform{funnel_step_1} > ... > {funnel_step_4}overall ratePlatformBar chart
By source{funnel_step_1} > ... > {funnel_step_4}overall rateUTM sourceBar chart
Rate over time{funnel_step_1} > ... > {funnel_step_4}overall rate--Line chart, 90 days
Drop-off flowStart: users who did {funnel_step_1} but not {funnel_step_4}----Sankey of next actions

Template 5: Retention Dashboard

Description: Comprehensive analysis of user retention patterns with cohort breakdowns and engagement correlations.

Use case: Understanding why users churn and what behaviors predict long-term retention.

Audience: Product, growth, customer success teams.

Placeholder events: {signup_event}, {login_event}, {core_action_event}

Layout
RowContentWidthHeightChart Type
1Intro text cardw=12h=0text
2KPI: D1 Retentionw=4h=336insights-metric
2KPI: D7 Retentionw=4h=336insights-metric
2KPI: D30 Retentionw=4h=336insights-metric
3Section header: Retention Curvew=12h=0text
4Overall retention curvew=12h=500retention-curve
5Section header: Cohort Analysisw=12h=0text
6Retention by signup cohort (table)w=12h=588table
7Section header: Segment Comparisonw=12h=0text
8Retention by platformw=6h=418retention-curve
8Retention by acquisition sourcew=6h=418retention-curve
9Section header: Return Driversw=12h=0text
10Top return eventsw=12h=500bar
11Section header: Engagement Correlationw=12h=0text
12First-week actions vs D30 retentionw=6h=418bar
12Feature usage vs D30 retentionw=6h=418bar
Text Card Content

Row 1 -- Intro:

<h2>Retention Analysis</h2><p>Understanding user retention patterns, cohort performance, and engagement behaviors that predict long-term retention.</p>

Row 3 -- Retention Curve:

<h2>Retention Curve</h2><p>Percentage of users returning on each day after signup.</p>

Row 5 -- Cohort Analysis:

<h2>Cohort Analysis</h2><p>Weekly signup cohorts showing how retention evolves over time.</p>

Row 7 -- Segment Comparison:

<h2>Segment Comparison</h2><p>Retention differences across key user segments.</p>

Row 9 -- Return Drivers:

<h2>Return Drivers</h2><p>Which events most commonly bring users back to the product.</p>

Row 11 -- Engagement Correlation:

<h2>Engagement Correlation</h2><p>Behaviors in the first week that predict long-term retention.</p>
Report Specifications
ReportEventMathBreakdownNotes
D1 RetentionBorn: {signup_event}, Return: {login_event}----Day 1 value, compare to previous
D7 RetentionBorn: {signup_event}, Return: {login_event}----Day 7 value, compare to previous
D30 RetentionBorn: {signup_event}, Return: {login_event}----Day 30 value, compare to previous
Overall curveBorn: {signup_event}, Return: {login_event}----12-week retention curve
Cohort tableBorn: {signup_event}, Return: {login_event}--Signup weekCohort grid table
By platformBorn: {signup_event}, Return: {login_event}--PlatformSide-by-side curves
By sourceBorn: {signup_event}, Return: {login_event}--UTM sourceSide-by-side curves
Top return eventsAll eventstotalEvent nameBar chart, users who returned D7+
First-week actions{core_action_event} count in week 1--Action count bucketBar showing D30 rate per bucket
Feature vs retention{feature_event} usage in week 1--Used/not usedBar showing D30 rate per group

Template 6: User Engagement Dashboard

Description: Measure the depth and breadth of product usage across daily patterns, feature adoption, and session analysis.

Use case: Understanding how deeply users engage, identifying power-user behaviors, and finding underused features.

Audience: Product managers, designers, user researchers.

Placeholder events: {login_event}, {core_action_event}, {feature_event}, {page_view_event}

Layout
RowContentWidthHeightChart Type
1Intro text cardw=12h=0text
2KPI: DAUw=3h=336insights-metric
2KPI: Sessions per Userw=3h=336insights-metric
2KPI: Avg Session Lengthw=3h=336insights-metric
2KPI: Feature Breadthw=3h=336insights-metric
3Section header: Usage Patternsw=12h=0text
4DAU by day of weekw=6h=418bar
4DAU by hour of dayw=6h=418bar
5Section header: Feature Usagew=12h=0text
6Feature usage ranking (table)w=12h=588table
7Section header: User Segmentsw=12h=0text
8Power users vs casual (actions/user)w=6h=418bar
8User engagement tiersw=6h=418bar
9Section header: Session Analysisw=12h=0text
10Session duration trendw=12h=500line
11Section header: User Flowsw=12h=0text
12Top user pathsw=12h=588sankey
Text Card Content

Row 1 -- Intro:

<h2>User Engagement</h2><p>Depth and breadth of product usage. Identifying power-user behaviors and underused features.</p>

Row 3 -- Usage Patterns:

<h2>Usage Patterns</h2><p>When users are most active during the week and day.</p>

Row 5 -- Feature Usage:

<h2>Feature Usage</h2><p>Which features are most and least used across the product.</p>

Row 7 -- User Segments:

<h2>User Segments</h2><p>Engagement distribution across user tiers.</p>

Row 9 -- Session Analysis:

<h2>Session Analysis</h2><p>How session depth changes over time.</p>

Row 11 -- User Flows:

<h2>User Flows</h2><p>Most common paths users take through the product.</p>
Report Specifications
ReportEventMathBreakdownNotes
DAU{login_event}dau--Compare to previous period
Sessions/User{login_event}avg_count_per_user--Compare to previous period
Avg Session Length{page_view_event}avg of session duration--In minutes
Feature BreadthDistinct events per userunique--Avg distinct features used
By day of week{login_event}dauDay of weekBar chart
By hour of day{login_event}totalHour of dayBar chart
Feature rankingTop 20 eventstotal + dauEvent nameTable, sorted by volume
Power vs casual{core_action_event}totalActions per user bucketBar chart
Engagement tiers{login_event}totalSessions per user bucketBar chart
Session duration{page_view_event}median of session duration--Line chart, 90 days
User pathsStart: {login_event}----Sankey, top 5 paths

Template 7: Marketing Performance Dashboard

Description: Track acquisition channel effectiveness with channel-level trends, funnel comparisons, and retention by source.

Use case: Evaluating marketing spend, channel ROI, and campaign performance.

Audience: Marketing, growth, paid acquisition teams.

Placeholder events: {signup_event}, {login_event}, {core_action_event}, {purchase_event}, {page_view_event}

Layout
RowContentWidthHeightChart Type
1Intro text cardw=12h=0text
2KPI: Total Signupsw=3h=336insights-metric
2KPI: Signup Ratew=3h=336insights-metric
2KPI: Best Channelw=3h=336insights-metric
2KPI: Avg Conversion Ratew=3h=336insights-metric
3Section header: Channel Trendsw=12h=0text
4Signups by channel over timew=12h=500line (plotStyle: stacked)
5Section header: Channel Qualityw=12h=0text
6Channel conversion funnelw=12h=588funnel-steps
7Section header: Channel Retentionw=12h=0text
8Retention by acquisition sourcew=12h=500retention-curve
9Section header: Campaign Performancew=12h=0text
10Campaign performance tablew=12h=588table
11Section header: Attributionw=12h=0text
12First-touch attributionw=6h=418bar
12Last-touch attributionw=6h=418bar
Text Card Content

Row 1 -- Intro:

<h2>Marketing Performance</h2><p>Acquisition channel effectiveness, campaign ROI, and channel-level quality metrics.</p>

Row 3 -- Channel Trends:

<h2>Channel Trends</h2><p>Volume of signups by acquisition channel over time.</p>

Row 5 -- Channel Quality:

<h2>Channel Quality</h2><p>Funnel conversion rates compared across channels.</p>

Row 7 -- Channel Retention:

<h2>Channel Retention</h2><p>Which channels produce the most retained users.</p>

Row 9 -- Campaign Performance:

<h2>Campaign Performance</h2><p>Individual campaign metrics ranked by volume and conversion.</p>

Row 11 -- Attribution:

<h2>Attribution</h2><p>First-touch vs last-touch attribution of conversions by source.</p>
Report Specifications
ReportEventMathBreakdownNotes
Total Signups{signup_event}total--Compare to previous period
Signup Rate{signup_event} / {page_view_event}ratio--Visitor-to-signup
Best Channel{signup_event}totalUTM sourceShow top value
Avg Conversion{signup_event} > {core_action_event}overall rate--Compare to previous period
By channel over time{signup_event}totalUTM sourceStacked line, 90 days
Channel funnel{signup_event} > {core_action_event} > {purchase_event}--UTM sourceFunnel segmented by channel
Retention by sourceBorn: {signup_event}, Return: {login_event}--UTM source8-week curves by channel
Campaign table{signup_event}total, dauUTM campaignTable sorted by volume
First-touch attr.{purchase_event}totalFirst-touch UTM sourceBar chart
Last-touch attr.{purchase_event}totalLast-touch UTM sourceBar chart

Template 8: Experiment Results Dashboard

Description: Present A/B test results with primary and secondary metric comparisons, segment breakdowns, and funnel/retention impact.

Use case: Reviewing experiment outcomes, making ship/kill decisions, presenting results to stakeholders.

Audience: Product managers, engineering leads, data scientists.

Placeholder events: {primary_metric_event}, {secondary_metric_event}, {login_event}, {signup_event}

Layout
RowContentWidthHeightChart Type
1Intro text cardw=12h=0text
2KPI: Primary Metric Liftw=4h=336insights-metric
2KPI: Statistical Significancew=4h=336insights-metric
2KPI: Sample Sizew=4h=336insights-metric
3Section header: Primary Metricw=12h=0text
4Primary metric: control vs variantw=12h=500line
5Section header: Secondary Metricsw=12h=0text
6Secondary metric A by groupw=6h=418bar
6Secondary metric B by groupw=6h=418bar
7Section header: Segment Breakdownw=12h=0text
8Results by segment (table)w=12h=588table
9Section header: Funnel Impactw=12h=0text
10Funnel by experiment groupw=12h=588funnel-steps
11Section header: Retention Impactw=12h=0text
12Retention: control groupw=6h=418retention-curve
12Retention: variant groupw=6h=418retention-curve
Text Card Content

Row 1 -- Intro:

<h2>Experiment: {experiment_name}</h2><p><strong>Hypothesis:</strong> {hypothesis}. Running from {start_date} to {end_date}. Groups: Control ({control_pct}%) vs {variant_name} ({variant_pct}%).</p>

Row 3 -- Primary Metric:

<h2>Primary Metric</h2><p>Tracking {primary_metric_name} across experiment groups over time.</p>

Row 5 -- Secondary Metrics:

<h2>Secondary Metrics</h2><p>Guardrail and secondary metrics to watch for unexpected side effects.</p>

Row 7 -- Segment Breakdown:

<h2>Segment Breakdown</h2><p>Experiment results sliced by platform, plan, and geography.</p>

Row 9 -- Funnel Impact:

<h2>Funnel Impact</h2><p>How the experiment affects the core conversion funnel.</p>

Row 11 -- Retention Impact:

<h2>Retention Impact</h2><p>Whether the variant changes user return behavior over the first 4 weeks.</p>
Report Specifications
ReportEventMathBreakdownNotes
Primary Lift{primary_metric_event}relative liftExperiment group% change vs control
Significance{primary_metric_event}p-valueExperiment groupStatistical confidence
Sample Size{primary_metric_event}total_usersExperiment groupTotal enrolled users
Control vs variant{primary_metric_event}total or dauExperiment groupLine chart over time
Secondary A{secondary_metric_event}totalExperiment groupBar chart
Secondary B{login_event} sessionsavg_count_per_userExperiment groupBar chart
By segment table{primary_metric_event}lift + significanceExperiment group x segmentTable with per-segment results
Funnel by group{signup_event} > {primary_metric_event}--Experiment groupFunnel segmented by group
Control retentionBorn: {signup_event} (control), Return: {login_event}----4-week curve
Variant retentionBorn: {signup_event} (variant), Return: {login_event}----4-week curve

Template 9: Operational Health Dashboard

Description: Monitor product reliability and performance with error rates, success metrics, user impact analysis, and recovery tracking.

Use case: Incident response, reliability monitoring, SLO tracking, post-incident reviews.

Audience: Engineering, SRE, product ops, on-call teams.

Placeholder events: {error_event}, {login_event}, {core_action_event}, {page_view_event}

Layout
RowContentWidthHeightChart Type
1Intro text cardw=12h=0text
2KPI: Error Ratew=3h=336insights-metric
2KPI: P95 Latencyw=3h=336insights-metric
2KPI: Success Ratew=3h=336insights-metric
2KPI: Active Usersw=3h=336insights-metric
3Section header: Reliability Trendsw=12h=0text
4Error rate trendw=6h=418line
4Success rate trendw=6h=418line
5Section header: Error Breakdownw=12h=0text
6Errors by typew=12h=500bar
7Section header: Error Dimensionsw=12h=0text
8Errors by platformw=6h=418bar
8Errors by app versionw=6h=418bar
9Section header: User Impactw=12h=0text
10Users affected by errors (table)w=12h=588table
11Section header: Recovery Patternsw=12h=0text
12Post-error user return ratew=12h=500line
Text Card Content

Row 1 -- Intro:

<h2>Operational Health</h2><p>Product reliability, error rates, and user impact monitoring. Updated in near real-time.</p>

Row 3 -- Reliability Trends:

<h2>Reliability Trends</h2><p>Error rate and success rate over the last 30 days.</p>

Row 5 -- Error Breakdown:

<h2>Error Breakdown</h2><p>Errors categorized by type to identify systemic issues.</p>

Row 7 -- Error Dimensions:

<h2>Error Dimensions</h2><p>Error distribution across platforms and app versions.</p>

Row 9 -- User Impact:

<h2>User Impact</h2><p>How many users are affected by errors and how severely.</p>

Row 11 -- Recovery Patterns:

<h2>Recovery Patterns</h2><p>Whether users return to the product after encountering errors.</p>
Report Specifications
ReportEventMathBreakdownNotes
Error Rate{error_event} / {core_action_event}ratio--Compare to previous period
P95 Latency{page_view_event}p95 of duration property--Compare to previous period
Success Rate{core_action_event} (success) / {core_action_event} (all)ratio--1 - error rate
Active Users{login_event}dau--Compare to previous period
Error rate trend{error_event}total--Line chart, 30 days
Success rate trend{core_action_event}totalSuccess/failure statusLine chart, 30 days
By type{error_event}totalError type propertyBar chart, top 10
By platform{error_event}totalPlatformBar chart
By version{error_event}totalApp versionBar chart, top 10
Impact table{error_event}total, dauError typeTable: count, users, rate
Recovery rateBorn: {error_event}, Return: {login_event}----7-day retention post-error

Template Selection Guide

Use this table to quickly match the user's request to the right template.

User SaysTemplateWhy
"executive dashboard", "KPI overview", "key metrics"1: KPI DashboardHigh-level health metrics
"feature launch", "new feature tracking", "adoption"2: Feature LaunchPost-launch monitoring
"growth metrics", "pirate metrics", "AARRR", "full funnel"3: AARRREnd-to-end growth tracking
"funnel analysis", "conversion optimization", "drop-off"4: Conversion FunnelDeep funnel investigation
"retention analysis", "churn", "cohort analysis"5: RetentionRetention deep dive
"engagement", "usage patterns", "power users"6: User EngagementEngagement depth analysis
"marketing", "channels", "campaigns", "acquisition"7: Marketing PerformanceChannel effectiveness
"A/B test", "experiment results", "variant comparison"8: Experiment ResultsExperiment presentation
"errors", "reliability", "ops health", "SLO", "incidents"9: Operational HealthReliability monitoring
Unclear or general request1: KPI DashboardSafe default

Requirements and compatibility

Written for: OpenAI Codex

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Declares allowed tools, Needs Python

Security

No issues found by our static scan· No issues found

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
Mixpanel
Publisher
OpenAI (Official)
Distributed by
OpenAI
Source
openai/plugins · plugins/mixpanel-headless/skills/dashboard-expert · commit d420d13
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from plugins/mixpanel-headless/LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Mixpanel or OpenAI.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download dashboard-expert.zip