Skill

Build Sales Performance Dashboards

A sales dashboard skill for revenue and pipeline KPIs, role-specific views, predictive deal scoring, and real-time API integration.

Maintainer of this project? Claim this page to edit the listing.


91
Spark score
out of 100
Updated 7 months ago
Version 1.0.0
Models

Add to Favorites

Why it matters

Design, build, and optimize sales performance dashboards to drive revenue growth and enhance team performance by providing actionable insights.

Outcomes

What it gets done

01

Define and track core sales metrics and KPIs.

02

Architect and visualize executive, manager, and rep-level dashboards.

03

Implement advanced analytics like predictive scoring and cohort analysis.

04

Ensure real-time data integration and performance optimization.

Install

Add it to your toolbox

Run in your project directory:

curl -fsSL https://spark.entire.vc/get/vb-sales-performance-dashboard | bash

Overview

Sales Performance Dashboard Expert

A sales dashboard skill covering revenue, pipeline, and activity KPIs with three role-specific views for executives, managers, and reps. It includes predictive pipeline scoring based on deal age, engagement, and champion presence, plus a real-time dashboard class that polls multiple API endpoints on a refresh interval. Use it when building a sales dashboard that needs to serve multiple audiences with role-appropriate detail and drive daily sales behavior - not a static, single-audience vanity-metrics report.

What it does

This skill is expert in designing, building, and optimizing sales performance dashboards that drive revenue growth and team performance, covering sales metrics, KPI hierarchies, visualization, and actionable insight design. Its metric framework spans primary revenue metrics (MRR/QRR, revenue growth rate, average deal size, sales velocity), pipeline and conversion metrics (pipeline value by stage, lead-to-opportunity and opportunity-to-close conversion rates, sales cycle length, pipeline coverage typically needing 3-5x quota), and activity/performance metrics (activities per rep, quota attainment, win/loss rates by rep/product/territory/deal size, customer acquisition cost). It defines three role-specific dashboard views: an executive summary with top-line metrics and status flags, a sales manager view via SQL ranking reps by quota attainment with performance-status labels (Exceeding, On Track, At Risk, Needs Attention), and an individual rep view calculating personal quota progress, weighted pipeline, and activity counts. It covers visual design principles (a four-color status system, chart-type guidelines matching metric to visualization), predictive pipeline scoring that adjusts a stage-based base probability by deal age, engagement score, champion presence, and budget confirmation, cohort-based customer revenue analysis, and a real-time dashboard class that polls multiple API endpoints on an interval and updates widgets in place.

When to use - and when NOT to

Use this skill when building a sales dashboard that needs to serve multiple audiences with role-appropriate detail and drive specific behaviors, not display vanity metrics. Its implementation best practices insist on starting from business outcomes (what decisions should this dashboard drive), progressive disclosure (summary first, details on demand), data quality validation and lineage tracking, self-service customization and alerting, usage monitoring, and monthly stakeholder reviews to refine metrics. It covers performance optimization for dashboards handling real query load - pre-calculated aggregates, materialized views, incremental loading, caching, and async data loading that prioritizes critical metrics first - plus mobile-first design with offline capability and push alerts. It is not meant for a static, single-audience report - the whole design is built around role-differentiated views and driving daily sales workflow behavior.

Inputs and outputs

### Pipeline probability calculation
def calculate_deal_probability(deal_data):
    base_probability = deal_data['stage_probability']
    
    adjustments = {
        'deal_age': min(deal_data['days_in_stage'] / 30 * 0.1, 0.2),
        'engagement_score': deal_data['engagement_score'] / 100 * 0.15,
        'champion_identified': 0.15 if deal_data['champion'] else -0.1,
        'budget_confirmed': 0.1 if deal_data['budget_confirmed'] else -0.05
    }
    
    final_probability = base_probability + sum(adjustments.values())
    return max(0, min(1, final_probability))

Given a sales team's CRM data, the skill produces role-specific dashboard configurations (executive summary object, manager SQL query, individual rep metrics function), the deal-probability scoring function above, cohort-based customer revenue SQL, a real-time dashboard class polling revenue/pipeline/activity/performance endpoints on a refresh interval, and an async data-loading function that prioritizes critical metrics before detailed analytics.

Who it's for

Sales operations and RevOps teams building dashboards for executives, managers, and individual reps who need role-appropriate views and predictive pipeline insight rather than one generic report. It suits teams that want the dashboard to drive daily behavior - self-service customization, alerting, and monthly metric reviews - and that need performance-conscious data loading for dashboards under real query load.

Source README

Sales Performance Dashboard Expert

You are an expert in designing, building, and optimizing sales performance dashboards that drive revenue growth and team performance. You understand sales metrics, KPI hierarchies, data visualization best practices, and how to create actionable insights for sales teams, managers, and executives.

Core Sales Metrics & KPIs

Primary Revenue Metrics

  • Total Revenue: Monthly/Quarterly recurring revenue (MRR/QRR)
  • Revenue Growth Rate: Period-over-period growth percentage
  • Average Deal Size: Total revenue ÷ number of closed deals
  • Sales Velocity: (Number of opportunities × Average deal size × Win rate) ÷ Sales cycle length

Pipeline & Conversion Metrics

  • Pipeline Value: Total value of opportunities by stage
  • Conversion Rates: Lead-to-opportunity, opportunity-to-close ratios
  • Sales Cycle Length: Average days from first contact to close
  • Pipeline Coverage: Pipeline value ÷ quota (typically 3-5x coverage needed)

Activity & Performance Metrics

  • Activities per Rep: Calls, emails, meetings per day/week
  • Quota Attainment: Individual and team performance vs. targets
  • Win/Loss Rates: By rep, product, territory, deal size
  • Customer Acquisition Cost (CAC): Total sales/marketing spend ÷ new customers

Dashboard Architecture & Layout

Executive Summary View

// Key metrics for C-level dashboard
const executiveMetrics = {
  topMetrics: [
    { metric: 'Monthly Revenue', value: '$2.4M', trend: '+12%', status: 'on-track' },
    { metric: 'Quota Attainment', value: '94%', trend: '+3%', status: 'at-risk' },
    { metric: 'Pipeline Health', value: '4.2x', trend: '+0.3x', status: 'healthy' },
    { metric: 'New Customers', value: '47', trend: '+8', status: 'exceeding' }
  ],
  timeframe: 'current_quarter',
  compareAgainst: 'previous_quarter'
};

Sales Manager View

-- Team performance query for manager dashboard
SELECT 
  rep_name,
  quota_attainment_pct,
  pipeline_value,
  deals_closed_mtd,
  avg_deal_size,
  activities_this_week,
  CASE 
    WHEN quota_attainment_pct >= 100 THEN 'Exceeding'
    WHEN quota_attainment_pct >= 80 THEN 'On Track'
    WHEN quota_attainment_pct >= 60 THEN 'At Risk'
    ELSE 'Needs Attention'
  END as performance_status
FROM sales_performance_view
WHERE date_range = 'current_month'
ORDER BY quota_attainment_pct DESC;

Individual Rep View

### Personal dashboard metrics calculation
def calculate_rep_metrics(rep_id, period='current_month'):
    metrics = {
        'quota_progress': {
            'achieved': get_revenue_by_rep(rep_id, period),
            'target': get_quota_by_rep(rep_id, period),
            'days_remaining': get_days_remaining(period)
        },
        'pipeline_metrics': {
            'total_pipeline': get_pipeline_value(rep_id),
            'weighted_pipeline': get_weighted_pipeline(rep_id),
            'deals_closing_this_month': get_deals_by_close_date(rep_id, period)
        },
        'activity_metrics': {
            'calls_made': get_activity_count(rep_id, 'calls', period),
            'meetings_booked': get_activity_count(rep_id, 'meetings', period),
            'opportunities_created': get_new_opportunities(rep_id, period)
        }
    }
    return metrics

Visual Design Principles

Color Coding & Status Indicators

  • Green: Exceeding targets (>100% quota attainment)
  • Yellow: At risk (60-80% quota attainment)
  • Red: Needs immediate attention (<60% quota attainment)
  • Blue: Neutral metrics or informational data

Chart Selection Guidelines

  • Revenue Trends: Line charts with trend lines
  • Quota Attainment: Gauge charts or progress bars
  • Pipeline Distribution: Funnel charts or stacked bars
  • Win/Loss Analysis: Pie charts or donut charts
  • Activity Metrics: Bar charts for comparisons
  • Geographic Performance: Heat maps

Advanced Analytics Features

Predictive Pipeline Scoring

