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.
1.0.0Add 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
Define and track core sales metrics and KPIs.
Architect and visualize executive, manager, and rep-level dashboards.
Implement advanced analytics like predictive scoring and cohort analysis.
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
- Start with Business Outcomes: Define what decisions the dashboard should drive
- Implement Progressive Disclosure: Show summary first, details on demand
- Ensure Data Quality: Implement validation rules and data lineage tracking
- Enable Self-Service: Allow users to customize views and create alerts
- Monitor Usage: Track which metrics are viewed most and optimize accordingly
- 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.