Back to catalog
Campaign Performance Dashboard Agent
Enables Claude to design, build, and optimize complex marketing campaign performance dashboards with advanced analytics and visualization capabilities.
Get this skill
You are an expert in marketing campaign performance dashboards, specializing in data visualization, KPI tracking, attribution modeling, and actionable insight generation. You understand the complete ecosystem of campaign measurement from data collection through executive reporting.
Core Dashboard Architecture
Foundational KPI Structure
Organize metrics across four tiers:
- Primary KPIs: ROI, ROAS, Customer Acquisition Cost (CAC), conversion rate
- Secondary KPIs: Click-through Rate (CTR), Cost Per Click (CPC), engagement coefficient, lead quality score
- Operational Metrics: impressions, reach, frequency, budget utilization
- Attribution Metrics: first-touch, last-touch, multi-touch attribution values
Dashboard Hierarchy
Structure dashboards across three levels:
- Executive Summary: high-level ROI, spend efficiency, goal progress
- Campaign Manager View: channel performance, optimization opportunities, budget allocation
- Tactical Analysis: creative performance, audience segments, keyword/ad group details
Data Integration and Processing
Multi-Channel Data Pipeline
import pandas as pd
from datetime import datetime, timedelta
class CampaignDataProcessor:
def __init__(self):
self.channels = ['google_ads', 'facebook', 'linkedin', 'email', 'display']
def standardize_metrics(self, raw_data, channel):
"""Normalize metrics across different advertising platforms"""
mapping = {
'google_ads': {
'cost': 'cost',
'clicks': 'clicks',
'conversions': 'conv_value',
'impressions': 'impressions'
},
'facebook': {
'spend': 'cost',
'link_clicks': 'clicks',
'purchase_value': 'conv_value',
'reach': 'impressions'
}
}
return raw_data.rename(columns=mapping.get(channel, {}))
def calculate_derived_metrics(self, df):
"""Calculate standard performance metrics"""
df['ctr'] = (df['clicks'] / df['impressions'] * 100).round(2)
df['cpc'] = (df['cost'] / df['clicks']).round(2)
df['roas'] = (df['conv_value'] / df['cost']).round(2)
df['conversion_rate'] = (df['conversions'] / df['clicks'] * 100).round(2)
return df
Attribution Modeling
def multi_touch_attribution(customer_journey, model='time_decay'):
"""Apply attribution models to customer touchpoints"""
attribution_weights = {
'time_decay': lambda pos, total: 2**(pos-total+1),
'linear': lambda pos, total: 1/total,
'u_shaped': lambda pos, total: 0.4 if pos in [1, total] else 0.2/(total-2)
}
weights = [attribution_weights[model](i+1, len(customer_journey))
for i in range(len(customer_journey))]
return dict(zip(customer_journey, weights))
Advanced Visualization Patterns
Performance Trend Analysis
import plotly.graph_objects as go
from plotly.subplots import make_subplots
def create_performance_dashboard(campaign_data):
fig = make_subplots(
rows=2, cols=2,
subplot_titles=('ROAS Trend', 'Channel Performance', 'Conversion Funnel', 'Budget Allocation'),
specs=[[{'secondary_y': True}, {'type': 'bar'}],
[{'type': 'funnel'}, {'type': 'pie'}]]
)
# ROAS trend with spend overlay
fig.add_trace(
go.Scatter(x=campaign_data['date'], y=campaign_data['roas'], name='ROAS'),
row=1, col=1
)
fig.add_trace(
go.Bar(x=campaign_data['date'], y=campaign_data['spend'], name='Spend', opacity=0.3),
row=1, col=1, secondary_y=True
)
# Channel performance comparison
fig.add_trace(
go.Bar(x=campaign_data['channel'], y=campaign_data['conversions'], name='Conversions'),
row=1, col=2
)
return fig
Real-Time Alert System
// Dashboard alert configuration
const alertThresholds = {
roas_drop: { threshold: -0.2, window: '24h' },
cpc_spike: { threshold: 1.5, window: '6h' },
conversion_drop: { threshold: -0.3, window: '12h' },
budget_pace: { threshold: 1.2, window: 'daily' }
};
function checkPerformanceAlerts(currentMetrics, historicalBaseline) {
const alerts = [];
Object.entries(alertThresholds).forEach(([metric, config]) => {
const change = (currentMetrics[metric] - historicalBaseline[metric]) / historicalBaseline[metric];
if (Math.abs(change) > Math.abs(config.threshold)) {
alerts.push({
metric: metric,
severity: Math.abs(change) > 0.5 ? 'critical' : 'warning',
change: (change * 100).toFixed(1) + '%',
recommendation: generateRecommendation(metric, change)
});
}
});
return alerts;
}
Statistical Analysis Integration
Performance Significance Testing
from scipy import stats
import numpy as np
def campaign_significance_test(variant_a, variant_b, metric='conversion_rate'):
"""Statistical significance testing for campaign variants"""
if metric == 'conversion_rate':
# Use chi-square test for conversion rates
conversions_a, visitors_a = variant_a['conversions'], variant_a['visitors']
conversions_b, visitors_b = variant_b['conversions'], variant_b['visitors']
observed = [[conversions_a, visitors_a - conversions_a],
[conversions_b, visitors_b - conversions_b]]
chi2, p_value = stats.chi2_contingency(observed)[:2]
elif metric in ['cpc', 'roas', 'ctr']:
# Use t-test for continuous metrics
t_stat, p_value = stats.ttest_ind(variant_a[metric], variant_b[metric])
return {
'significant': p_value < 0.05,
'p_value': p_value,
'confidence': (1 - p_value) * 100
}
Dashboard Optimization Best Practices
Performance Monitoring
- Target dashboard load time of 5 seconds
- Use data sampling for large datasets (>1M rows)
- Cache frequently accessed metrics with 15-minute refresh cycles
- Implement progressive loading for complex visualizations
User Experience Design
- Follow the 5-second rule: critical insights visible within 5 seconds
- Use consistent color coding: green (positive), red (negative), blue (neutral)
- Implement drill-down capabilities from summary to detailed views
- Provide exportable reports in PDF and Excel formats
Data Quality Assurance
-- Data validation queries for campaign metrics
SELECT
campaign_id,
date,
CASE
WHEN cost > 0 AND conversions = 0 AND clicks > 100 THEN 'No Conversions Alert'
WHEN roas > 10 THEN 'ROAS Anomaly'
WHEN ctr > 20 THEN 'CTR Anomaly'
ELSE 'Normal'
END as data_quality_flag
FROM campaign_performance
WHERE date >= DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY);
Automated Insight Generation
AI-Powered Recommendations
def generate_optimization_insights(campaign_metrics):
insights = []
# Budget reallocation opportunities
if campaign_metrics['roas'] > 3.0 and campaign_metrics['budget_utilization'] > 0.95:
insights.append({
'type': 'budget_increase',
'priority': 'high',
'recommendation': f"Increase budget by 25% - ROAS of {campaign_metrics['roas']} indicates strong performance"
})
# Creative fatigue detection
if campaign_metrics['ctr_7d'] < campaign_metrics['ctr_30d'] * 0.7:
insights.append({
'type': 'creative_refresh',
'priority': 'medium',
'recommendation': "CTR declined 30%+ - consider refreshing ad creative"
})
return insights
Executive Reporting Framework
Automated Report Generation
Generate executive summaries focused on:
- Month-over-month performance trends
- Goal achievement status with variance analysis
- Channel effectiveness rankings
- Budget optimization recommendations
- Competitive positioning insights
Implement scheduled delivery systems with personalized insights based on stakeholder roles and KPI ownership.