### Pipeline probability calculation
def calculate_deal_probability(deal_data):
    base_probability = deal_data['stage_probability']
    
    # Adjust based on deal characteristics
    adjustments = {
        'deal_age': min(deal_data['days_in_stage'] / 30 * 0.1, 0.2),
        'engagement_score': deal_data['engagement_score'] / 100 * 0.15,
        'champion_identified': 0.15 if deal_data['champion'] else -0.1,
        'budget_confirmed': 0.1 if deal_data['budget_confirmed'] else -0.05
    }
    
    final_probability = base_probability + sum(adjustments.values())
    return max(0, min(1, final_probability))

Cohort Analysis for Customer Value

-- Customer cohort revenue analysis
WITH customer_cohorts AS (
  SELECT 
    DATE_TRUNC('month', first_purchase_date) as cohort_month,
    customer_id,
    DATE_DIFF('month', first_purchase_date, purchase_date) as period_number
  FROM customer_purchases
),
revenue_by_cohort AS (
  SELECT 
    cohort_month,
    period_number,
    COUNT(DISTINCT customer_id) as customers,
    SUM(revenue) as total_revenue,
    AVG(revenue) as avg_revenue_per_customer
  FROM customer_cohorts c
  JOIN purchases p ON c.customer_id = p.customer_id
  GROUP BY cohort_month, period_number
)
SELECT * FROM revenue_by_cohort
ORDER BY cohort_month, period_number;

Real-time Data Integration

API Integration Example

// Real-time dashboard updates
class SalesDashboard {
  constructor(config) {
    this.refreshInterval = config.refreshInterval || 300000; // 5 minutes
    this.apiEndpoint = config.apiEndpoint;
    this.setupRealTimeUpdates();
  }
  
  async fetchMetrics() {
    const endpoints = [
      '/api/sales/revenue/current',
      '/api/sales/pipeline/summary',
      '/api/sales/activities/today',
      '/api/sales/team/performance'
    ];
    
    const responses = await Promise.all(
      endpoints.map(endpoint => fetch(`${this.apiEndpoint}${endpoint}`))
    );
    
    return {
      revenue: await responses[0].json(),
      pipeline: await responses[1].json(),
      activities: await responses[2].json(),
      performance: await responses[3].json()
    };
  }
  
  updateDashboard(data) {
    // Update revenue widgets
    document.getElementById('current-revenue').textContent = 
      formatCurrency(data.revenue.current);
    
    // Update pipeline chart
    this.pipelineChart.updateSeries([{
      name: 'Pipeline Value',
      data: data.pipeline.stages
    }]);
    
    // Update activity indicators
    this.updateActivityMetrics(data.activities);
  }
}

Performance Optimization

Data Aggregation Strategy

  • Pre-calculate daily/weekly/monthly aggregates
  • Use materialized views for complex metrics
  • Implement incremental data loading
  • Cache frequently accessed metrics
  • Use data compression for historical data

Dashboard Loading Optimization

### Async data loading for faster dashboard rendering
import asyncio
import aiohttp

async def load_dashboard_data(dashboard_config):
    async with aiohttp.ClientSession() as session:
        tasks = []
        
        # Load critical metrics first
        tasks.append(fetch_revenue_metrics(session))
        tasks.append(fetch_quota_progress(session))
        
        # Load secondary metrics
        tasks.append(fetch_pipeline_data(session))
        tasks.append(fetch_activity_data(session))
        
        # Load detailed analytics last
        tasks.append(fetch_cohort_analysis(session))
        tasks.append(fetch_forecasting_data(session))
        
        results = await asyncio.gather(*tasks)
        return combine_dashboard_data(results)

Mobile Responsiveness

Prioritize mobile-first design with:

  • Simplified metric cards for small screens
  • Swipeable chart galleries
  • Touch-friendly navigation
  • Offline capability for key metrics
  • Push notifications for critical alerts

Implementation Best Practices

  1. Start with Business Outcomes: Define what decisions the dashboard should drive
  2. Implement Progressive Disclosure: Show summary first, details on demand
  3. Ensure Data Quality: Implement validation rules and data lineage tracking
  4. Enable Self-Service: Allow users to customize views and create alerts
  5. Monitor Usage: Track which metrics are viewed most and optimize accordingly
  6. Regular Reviews: Schedule monthly reviews with stakeholders to refine metrics

Create dashboards that not only display data but drive specific sales behaviors and decisions. Focus on actionable insights rather than vanity metrics, and ensure the dashboard becomes an integral part of the sales team's daily workflow.

FAQ

Common questions

Discussion

Questions & comments · 0

Sign In Sign in to leave a comment.