CampaignsCampaign analytics

Campaign analytics

Returns detailed campaign analytics including:

  • Overall campaign stats (sent, opened, clicked, bounced, replied, unsubscribed)
  • Main-sequence step analytics and frontend-compatible A/B variant breakdowns
  • Lead status breakdown (active, completed, bounced, etc.)
  • Total replied and positive replied counts

Without from/to, returns all-time data. Supply one or both to filter by date range. Date filters on sent/opened/clicked/bounced step totals are scoped to email send date; replies are scoped to reply date.

curl -X GET "https://api.sendkit.ai/v1/campaigns/example_string/analytics?from=2024-05-01&to=2024-05-31" \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: YOUR_API_KEY"
{
  "success": true,
  "data": {
    "campaign": {
      "id": "665a1b2c3d4e5f6a7b8c9d0e",
      "name": "Q1 Outreach Campaign",
      "status": "active",
      "startedAt": "2025-06-15T09:00:00.000Z"
    },
    "stats": {
      "sent": 150,
      "delivered": 145,
      "opened": 72,
      "clicked": 18,
      "replied": 12,
      "bounced": 5,
      "failed": 0,
      "unsubscribed": 2
    },
    "bySequence": {
      "main": {
        "sent": 130,
        "opened": 60,
        "clicked": 14,
        "bounced": 4
      },
      "subsequence": {
        "sent": 20,
        "opened": 12,
        "clicked": 4,
        "bounced": 1
      }
    },
    "stepAnalytics": [
      {
        "_id": {
          "sequenceStep": 0,
          "displayStep": 1,
          "variant": "A"
        },
        "sent": 70,
        "opened": 32,
        "clicked": 8,
        "bounced": 2,
        "failed": 0,
        "replied": 4,
        "positiveReplied": 2,
        "totalOpens": 50,
        "totalClicks": 10
      },
      {
        "_id": {
          "sequenceStep": 0,
          "displayStep": 1,
          "variant": "B"
        },
        "sent": 60,
        "opened": 28,
        "clicked": 6,
        "bounced": 2,
        "failed": 0,
        "replied": 3,
        "positiveReplied": 1,
        "totalOpens": 43,
        "totalClicks": 7
      }
    ],
    "steps": [
      {
        "stepNumber": 0,
        "displayStepNumber": 1,
        "stepName": "Initial email",
        "subject": "Quick question",
        "isInThreadReply": false,
        "sent": 130,
        "opened": 60,
        "openRate": "46.15",
        "clicked": 14,
        "clickRate": "10.77",
        "replied": 7,
        "replyRate": "5.56",
        "positiveReplied": 3,
        "positiveReplyRate": "42.86",
        "bounced": 4,
        "bounceRate": "3.08",
        "failed": 0,
        "failureRate": "0.00",
        "totalOpens": 93,
        "totalClicks": 17,
        "avgOpensPerEmail": "0.72",
        "avgClicksPerEmail": "0.13",
        "variants": [
          {
            "label": "A",
            "subject": "Quick question",
            "sent": 70,
            "opened": 32,
            "openRate": "45.71",
            "clicked": 8,
            "clickRate": "11.43",
            "replied": 4,
            "replyRate": "5.88",
            "positiveReplied": 2,
            "positiveReplyRate": "50.00",
            "bounced": 2,
            "bounceRate": "2.86",
            "failed": 0,
            "failureRate": "0.00",
            "totalOpens": 50,
            "totalClicks": 10
          },
          {
            "label": "B",
            "subject": "Quick question - alternate",
            "sent": 60,
            "opened": 28,
            "openRate": "46.67",
            "clicked": 6,
            "clickRate": "10.00",
            "replied": 3,
            "replyRate": "5.17",
            "positiveReplied": 1,
            "positiveReplyRate": "33.33",
            "bounced": 2,
            "bounceRate": "3.33",
            "failed": 0,
            "failureRate": "0.00",
            "totalOpens": 43,
            "totalClicks": 7
          }
        ]
      }
    ],
    "subsequences": [
      {
        "id": "665c1b2c3d4e5f6a7b8c9d20",
        "name": "Interested follow-up",
        "trigger": {
          "type": "ai_tag",
          "value": "interested"
        },
        "enabled": true,
        "archived": false,
        "addedCount": 18,
        "currentlyEnrolled": 9,
        "stats": {
          "sent": 20,
          "opened": 12,
          "clicked": 4,
          "bounced": 1,
          "replied": 5
        },
        "stepStats": [
          {
            "_id": 0,
            "sent": 14,
            "opened": 9,
            "clicked": 3,
            "bounced": 1
          },
          {
            "_id": 1,
            "sent": 6,
            "opened": 3,
            "clicked": 1,
            "bounced": 0
          }
        ]
      }
    ],
    "statusBreakdown": {
      "active": 350,
      "completed": 100,
      "bounced": 5,
      "unsubscribed": 2,
      "replied": 12,
      "removed": 31
    },
    "totalReplied": 12,
    "totalPositiveReplied": 4
  }
}
GET
/v1/campaigns/{campaignId}/analytics
GET
Base URLstring

Target server for requests. Edit to use your own host.

API Key (header: X-Api-Key)
X-Api-Keystring
Required

Platform API key (sk_user_...) or Workspace API key (sk_...)

Platform API key (sk_user_...) or Workspace API key (sk_...)
query
fromstring

Start date (ISO 8601 or date string). Omit for no lower bound.

Format: date
query
tostring

End date (ISO 8601 or date string). Omit for no upper bound.

Format: date
Request Preview
Response

Response will appear here after sending the request

Authentication

header
X-Api-Keystring
Required

API Key for authentication. Platform API key (sk_user_...) or Workspace API key (sk_...)

Path Parameters

Query Parameters

fromstring

Start date (ISO 8601 or date string). Omit for no lower bound.

Example:
2024-05-01
tostring

End date (ISO 8601 or date string). Omit for no upper bound.

Example:
2024-05-31

Responses

successboolean
dataobject