docs/platform/integrations/email/activity-tracking.mdx
Activity tracking gives you visibility into what happens to notifications after they are sent to the subscriber. With it, Novu receive and process real-time events from third-party providers, so that you know when the notification is delivered, opened, clicked, or bounced.
<Note> Email Activity Tracking is available on **Novu Cloud** and **Enterprise self-hosted** only. It is not included in the **Community self-hosted** edition. Contact us at [email protected] to learn more about Enterprise self-hosted licensing. </Note>When your provider emits an event (for example, an email delivered or bounced), Novu:
With activity tracking enabled, you get a full picture of the workflow-run lifecycle, not just that a message was “sent,” but whether it reached the recipient, was opened, or engaged with. This closes the feedback loop and allows you to build more reliable notification experiences.
First create the integration. After that, you can enable activity tracking by following these steps:
If auto-configuration fails or isn’t supported for your provider, you will need to set it up manually. You can do that by following these provider specific guides:
<Columns cols={2}> <Card title="Amazon SES" href="/platform/integrations/email/activity-tracking/manual-configuration/ses"> Manual configuration for Amazon SES Email Activity Tracking </Card> <Card title="Mailgun" href="/platform/integrations/email/activity-tracking/manual-configuration/mailgun"> Manual configuration for Mailgun Email Activity Tracking </Card> <Card title="SendGrid" href="/platform/integrations/email/activity-tracking/manual-configuration/sendgrid"> Manual configuration for SendGrid Email Activity Tracking </Card> <Card title="Resend" href="/platform/integrations/email/activity-tracking/manual-configuration/resend"> Manual configuration for Resend Email Activity Tracking </Card> </Columns>Provider delivery webhook events are normalized into a consistent set of Novu event statuses. These statuses let you track the full lifecycle of a notification across providers in a unified way.
| Novu status | Meaning |
|---|---|
blocked | The provider refused to send the message because the recipient is on a suppression or block list. |
bounced | The message was rejected by the recipient’s server (hard or soft bounce). |
clicked | The recipient clicked a link inside the message. |
complaint | The recipient marked the message as spam or filed a complaint. |
delayed | The provider delayed the message delivery (for example, due to throttling). |
delivered | The provider confirmed that the message was delivered to the recipient’s server. |
dropped | The provider dropped the message before attempting delivery. |
opened | The recipient opened the message (tracked via the provider’s open logic). |
rejected | The provider could not send the message (for example, invalid address, failed policy check). |
sent | The provider has accepted the message for delivery. |
unsubscribed | The recipient unsubscribed from further messages. |
Novu currently supports inbound webhooks for several email providers. Each provider sends events in its own format, which Novu normalizes into a consistent set of internal statuses. These normalized statuses are used in the activity feed, step-run traces, and outbound webhook forwarding.
Events not listed in the tables below are ignored.
Provider event (<native_status>) | Novu event (<novu_event_status>) |
|---|---|
blocked | blocked |
bounce | bounced |
click | clicked |
delivered | delivered |
dropped | dropped |
open | opened |
Provider event (<native_status>) | Novu event (<novu_event_status>) |
|---|---|
clicked | clicked |
complained | complaint |
delivered | delivered |
opened | opened |
permanent_fail, failed | rejected |
unsubscribed | unsubscribed |
Provider event (<native_status>) | Novu event (<novu_event_status>) |
|---|---|
email.bounced | bounced |
email.clicked | clicked |
email.complained | complaint |
email.delivered | delivered |
email.delivery_delayed | delayed |
email.failed | rejected |
email.opened | opened |
email.sent | sent |
Provider event (<native_status>) | Novu event (<novu_event_status>) |
|---|---|
Bounce | bounced |
Complaint | complaint |
Click | clicked |
Delivery | delivered |
DeliveryDelay | delayed |
Open | opened |
Reject | rejected |
Send | sent |
Once provider delivery webhooks are configured, Novu will start processing events from your provider. You can see this new data in two key places within the platform.
The Activity Feed provides the most direct view of the notification lifecycle. After a notification is sent, you will see new status updates such as Delivered, Opened, and Clicked appear in the timeline as they are received from your provider. This gives you a complete, real-time picture of subscriber engagement for each notification.
Provider delivery webhooks don’t just update Novu internally — they can also trigger outbound webhooks, allowing you to send normalized events to your own systems in real time. This makes it possible to extend Novu’s notification lifecycle into your existing infrastructure.
How it works:
This is useful in a number of use cases including: