Kraiter
Guides

Analytics

Track sending metrics with tenant-wide, sequence-level, and template-level reporting.

Kraiter provides analytics at multiple levels — tenant-wide, per-sequence, and per-template. Metrics are aggregated into daily and monthly rollups, giving you a clear picture of your email performance over time.

Metric types

Kraiter tracks the following metrics across all levels:

MetricDescription
sentTotal emails sent
deliveredEmails successfully delivered to the recipient's mail server
openedEmails opened (via tracking pixel)
clickedLinks clicked in emails
bouncedEmails that bounced (hard and soft)
complainedEmails reported as spam by recipients
unsubscribedRecipients who unsubscribed after receiving the email

Derived rates

From these raw counts, you can calculate useful rates:

  • Delivery ratedelivered / sent
  • Open rateopened / delivered
  • Click rateclicked / delivered
  • Click-to-open rateclicked / opened
  • Bounce ratebounced / sent
  • Complaint ratecomplained / delivered

Tenant-wide metrics

Get an overview of all sending activity across your tenant:

SDK
const metrics = await kraiter.metrics.tenant({
  period: 'daily',
  from: '2025-06-01',
  to: '2025-06-30',
});

for (const day of metrics.items) {
  console.log(`${day.date}: ${day.sent} sent, ${day.delivered} delivered, ${day.opened} opened`);
}
cURL
curl "https://api.kraiter.com/metrics?period=daily&from=2025-06-01&to=2025-06-30" \
  -H "Authorization: Bearer YOUR_API_KEY"

Periods

PeriodDescription
dailyOne data point per day
monthlyOne data point per month

Sequence-level metrics

View metrics for a specific sequence to understand how your automated workflow is performing:

SDK
const metrics = await kraiter.metrics.sequence('onboarding', {
  period: 'daily',
  from: '2025-06-01',
  to: '2025-06-30',
});

for (const day of metrics.items) {
  const openRate = day.delivered > 0 ? (day.opened / day.delivered * 100).toFixed(1) : '0.0';
  console.log(`${day.date}: ${day.sent} sent, ${openRate}% open rate`);
}
cURL
curl "https://api.kraiter.com/metrics/sequences/onboarding?period=daily&from=2025-06-01&to=2025-06-30" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sequence-level metrics help you identify which sequences are performing well and which need attention. Compare open and click rates across sequences to find your most engaging content.

Template-level metrics

View metrics for a specific template across all sends (both transactional and sequence):

SDK
const metrics = await kraiter.metrics.template('welcome-email', {
  period: 'monthly',
  from: '2025-01-01',
  to: '2025-06-30',
});

for (const month of metrics.items) {
  console.log(`${month.date}: ${month.sent} sent, ${month.bounced} bounced`);
}
cURL
curl "https://api.kraiter.com/metrics/templates/welcome-email?period=monthly&from=2025-01-01&to=2025-06-30" \
  -H "Authorization: Bearer YOUR_API_KEY"

Template-level metrics let you compare the performance of different email designs and content. Use this data to iterate on your templates.

Response format

All metrics endpoints return the same response structure:

{
  "items": [
    {
      "date": "2025-06-01",
      "sent": 1250,
      "delivered": 1230,
      "opened": 410,
      "clicked": 85,
      "bounced": 15,
      "complained": 2,
      "unsubscribed": 8
    },
    {
      "date": "2025-06-02",
      "sent": 980,
      "delivered": 970,
      "opened": 340,
      "clicked": 62,
      "bounced": 8,
      "complained": 1,
      "unsubscribed": 5
    }
  ]
}

Monitoring key indicators

Bounce rate

Keep your bounce rate below 5%. A sustained rate above this threshold indicates list quality issues:

  • Remove contacts who consistently bounce
  • Use double opt-in to validate new email addresses
  • Regularly clean your contact list

Complaint rate

Keep your complaint rate below 0.1%. ISPs take complaints seriously:

  • Make unsubscribe easy and visible
  • Only send to contacts who have opted in
  • Set clear expectations about email frequency during signup

Open rate benchmarks

Open rates vary by industry and email type, but typical ranges are:

  • Transactional emails: 60-80% (password resets, order confirmations)
  • Welcome sequences: 40-60%
  • Marketing sequences: 15-30%
  • Re-engagement campaigns: 10-20%

Remember that open tracking has limitations (see the Tracking guide), so treat these as directional metrics rather than exact measurements.

Using the metrics API in your application

You can build custom dashboards and reporting by pulling metrics from the API:

SDK
async function generateWeeklyReport() {
  const now = new Date();
  const weekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);

  const metrics = await kraiter.metrics.tenant({
    period: 'daily',
    from: weekAgo.toISOString().split('T')[0],
    to: now.toISOString().split('T')[0],
  });

  const totals = metrics.items.reduce(
    (acc, day) => ({
      sent: acc.sent + day.sent,
      delivered: acc.delivered + day.delivered,
      opened: acc.opened + day.opened,
      clicked: acc.clicked + day.clicked,
      bounced: acc.bounced + day.bounced,
    }),
    { sent: 0, delivered: 0, opened: 0, clicked: 0, bounced: 0 },
  );

  console.log('Weekly Report');
  console.log(`Sent: ${totals.sent}`);
  console.log(`Delivery rate: ${(totals.delivered / totals.sent * 100).toFixed(1)}%`);
  console.log(`Open rate: ${(totals.opened / totals.delivered * 100).toFixed(1)}%`);
  console.log(`Click rate: ${(totals.clicked / totals.delivered * 100).toFixed(1)}%`);
  console.log(`Bounce rate: ${(totals.bounced / totals.sent * 100).toFixed(1)}%`);
}

Best practices

  • Monitor daily. Check your metrics dashboard regularly to spot trends and issues early.
  • Act on bounces quickly. A spike in bounces indicates a problem — stale list, misconfigured domain, or DNS issue.
  • Compare across sequences. Use sequence-level metrics to identify your best-performing content and replicate what works.
  • Track over time. Monthly rollups show long-term trends that daily data can obscure. Look at both.
  • Set alerts for thresholds. Use the metrics API to build automated alerts when bounce or complaint rates exceed acceptable levels.