Files
ALwrity/docs-site/docs/features/backlink-outreach/analytics.md

182 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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:
```mermaid
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
### Send Volume Trends
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:**
```json
{
"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:**
```json
{
"total_campaigns": 5,
"total_sends": 342,
"total_replies": 87,
"total_placements": 14,
"overall_response_rate": 0.25,
"overall_placement_rate": 0.04
}
```
!!! note "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. |
!!! warning "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](api-reference.md) — full endpoint documentation.*