List campaign activity
Contacts who opened, clicked, unsubscribed, bounced or complained on a campaign, or did not open or click.
MCP tool emailoctopus_read → list_campaign_activity
Returns the contacts behind one count of a campaign report, 100 to a page; pass next_cursor back as cursor. activity picks the report: opened, clicked, unsubscribed, bounced, complained, did_not_open or did_not_click. With activity clicked, link limits the list to one tracked link. time is the first interaction in UTC and count the number of interactions. A contact deleted since the send has a blank email address but keeps its activity. did_not_open can include contacts who were not sent the campaign and, because Apple Mail pre-fetches the tracking pixel, people who never read it.
Parameters
| Name | Type | Description |
|---|---|---|
| campaign_id string required | string | Campaign ID from list_campaigns. |
| activity enum required | enum | opened, clicked, unsubscribed, bounced, complained, did_not_open or did_not_click. |
| link string | string | A tracked link from get_campaign_report; only with activity clicked. |
| cursor string | string | next_cursor from the previous call. |
tools/call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "emailoctopus_read",
"arguments": {
"operation": "list_campaign_activity",
"arguments": {
"campaign_id": "campaign_8c41d2",
"activity": "opened"
}
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"activity": "clicked",
"contacts": [
{
"contact_id": "e3ab8c80-5f65-11ed-835e-030e4bb63150",
"email_address": "sam@example.com",
"time": "2026-10-14T08:12:00Z",
"count": 2,
"subscribed": true
},
{
"contact_id": "f1c2d3e4-6a7b-11ed-9c8d-0242ac120002",
"email_address": "lena@example.org",
"time": "2026-10-14T11:47:00Z",
"count": 1,
"subscribed": true
}
],
"next_cursor": null
},
"isError": false
}