Skip to main content
Robase rewrites tracked links through our proxy and injects a 1×1 pixel into HTML bodies. You opt in per send:
await pm.emails.send({
  from, to, subject, html,
  track_opens: true,
  track_clicks: true,
});

Events fired

EventWhen
email.openedTracking pixel fetched. Fires once per open (but the same recipient opening twice fires twice).
email.clickedA rewritten link was clicked.
Both include the original email’s ID + recipient in the webhook data.

Privacy considerations

Open tracking relies on a 1×1 image. Some mail clients (Apple Mail Privacy Protection, ProtonMail) pre-fetch images, so email.opened fires even if the human never looked. Treat open rates as a relative signal, not absolute truth.
Click tracking is more reliable — it only fires on actual click-through. For GDPR / NDPR compliance, your privacy policy should disclose that you track opens/clicks in transactional email.

Turning it off per message

// Sensitive transactional email — no tracking
await pm.emails.send({
  from, to,
  subject: 'Your password reset link',
  html: '<p>Reset: <a href="https://app.example/reset?token=...">here</a></p>',
  track_opens: false,    // don't leak "you read the email"
  track_clicks: false,   // don't rewrite the one-time token link
});
Never turn on click tracking for emails containing one-time tokens (password reset, magic link). The rewrite proxy changes the URL, which can invalidate tokens that are cryptographically tied to the URL.

Dashboard analytics

The dashboard aggregates opens / clicks by email, campaign tag, and time range. Filter by a tags[] value set at send time to see a specific campaign’s performance:
await pm.emails.send({
  from, to, subject, html,
  tags: ['campaign:launch-q2-2026'],
});
Then filter the dashboard by tag:campaign:launch-q2-2026.