Skip to content

Analytics

Track campaign performance with built-in analytics including send volume trends, conversion funnels, reply classification breakdowns, and CSV exports.

Dashboard Overview

The analytics tab provides a comprehensive view of your outreach performance:

flowchart LR
    A[Campaign Analytics] --> B[Volume Trends]
    A --> C[Conversion Funnel]
    A --> D[Reply Classification]
    A --> E[Response Rate]
    A --> F[Placement Rate]
    A --> G[CSV Exports]

    style A fill:#e3f2fd
    style B fill:#e8f5e8
    style G fill:#fff3e0

Metrics

A line chart showing daily email send volume over a configurable time window (7, 14, 30, or 90 days).

  • X-axis: Date.
  • Y-axis: Number of emails sent.
  • Use case: Spot trends, ensure consistent outreach cadence, stay within daily caps.

Conversion Funnel

A bar chart showing lead counts at each status stage:

Stage Description
Discovered Total leads found.
Contacted Leads that received an outreach email.
Replied Leads that responded (interested or neutral).
Placed Leads that resulted in a published backlink.
  • Use case: Identify bottlenecks in your outreach pipeline.

Reply Classification

A breakdown of auto-classified replies:

Classification Color Meaning
Interested Green Positive response — follow up!
Not interested Red Declined — auto-suppressed.
Out of office Yellow Auto-responder — schedule follow-up.
Replied Blue General response — needs review.

Response Rate

Percentage of sent emails that received any reply:

Response Rate = (Total Replies / Total Sent) × 100

Placement Rate

Percentage of contacted leads that resulted in a published backlink:

Placement Rate = (Placed Leads / Contacted Leads) × 100

Analytics API

Campaign Analytics

API: GET /api/v1/backlink-outreach/campaigns/{campaign_id}/analytics

Query parameters:

Parameter Type Default Description
days int 30 Number of days to include in trends.

Response:

{
  "total_leads": 150,
  "leads_by_status": {
    "discovered": 80,
    "contacted": 45,
    "replied": 18,
    "placed": 7,
    "bounced": 5
  },
  "total_attempts": 52,
  "total_replies": 23,
  "replies_by_classification": {
    "interested": 12,
    "not_interested": 5,
    "out_of_office": 3,
    "replied": 3
  },
  "response_rate": 0.44,
  "placement_rate": 0.16,
  "daily_send_volume": [
    {"date": "2025-01-15", "count": 8},
    {"date": "2025-01-16", "count": 12}
  ]
}

Reporting Snapshot

Cross-campaign analytics across all campaigns for the authenticated user.

API: GET /api/v1/backlink-outreach/reporting/snapshot

Response:

{
  "total_campaigns": 5,
  "total_sends": 342,
  "total_replies": 87,
  "total_placements": 14,
  "overall_response_rate": 0.25,
  "overall_placement_rate": 0.04
}

Reply counting

The reporting snapshot counts OutreachReply records (not status == "replied" on attempts). This ensures accuracy — a lead marked "replied" manually without an actual reply record won't inflate the count.

CSV Exports

Export campaign data as CSV files for CRM import, spreadsheet analysis, or client reporting.

Export Leads

API: GET /api/v1/backlink-outreach/campaigns/{campaign_id}/export/leads

Export Attempts

API: GET /api/v1/backlink-outreach/campaigns/{campaign_id}/export/attempts

Export Replies

API: GET /api/v1/backlink-outreach/campaigns/{campaign_id}/export/replies

CSV Safety

All exports include these safety measures:

Measure Purpose
Explicit fieldnames Only expected columns are included.
extrasaction="ignore" Unexpected fields are silently dropped.
Formula injection sanitization Cells starting with =, +, -, @ are prefixed with a single quote to prevent formula injection in spreadsheets.

Export loading

Exports may take a few seconds for large campaigns. The UI shows an "Exporting..." state with a disabled button while the download is in progress.

UI Features

Time Window Selector

Choose from 7, 14, 30, or 90 days for trend charts. The analytics data is re-fetched when the window changes.

Separate Loading States

Each data section (attempts, replies, analytics) has its own loading indicator, so slow analytics queries don't block the entire page.

Error Handling

If analytics or export requests fail, a toast notification shows the error message. On 5xx server errors, the store automatically retries read operations once with exponential backoff.


Next: API Reference — full endpoint documentation.