Every send writes a SendOutcomeLog row. Every open, click, reply, and bounce updates the denormalized counters on the Campaign record. The combination gives you live-forward metrics you can read without waiting on a nightly job. This article walks through the metrics that matter, the step-level breakdowns that matter more, and the Growth Brain signals that turn a single campaign's performance into a repeatable pattern.
The Six Live Metrics
Every active campaign surfaces six core counters updated as sends happen.
total_sent. Count of messages handed off to the sending platform (ReachInbox or equivalent). Increments immediately on successful hand-off.
delivered. Count of messages the sending platform confirms arrived at the recipient MTA. Usually within a few seconds of total_sent.
opened. Count of tracking pixel fires. One open per contact per message by default; re-opens are counted separately if you enable the detailed mode.
clicked. Count of link clicks through the tracking domain. Unique clicks by default.
replied. Count of inbound replies matched back to the campaign via thread ID.
bounced. Count of SMTP-level or content-filter bounces. Classified further by the bounce intelligence layer.
Derived rates are computed on read: open_rate = opened / delivered, reply_rate = replied / delivered, bounce_rate = bounced / total_sent.
Step Level Breakdown
A campaign with a four-step sequence has four step-level metric rows. Each row carries its own opens, clicks, replies, and bounces.
This breakdown is the single most useful view in campaign analytics. Aggregate metrics hide the drop-offs between steps. Step level shows you exactly where contacts churn out.
A healthy cold outreach sequence roughly follows this pattern.
| Step | Typical open rate | Typical reply rate | | ---- | ----------------- | ------------------ | | 1 | 45% to 60% | 3% to 6% | | 2 | 35% to 50% | 3% to 5% | | 3 | 25% to 40% | 2% to 4% | | 4 | 20% to 35% | 1% to 3% |
Deviations from this pattern tell a story. A step 2 open rate equal to step 1 is surprising; either step 1 was weak or step 2 subject is unusually strong. A step 3 reply rate higher than step 2 usually means the step 2 copy was hurting you, and step 3 would have worked earlier.
Reply Intent Distribution
The reply intelligence layer classifies every reply into an intent category. The campaign analytics page shows the distribution.
A healthy cold outreach campaign to a reasonable ICP segment looks like:
- Interested: 10% to 25% of replies
- Not interested: 30% to 50%
- Objection: 15% to 25%
- OOO: 10% to 20%
- Referral: 3% to 10%
- Negative or aggressive: under 3%
Three red flags to watch.
Negative or aggressive above 5 percent. Means the copy is reading as spam. Rewrite or pause.
OOO above 25 percent. The send timing is off; check the send window and the time zone resolution.
Not interested above 60 percent. The offer or the ICP is wrong. Either narrow the segment or rethink the value proposition.
Bounce Classification Breakdown
Bounce intelligence splits bounces into categories. The analytics page shows the breakdown.
Hard bounce. Invalid address. The contact is marked invalid and never retried. Usually 1 to 2 percent of a clean list.
Soft bounce. Temporary failure. The engine retries with exponential backoff. Usually under 1 percent.
Content filter. The message was rejected by the recipient's content filter, not for address reasons. Signals a subject or body problem.
Reputation. The recipient ISP rejected because of sender reputation. Signals a deliverability problem that needs immediate attention.
Rate limit. The recipient server throttled the send. Retry later.
A bounce breakdown heavy in content filter or reputation categories is a crisis signal. Pause and investigate before the bounce rate crosses the campaign's auto-pause threshold.
Unsubscribe Tracking
Unsubscribe rate is a direct negative signal. Anything over 2 percent on a cold outreach campaign is high. The platform auto-pauses at 2 percent over 24 hours for cold outreach.
Unsubscribes are logged with a timestamp and, if the user clicked a specific reason during the unsubscribe flow, a reason code. Common reason codes include "not relevant", "too frequent", "never signed up". A spike in "never signed up" means the list is not who you think it is.
Unsubscribes flow into the SuppressionList automatically and are enforced across all future campaigns for that workspace.
Spam Complaint Rate
Spam complaints are the single most important metric to watch for reputation. The auto-pause threshold for cold outreach is 0.1 percent over 24 hours. One complaint per thousand sent is the ceiling; above that, reputation damage is difficult to reverse.
Spam complaint counts come from ISP feedback loops (Gmail, Yahoo) and direct reporter cooperation. Microsoft does not provide complaint data as reliably, so the count on Microsoft recipients is approximate.
Zero spam complaints is the baseline for a healthy campaign. A single complaint is not a crisis, but it is a signal to watch the next 48 hours carefully.
Time Series View
Every metric has a time series view with hourly resolution. The time series is where you spot problems that aggregates hide.
A sudden bounce rate spike an hour into a new campaign usually means one of the target domains is on a blacklist. A gradual reply rate decline over three days usually means the copy is getting stale and needs a refresh. A perfectly flat complaint rate that suddenly jumps is usually a single viral complaint post that amplifies (or an accidental send to the wrong list).
Step Level Send Time Heat Map
The send time optimization engine produces a heat map per step showing open and reply rate by hour of day (recipient local) and day of week. For a step with enough volume (over 500 sends), the heat map is more useful than any aggregate.
Typical B2B cold outreach heat maps show a bright block between 9 AM and 11 AM Tuesday through Thursday. A step whose heat map is flat probably sent across too many time zones simultaneously without the optimization engine running. Check the send_time_mode on the step and the contact time zone resolution.
Growth Brain Cross-Campaign Patterns
Each campaign writes anonymized performance snapshots (CampaignPerformanceSnapshot) to the Growth Brain. The snapshots capture subject patterns, body characteristics, send timing, and outcome metrics.
The Growth Brain then surfaces cross-campaign patterns in the Growth Recommendations feed. Examples:
"Campaigns with subject line under 8 words in your industry had 40 percent higher reply rates last month."
"Campaigns that sent step 1 at 10 AM recipient local had 20 percent higher open rate than those sending at 9 AM."
"Campaigns using the {{personalized_first_line}} variable had 65 percent higher reply rate than those without."
These are aggregates across the entire platform, not just your workspace. Your own campaigns feed into the aggregate and benefit from it.
Pipeline and Revenue Attribution
If you wire a CRM integration, the revenue attribution table traces campaigns to downstream opportunities and closed deals. The attribution is multi-touch: a deal that touched three campaigns before closing gets split credit.
Attribution methods supported include first-touch, last-touch, linear, and time-decay. The default is time-decay, which weights recent touches more heavily.
Revenue attribution requires a CRM connection with opportunity and deal data flowing back to the platform. Without it, the attribution table remains empty, and campaign analytics stops at the reply stage.
Exporting Analytics
Every view is exportable as CSV. Three common exports:
Full campaign export. All metrics, step-level breakdowns, reply intent distribution, bounce classification.
Send-level export. One row per send. Contact, inbox, sent time, delivered time, opened time, click, reply. Useful for bespoke analysis in a spreadsheet or BI tool.
Reply thread export. All reply intents with the thread body and classification. Useful for sales review or sales enablement material.
Custom Reports
For recurring views, the CustomReport model lets you save a filter combination as a named report. Custom reports can be scheduled as ScheduledReport objects that email a CSV or PDF on a cadence.
Scheduled reports are common in agency workflows: every Monday morning, the master agency report for each sub client goes to the client contact. The report template uses the client's branding (from WhiteLabelSettings).
Troubleshooting
"Open rate is suspiciously high"
A few causes worth ruling out. First, tracking pixel prefetch by some ISPs (Apple Mail Privacy Protection in particular) inflates open rates to 100 percent for contacts on those providers. Second, a bot scanner at a large enterprise opens every link and pixel, which fires tracking for every send to that recipient. Third, open tracking can double-count if a message is forwarded.
"Reply rate is zero even though I know people replied"
Reply sync is not running or the IMAP credential is wrong. Check the Email Accounts page for sync status. Also check that the campaign's platform is set correctly; a campaign on Smartlead has a different reply sync path than a campaign on ReachInbox.
"Growth Brain recommendations are empty"
The Growth Brain needs at least 10 completed campaigns across the workspace before it starts surfacing recommendations. Below that threshold, the signal is too noisy to be actionable.
"Attribution shows zero revenue"
The CRM connection is not flowing opportunity data back. Open Integrations, check the CRM connector status, and run a manual sync. Revenue data flows through the CRM integration, not from the email metrics directly.
Frequently Asked Questions
Are metrics real-time or batched?
Near real-time. Updates arrive within 1 to 5 minutes of the underlying event. The only exception is CRM-derived revenue attribution, which syncs on the CRM's cadence (usually hourly).
Can I compare two campaigns side by side?
Yes, from the Campaigns list page. Select two campaigns and click Compare. The comparison view overlays metrics and highlights significant differences.
Does the analytics respect time zone?
The time series and heat maps respect the recipient time zone when showing recipient-side metrics (opens, clicks, replies). Send-side metrics (total_sent) use the sender workspace time zone.
Is there a minimum volume for reliable analytics?
For aggregate open rate, 100 sends per step is the smallest useful sample. Below that, the rates are too noisy to act on.
What to Read Next
Useful next pages after reading analytics: Reply Intelligence for the full reply classification story, A/B Testing for experimenting on copy and timing, and Dashboard Overview for the workspace-level rollup of campaign metrics.