Campaign Performance Dashboard
A reporting structure for reviewing a campaign after launch and deciding what to scale, fix, pause, or test next — from executive snapshot to channel, creative, and funnel performance.
Best for
Campaign reviews + Marketing teams
Estimated time
30–45 min to set up
Level
Intermediate
Start here
Set up the sections and KPIs once, then populate them with real numbers after launch. Read top to bottom: the executive snapshot frames the story, the middle sections explain it, and the decisions section turns it into action. The value is in the last section, not the charts.
Use this when
- A campaign has launched and needs its first performance review
- You need to decide what to scale, fix, pause, or test
- A stakeholder or client needs a clear campaign update
- You want a repeatable post-launch review structure
After you finish
- Build this layout in your reporting tool and connect the data sources
- Save each review as a PDF so you can compare across review cycles
- Carry decisions into the next sprint with owners and deadlines
Usage guide
How to use this resource.
Rules before you start
- Populate every KPI with verified numbers, not estimates.
- Always finish the decisions section — a dashboard without decisions is just a report.
- Compare each review against the targets set in the Campaign Brief Template.
Prepare these inputs
- The approved Campaign Brief Template with KPI targets
- Access to ad platform, analytics, and CRM or e-commerce data
- At least a few days of post-launch data
- Creative and channel naming that matches the campaign
Live dashboard preview
Campaign Performance
Demo preview using sample data — replace with your real campaign data
Executive snapshot
Total spend
$28.6K
Total leads
1.4K
CPL
$20.8
Cost per lead
Revenue
$169.2K
ROAS
5.9x
Return on ad spend
CTR
2.1%
Click-through rate
Best channel
33.8x ROAS
Weakest channel
TikTok Ads
2.6x ROAS
Channel performance
| Channel | Spend | Clicks | Leads | CPL | Revenue | ROAS |
|---|---|---|---|---|---|---|
| Meta Ads | $12.4K | 14.8K | 312 | $39.744 | $46.8K | 3.8x |
| Google Search | $9.2K | 18.6K | 465 | $19.785 | $55.8K | 6.1x |
| TikTok Ads | $5.8K | 9.9K | 149 | $38.926 | $14.9K | 2.6x |
| $1.2K | 6.8K | 338 | $3.55 | $40.6K | 33.8x | |
| Organic Social | $0 | 5.5K | 111 | $0 | $11.1K | ∞ |
Leads by channel
Spend vs revenue
Conversion funnel
Budget efficiency
Suggested next actions
- Scale Email — highest ROAS at 33.8x
- Review TikTok Ads — lowest ROAS at 2.6x. Test new creative or reduce budget.
- Overall CPL is $20.8 — benchmark against your target and adjust bids.
- Funnel drop-off from clicks to leads is 97.5% — review landing page experience.
Data needed
Required fields and schema.
Your data source must include these fields. Required fields are needed for core metrics; optional fields unlock additional insights.
| Field | Type | Req. | Description | Example |
|---|---|---|---|---|
date | date | ● | Reporting date or date range | 2026-05-15 |
channel | string | ● | Marketing channel or source | Meta Ads |
spend | number | ● | Total spend in your currency | 12400 |
impressions | number | ● | Total ad impressions served | 820000 |
clicks | number | ● | Total clicks to landing page | 14760 |
leads | number | ● | Total leads, signups, or conversions | 312 |
revenue | number | ○ | Revenue attributed to this channel | 46800 |
campaign_name | string | ○ | Name of the specific campaign | Summer Launch 2026 |
creative_id | string | ○ | Creative or ad variant identifier | ad_v3_carousel |
landing_page | string | ○ | Landing page URL or slug | /offer/summer |
Connect your data
Choose your data source.
CSV export
Quick one-time analysis or small teams
- 1Export campaign data from your ad platform (Meta Ads Manager, Google Ads, etc.)
- 2Ensure columns match the data schema above
- 3Save as .csv and replace the demo data array in campaignPerformanceDemo.ts
Good for monthly reviews. Automate with scheduled exports if needed.
Google Sheets
Shared team reporting with automatic updates
- 1Create a Google Sheet with columns matching the data schema
- 2Use Supermetrics, Funnel.io, or manual paste to populate
- 3Publish sheet as CSV or use Google Sheets API to fetch data
- 4Parse the CSV/JSON and pass it to the dashboard component
Best for teams that already use Sheets for reporting.
Ad platform API
Automated real-time dashboards
- 1Set up API credentials for Meta Marketing API, Google Ads API, etc.
- 2Build a data fetching layer that pulls metrics daily
- 3Normalize channel data into the schema format
- 4Store in a database or cache layer for fast reads
Requires developer setup. Best for production dashboards.
CRM / e-commerce export
Revenue attribution and lead quality tracking
- 1Export revenue and lead data from your CRM (HubSpot, Salesforce, etc.)
- 2Match leads to marketing channels using UTM parameters or source fields
- 3Merge with ad spend data to calculate true ROAS
Critical for accurate revenue attribution beyond platform-reported numbers.
Setup guide
Get started step by step.
- 1Review the data schema and identify which fields your data covers
- 2Choose a connection method that fits your team and tools
- 3Export or connect your campaign data in the required format
- 4Replace the demo data in campaignPerformanceDemo.ts with your real data
- 5Adjust channel names and metric calculations to match your business
- 6Review the dashboard and customize KPI targets for your goals
- 7Set up a regular cadence (weekly or monthly) for data refresh
Code / GitHub handoff
Developer reference.
Component: CampaignPerformanceDashboardDemo
components/resources/dashboard-demos/CampaignPerformanceDashboardDemo.tsxLive dashboard preview component with metric cards, charts, and tables
lib/resources/dashboardDemos/campaignPerformanceDemo.tsDemo data and aggregation functions — replace with your real data source
lib/resources/dashboardDemos/dashboardImplementations.tsDashboard metadata: data schema, connection options, AI prompts
These paths are relative to 02_PORTFOLIO_WEBSITE/site/ in the repository. Modify the demo data file to connect your real data. Do not hardcode production numbers in the component itself.
AI / developer prompts
Ready-to-use prompts.
Copy these prompts to adapt the dashboard with Claude, ChatGPT, or any coding assistant.
Adapt dashboard to my data
Customize the dashboard for your specific channels and metrics
I have a campaign performance dashboard built in React/Next.js with Tailwind CSS. Current demo data structure: - channels: Meta Ads, Google Search, TikTok Ads, Email, Organic Social - metrics per channel: spend, impressions, clicks, leads, revenue My actual data: [PASTE YOUR CHANNEL LIST AND AVAILABLE METRICS HERE] Please: 1. Update the channel list to match my data 2. Add or remove metrics based on what I track 3. Adjust the aggregation functions for my specific KPIs 4. Keep the same visual style and component structure 5. Replace demo numbers with a data loading pattern for my source Note: The demo data must be completely replaced — do not ship sample numbers.
Create CSV / Google Sheet schema
Set up a spreadsheet that feeds into the dashboard
Create a Google Sheets template for a campaign performance dashboard. Required columns: - date (YYYY-MM-DD) - channel (text: the marketing channel name) - spend (number: total ad spend) - impressions (number: total impressions) - clicks (number: total clicks) - leads (number: total conversions or leads) - revenue (number: attributed revenue) Optional columns: - campaign_name (text) - creative_id (text) - landing_page (text) Please: 1. Create the sheet structure with headers and data validation 2. Add a summary row with formulas for CTR, CPC, CPL, ROAS 3. Add conditional formatting to highlight underperforming channels 4. Include a tab with channel-level weekly rollup 5. Add notes explaining each column The sheet should be ready to paste data from Meta Ads Manager, Google Ads, and TikTok Ads exports.
Connect to marketing data export
Automate data flow from ad platforms to the dashboard
I need to connect live marketing data to a Next.js campaign dashboard.
Current setup:
- Next.js with static export
- Dashboard component expects an array of channel objects: { channel, spend, impressions, clicks, leads, revenue }
- No backend API routes available in static export mode
My data sources:
[LIST YOUR AD PLATFORMS: e.g., Meta Ads, Google Ads, TikTok Ads]
Please suggest:
1. The simplest way to get data from these platforms into my dashboard
2. A build-time data fetching approach (if using SSG/ISR)
3. A client-side approach (if I add an API endpoint later)
4. How to handle data freshness and caching
5. Error handling for missing or incomplete data
Constraints:
- Must work with static export for now
- No external chart libraries (using div-based bars and HTML tables)
- Must be deployable without environment variables in the static buildReview KPI logic and suggest improvements
Get a second opinion on your dashboard metrics and calculations
Review the KPI logic for a campaign performance dashboard. Current metrics: - CTR = clicks / impressions × 100 - CPC = spend / clicks - CPL = spend / leads - Conversion Rate = leads / clicks × 100 - ROAS = revenue / spend Current dashboard sections: 1. Executive snapshot (total spend, leads, CPL, revenue, ROAS) 2. Channel performance table (per-channel breakdown) 3. Leads by channel (bar chart) 4. Spend vs Revenue by channel (comparison) 5. Conversion funnel (impressions → clicks → leads → revenue) Please review and suggest: 1. Are these calculations standard and accurate? 2. What metrics am I missing that would improve decision-making? 3. Should I add time-series trends (week-over-week)? 4. How should I handle channels with zero spend (organic)? 5. What benchmarks should I compare against? 6. Any red flags in the dashboard structure? My business type: [DESCRIBE YOUR BUSINESS] My main goal: [LEADS / REVENUE / BRAND AWARENESS / OTHER]
Dashboard overview
This dashboard is built for the post-launch review. Each section answers a specific question: are we winning, where is it working, which creative carries it, where does the funnel leak, are we pacing the budget, what is blocking us, and what do we do next. Set it up once against the brief's targets, populate it each review cycle, and let the decisions section drive the next move.
Data inputs
Where the numbers come from.
- Ad platform data (Meta, Google, LinkedIn, etc.) for spend, impressions, reach, clicks
- Analytics for sessions, conversion rate, and landing page behavior
- CRM or e-commerce data for leads, purchases, and revenue
- The Campaign Brief Template for KPI targets and budget
- Creative naming and UTM tags for channel and creative attribution
Dashboard section
Executive Snapshot
The three-line story of the campaign so far. Anyone should understand where it stands in ten seconds.
Status vs. goal
On track, ahead, or behind against the primary KPI target.
Target
On track or ahead of the brief target
Source: Comparison of primary KPI to brief target
Primary KPI to date
Current value of the single metric that defines success.
Target
Set in the Campaign Brief Template
Source: Ad platform, CRM, or analytics depending on goal
Headline summary
One sentence on what is happening and why.
Dashboard section
KPI Table
The core numbers in one place, each compared to target and to the prior period.
Spend
Total media spend for the period.
Target
Within approved budget pacing
Source: Ad platforms + media invoices
Impressions
Total times the ads were served.
Source: Ad platforms
Reach
Unique people who saw the ads.
Source: Ad platforms
CTR
Click-through rate: clicks divided by impressions.
Source: Ad platforms
CPC
Average cost per click.
Source: Ad platforms
Leads or purchases
Total primary results generated.
Target
On pace for the campaign goal
Source: CRM or e-commerce platform
Cost per result
Spend divided by number of results.
Target
At or below the brief target
Source: Calculated from spend and results
Conversion rate
Share of clicks or sessions that converted.
Source: Analytics or landing page tool
Revenue
Revenue attributed to the campaign, where relevant.
Source: E-commerce or CRM (omit if not applicable)
ROAS
Return on ad spend, where revenue is tracked.
Source: Calculated from revenue and spend (omit if not applicable)
Dashboard section
Channel Performance
Results broken down by channel so budget can move toward what works.
Spend by channel
How much was spent on each active channel.
Source: Ad platforms
Results by channel
Primary result count per channel.
Source: CRM or analytics with source tagging
Cost per result by channel
Channel-level efficiency.
Source: Calculated from channel spend and results
Best and worst channel
The most and least efficient channel this period.
Source: Ranking of cost per result by channel
Dashboard section
Creative Performance
Which creative is carrying the campaign and which is dragging it down.
Top creative
The best-performing asset against the primary KPI.
Source: Ad platform creative breakdown
Worst creative
The weakest asset, and whether to pause it.
Source: Ad platform creative breakdown
Creative fatigue signal
Whether top creative is declining (rising frequency, falling CTR).
Source: Trend of CTR and frequency over time
Dashboard section
Landing Page & Funnel Performance
Where traffic converts and where it leaks once it reaches the destination.
Landing page conversion rate
Share of landing page visitors who completed the primary action.
Target
At or above the assumption in the brief
Source: Analytics or landing page tool
Funnel stages
Visit → engage → convert counts through the funnel.
Source: Analytics events
Biggest drop-off
The stage losing the most people.
Source: Stage-to-stage conversion comparison
Dashboard section
Budget & Pacing
Whether spend is on track for the timeframe and where it is concentrated.
Budget pacing
Spend to date versus planned spend for the period.
Target
On pace — not front-loaded or underspending
Source: Ad platform spend vs. brief budget plan
Remaining budget
Budget left for the rest of the campaign.
Source: Approved budget minus spend to date
Spend concentration
Whether spend is over-concentrated in one channel or ad set.
Source: Spend distribution across channels
Dashboard section
Issues & Blockers
Anything getting in the way of performance or of reading it accurately.
Tracking issues
Any events, pixels, or attribution that look broken or missing.
Delivery issues
Disapprovals, learning limits, or under-delivery.
Open blockers
Anything waiting on a person or decision.
Dashboard section
Decisions & Next Actions
The most important section. Every review ends with what to scale, fix, pause, or test — with an owner and a date.
Scale
What is working and should get more budget or focus.
Fix
What is underperforming but worth correcting.
Pause or cut
What should stop now.
Next test
The next experiment worth running.
Owner and deadline
Who owns each decision and by when.
Decision notes
What to decide after reading this dashboard.
- Compare against the brief's KPI target, not against last week's hope.
- Scale only what is efficient and stable — not a single lucky day.
- Pause the worst channel or creative before adding budget anywhere.
- If tracking looks broken, fix attribution before trusting any decision.
- Every review should end with at least one decision, an owner, and a date.
Review questions
Ask these every reporting cycle.
- Does every number come from a verified source and match the brief's targets?
- Is the executive snapshot understandable to someone who was not in the room?
- Can you tell which channel and creative to scale and which to cut?
- Does the funnel section show where the biggest leak is?
- Is the budget pacing on track for the timeframe?
- Is the decisions section filled in with owners and deadlines?