Skip to main content

Overview

Transmit provides comprehensive real-time analytics to help you understand and optimize your communication performance. Track every message from send to delivery, monitor engagement, and gain insights to improve your campaigns.

Why Real-Time Analytics?

Instant Visibility

See delivery status and engagement the moment it happens

Optimize Performance

Identify what works and refine your messaging strategy

Troubleshoot Issues

Quickly detect and resolve delivery problems

Unified Dashboard

Track email, SMS, and voice metrics in one place

Dashboard Analytics

Overview Metrics

Get a high-level view of your communication performance:
  • Total messages sent across all channels
  • Delivery rate (successfully delivered / sent)
  • Engagement rate (opens + clicks / delivered)
  • Bounce rate (bounced / sent)
  • Cost tracking and credit consumption
  • Hourly, daily, and monthly trends

Channel-Specific Metrics

Email Analytics
  • Sent, delivered, bounced, failed counts
  • Open rate and unique opens
  • Click rate and click-through rate (CTR)
  • Spam complaint rate
  • Time-to-open analysis
  • Device and client breakdown
  • Geographic distribution
SMS Analytics
  • Messages sent and delivered
  • Delivery rate by carrier
  • Opt-out rate
  • Message segment distribution
  • Cost per message
  • Time-to-delivery
Voice Analytics
  • Calls initiated and answered
  • Answer rate
  • Average call duration
  • Failed call reasons
  • Cost per minute
  • Peak calling hours

API Analytics

Retrieve analytics programmatically for custom reporting and integrations:

Get Email Analytics

// Get email analytics for a date range
const analytics = await client.analytics.emails({
  startDate: '2025-01-01',
  endDate: '2025-01-31',
  groupBy: 'day' // 'hour', 'day', 'week', 'month'
});

console.log('Total sent:', analytics.totalSent);
console.log('Delivery rate:', analytics.deliveryRate);
console.log('Open rate:', analytics.openRate);
console.log('Click rate:', analytics.clickRate);

Response Format

{
  "totalSent": 15420,
  "delivered": 15198,
  "bounced": 142,
  "failed": 80,
  "opened": 8234,
  "clicked": 2156,
  "deliveryRate": 0.986,
  "openRate": 0.542,
  "clickRate": 0.142,
  "clickToOpenRate": 0.262,
  "bounceRate": 0.009,
  "spamRate": 0.002,
  "timeline": [
    {
      "date": "2025-01-01",
      "sent": 523,
      "delivered": 515,
      "opened": 278,
      "clicked": 72
    }
    // ... more data points
  ]
}

Filter by Tags

Track performance of specific campaigns or message types:
const analytics = await client.analytics.emails({
  startDate: '2025-01-01',
  endDate: '2025-01-31',
  tags: ['newsletter', 'promotional']
});

Filter by Domain

Analyze performance by recipient domain:
const analytics = await client.analytics.emails({
  startDate: '2025-01-01',
  endDate: '2025-01-31',
  recipientDomain: 'gmail.com'
});

Real-Time Event Tracking

Track individual message events in real-time:

Email Events

EventDescriptionWhen It Fires
email.queuedEmail accepted for sendingImmediately after API call
email.sentEmail sent to recipient’s serverWithin seconds
email.deliveredEmail confirmed delivered1-30 seconds after send
email.openedRecipient opened the emailWhen tracking pixel loads
email.clickedRecipient clicked a linkWhen tracked link is clicked
email.bouncedEmail bounced back1-60 seconds after send
email.complainedMarked as spamWhen recipient reports spam
email.unsubscribedRecipient unsubscribedWhen unsubscribe link clicked

SMS Events

EventDescriptionWhen It Fires
sms.queuedSMS accepted for sendingImmediately after API call
sms.sentSMS sent to carrierWithin seconds
sms.deliveredSMS delivered to device1-60 seconds after send
sms.failedSMS failed to deliver1-60 seconds after send
sms.unsubscribedRecipient sent STOPWhen STOP keyword received

Voice Events

EventDescriptionWhen It Fires
voice.initiatedCall initiatedImmediately
voice.ringingPhone is ringing1-5 seconds
voice.answeredCall was answeredWhen recipient picks up
voice.completedCall completedWhen call ends
voice.busyLine was busyImmediately
voice.no_answerNo answerAfter timeout (usually 30s)
voice.failedCall failedWhen error occurs

Webhooks for Real-Time Notifications

Receive instant notifications for all events:

Setup

  1. Configure webhook endpoint in your dashboard
  2. Select events to receive
  3. Verify webhook signature for security

Example Webhook Handler

import express from 'express';

const app = express();
app.use(express.json());

app.post('/webhooks/transmit', async (req, res) => {
  const { event, channel, data } = req.body;

  // Log event to your analytics system
  await logToAnalytics({
    event,
    channel,
    messageId: data.id,
    timestamp: data.timestamp,
    metadata: data
  });

  // Update your database
  if (event === 'email.delivered') {
    await updateEmailStatus(data.id, 'delivered');
  } else if (event === 'email.opened') {
    await trackEngagement(data.id, 'opened');
  }

  res.status(200).send('OK');
});

