Analytics

Last updated on 2026-08-27

The analytics suite provides comprehensive email marketing intelligence across seven dedicated screens. From high-level KPI dashboards to granular deliverability monitoring, every metric is visualized with Recharts and backed by typed seed data.

Analytics Overview (/analytics)

The analytics overview is the entry point for all marketing intelligence.

KPI Cards

Metric Description Format
Total Subscribers Current subscriber count Compact number (e.g., 28.4K)
Monthly Growth Net subscriber growth this month Percentage with trend
Average Open Rate Open rate across all campaigns Percentage
Average Click Rate Click rate across all campaigns Percentage
Total Revenue Revenue attributed to email campaigns Currency (USD)
Active Automations Number of automations currently running Count

Data Model

interface DashboardMetrics {
  totalSubscribers: number;
  monthlyGrowth: number;
  avgOpenRate: number;
  avgClickRate: number;
  totalRevenue: number;
  activeAutomations: number;
}

Campaign Analytics (/analytics/campaigns)

Detailed performance analysis across all campaigns.

Features

  • Campaign comparison table -- side-by-side open rates, click rates, and revenue
  • Time range filtering -- filter by 7 days, 30 days, 90 days, or 12 months
  • Performance charts -- bar and line charts showing campaign metrics over time
  • Top performers -- highlight the best-performing campaigns by open rate, click rate, or revenue

Data Model

interface CampaignPerformanceData {
  campaignId: string;
  name: string;
  openRate: number;
  clickRate: number;
  revenue: number;
}

Audience Analytics (/analytics/audience)

Track subscriber growth and engagement trends.

Features

  • Growth chart -- time-series chart showing new subscribers, unsubscribes, and net growth by month
  • Engagement distribution -- breakdown of subscribers by engagement tier (hot, warm, cold)
  • Geographic data -- subscriber distribution by country with open rates per region
  • Churn analysis -- unsubscribe rate trends and potential churn indicators

Data Models

interface SubscriberGrowthData {
  month: string;
  subscribers: number;
  unsubscribes: number;
  netGrowth: number;
}

interface EngagementDistribution {
  hot: number;
  warm: number;
  cold: number;
}

interface GeoData {
  country: string;
  countryCode: string;
  subscribers: number;
  openRate: number;
}

Revenue Analytics (/analytics/revenue)

Track email-attributed revenue over time.

Features

  • Revenue chart -- monthly revenue trend line
  • Revenue per campaign -- ranked list of campaigns by revenue generated
  • Revenue per automation -- ranked list of automations by revenue generated
  • Total attribution -- aggregate revenue across all email touchpoints

Data Model

interface RevenueData {
  month: string;
  revenue: number;
}

Click Map (/analytics/click-map)

Visual email overlay showing click density on each link.

Features

  • Email overlay -- rendered email with click percentage annotations on each link
  • Heat-zone highlighting -- color-coded zones based on click density (high, medium, low)
  • Click counts -- total clicks and unique clicks per link
  • Device breakdown -- click distribution across desktop, mobile, and tablet
  • Top clicked links -- ranked list with URLs, click counts, and percentages

Data Models

interface TopClickedLink {
  url: string;
  clicks: number;
  uniqueClicks: number;
  percentage: number;
}

interface DeviceBreakdown {
  desktop: number;
  mobile: number;
  tablet: number;
}

Deliverability Dashboard (/analytics/deliverability)

Monitor email deliverability health across all sending domains.

Metrics

Metric Description Healthy Range
Inbox Placement Percentage of emails landing in inbox > 95%
Spam Rate Percentage flagged as spam < 0.1%
Bounce Rate Percentage of bounced emails < 2%
Hard Bounce Rate Permanent delivery failures < 0.5%
Soft Bounce Rate Temporary delivery failures < 2%
Complaint Rate Percentage of spam complaints < 0.1%
Domain Reputation Overall sending reputation score > 90

ISP Breakdown

Per-provider deliverability metrics:

interface IspBreakdownItem {
  provider: string;  // "Gmail", "Outlook", "Yahoo", etc.
  inboxRate: number;
  spamRate: number;
  bounceRate: number;
}

Authentication Status

Domain authentication verification:

interface AuthStatus {
  spf: boolean | AuthStatusDetail;
  dkim: boolean | AuthStatusDetail;
  dmarc: boolean | AuthStatusDetail;
}

interface AuthStatusDetail {
  verified: boolean;
  recordValue: string;
}

Full Data Model

interface DeliverabilityMetrics {
  inboxPlacement: number;
  spamRate: number;
  bounceRate: number;
  hardBounceRate?: number;
  softBounceRate?: number;
  complaintRate: number;
  domainReputation: number;
  ispBreakdown: IspBreakdownItem[];
  authStatus: AuthStatus;
}

Domain Authentication (/analytics/domains)

Manage and verify sending domain authentication.

Features

  • Domain list -- all configured sending domains with verification status
  • DNS records -- SPF, DKIM, and DMARC record details with values to add
  • Verification status -- per-record verification with timestamps
  • Custom tracking domain -- CNAME record for branded tracking links

Data Model

interface DomainAuth {
  domain: string;
  spf?: boolean;
  dkim?: boolean;
  dmarc?: boolean;
  customTracking?: boolean;
  records: DnsRecord[];
  verifiedAt?: string;
}

interface DnsRecord {
  type: string;
  name: string;
  value: string;
  verified: boolean;
  verifiedAt?: string;
}

Bounce Management (/analytics/bounces)

Track and manage email bounces.

Features

  • Bounce log -- table of all bounce events with email, type, reason, campaign, and date
  • Bounce type filtering -- filter by hard bounces or soft bounces
  • Bounce reasons -- categorized reasons (mailbox full, invalid address, domain not found, etc.)
  • Campaign association -- link bounces to the campaign that triggered them
  • Export -- download bounce data for further analysis

Bounce Types

Type Description Action
hard Permanent failure (invalid address, domain not found) Auto-suppress the address
soft Temporary failure (mailbox full, server down) Retry delivery later

Data Model

interface BounceEntry {
  id: string;
  email: string;
  type: 'hard' | 'soft';
  reason: string;
  campaignId?: string;
  date?: string;
  bouncedAt?: string;
}