Engagement Tracking

Email Open Tracking

Transmit automatically tracks email opens using an invisible tracking pixel:
const response = await client.emails.send({
  from: 'hello@yourdomain.com',
  to: 'user@example.com',
  subject: 'Product Update',
  html: '<h1>New Features</h1>',
  tracking: {
    opens: true // Enable open tracking
  }
});
How it works:
  • Invisible 1x1 pixel image inserted into email
  • Pixel loads when email is opened
  • Event fired to your webhooks
  • Tracked in dashboard analytics
Limitations:
  • Requires images to be enabled in email client
  • May not track all opens (privacy features)
  • Multiple opens may be tracked if email reopened
Track which links recipients click:
const response = await client.emails.send({
  from: 'hello@yourdomain.com',
  to: 'user@example.com',
  subject: 'Check out our sale!',
  html: '<a href="https://example.com/sale">Shop Now</a>',
  tracking: {
    clicks: true // Enable click tracking
  }
});
How it works:
  • Links automatically wrapped with tracking URLs
  • Recipient redirected through tracking server
  • Click event recorded and fired
  • Recipient lands on intended destination
Data captured:
  • Link URL clicked
  • Timestamp
  • User agent and device info
  • Geographic location (IP-based)

Geographic Analytics

Understand where your messages are being delivered and opened:
const geoAnalytics = await client.analytics.geographic({
  channel: 'email',
  startDate: '2025-01-01',
  endDate: '2025-01-31'
});

// Returns breakdown by country/region
console.log(geoAnalytics.byCountry);
// [
//   { country: 'US', sent: 10234, opened: 5421 },
//   { country: 'UK', sent: 2341, opened: 1203 },
//   ...
// ]

Device & Client Analytics

See what devices and email clients your recipients use:
const deviceAnalytics = await client.analytics.devices({
  startDate: '2025-01-01',
  endDate: '2025-01-31'
});

console.log(deviceAnalytics.byClient);
// [
//   { client: 'Gmail', opens: 3421, percentage: 0.42 },
//   { client: 'Apple Mail', opens: 2341, percentage: 0.29 },
//   { client: 'Outlook', opens: 1567, percentage: 0.19 },
//   ...
// ]

console.log(deviceAnalytics.byDevice);
// [
//   { device: 'Mobile', opens: 4532, percentage: 0.56 },
//   { device: 'Desktop', opens: 2987, percentage: 0.37 },
//   { device: 'Tablet', opens: 543, percentage: 0.07 }
// ]

Performance Insights

Deliverability Score

Transmit calculates a deliverability score based on:
  • Delivery rate
  • Bounce rate
  • Spam complaint rate
  • Domain reputation
  • Historical performance
const score = await client.analytics.deliverabilityScore();

console.log(score.overall); // 0.0 - 100.0
console.log(score.breakdown);
// {
//   deliveryRate: 98.6,
//   bounceRate: 0.9,
//   spamRate: 0.2,
//   domainReputation: 95.0
// }

Send Time Optimization

Find the best times to send messages:
const timeAnalytics = await client.analytics.sendTimes({
  channel: 'email',
  metric: 'openRate' // or 'clickRate'
});

console.log(timeAnalytics.bestTimes);
// [
//   { hour: 10, day: 'Tuesday', openRate: 0.67 },
//   { hour: 14, day: 'Wednesday', openRate: 0.64 },
//   ...
// ]

Cost Analytics

Track spending across all channels:
const costAnalytics = await client.analytics.costs({
  startDate: '2025-01-01',
  endDate: '2025-01-31',
  groupBy: 'channel'
});

console.log(costAnalytics.byChannel);
// [
//   { channel: 'email', messages: 15420, cost: 7.71 },
//   { channel: 'sms', messages: 3421, cost: 34.21 },
//   { channel: 'voice', messages: 234, cost: 23.40 }
// ]

Export Analytics

Export analytics data for external analysis:
// Export to CSV
const csvData = await client.analytics.export({
  format: 'csv',
  startDate: '2025-01-01',
  endDate: '2025-01-31',
  channel: 'email'
});

// Export to JSON
const jsonData = await client.analytics.export({
  format: 'json',
  startDate: '2025-01-01',
  endDate: '2025-01-31',
  includeEvents: true
});

Best Practices

Track Strategically

Enable tracking only when you need it. Respect user privacy.

Monitor Trends

Look at trends over time, not just absolute numbers. Watch for sudden changes.

Segment Your Data

Use tags and filters to understand performance by campaign, audience, or type.

Act on Insights

Use analytics to make decisions. Test different approaches and measure results.

Set Up Alerts

Configure webhooks to get notified of anomalies or important events.

Clean Your Lists

Remove bounced addresses and unsubscribed contacts to maintain sender reputation.

Next Steps

I