curl "https://server.smartlead.ai/api/v1/campaigns/123/sequence-analytics?api_key=YOUR_KEY&start_date=2026-09-01T00:00:00.000Z&end_date=2026-09-30T23:59:59.999Z&time_zone=UTC"
import requests
API_KEY = "YOUR_API_KEY"
campaign_id = 123
response = requests.get(
f"https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/sequence-analytics",
params={
"api_key": API_KEY,
"start_date": "2026-09-01T00:00:00.000Z",
"end_date": "2026-09-30T23:59:59.999Z",
"time_zone": "UTC",
},
)
response.raise_for_status()
for sequence in response.json()["data"]["sequences"]:
stats = sequence["total_stats"]
print(f"step {sequence['seq_number']}: sent {stats['sent_count']}, "
f"open {stats['open_percentage']}%, reply {stats['reply_percentage']}%")
const API_KEY = 'YOUR_API_KEY';
const campaignId = 123;
const params = new URLSearchParams({
api_key: API_KEY,
start_date: '2026-09-01T00:00:00.000Z',
end_date: '2026-09-30T23:59:59.999Z',
time_zone: 'UTC',
});
const response = await fetch(
`https://server.smartlead.ai/api/v1/campaigns/${campaignId}/sequence-analytics?${params}`
);
const { data } = await response.json();
data.sequences.forEach((s) => {
console.log(s.seq_number, s.total_stats.sent_count, s.total_stats.reply_percentage);
});
{
"ok": true,
"data": {
"campaign_id": 123,
"sequences": [
{
"id": 4567,
"email_campaign_seq_id": 4567,
"seq_number": 1,
"seq_type": "EMAIL",
"seq_schedule_type": "IMMEDIATE",
"subject_line": "Quick question about {{company_name}}",
"seq_title": null,
"total_stats": {
"sent_count": 1240,
"open_count": 372,
"click_count": 89,
"reply_count": 23,
"bounce_count": 18,
"sender_bounce_count": 3,
"unsubscribed_count": 4,
"skipped_count": 0,
"positive_reply_count": 9,
"open_percentage": 30,
"click_percentage": 7.18,
"reply_percentage": 1.85,
"bounce_percentage": 1.45
},
"engagement_level": "high",
"variants": [
{
"id": 8901,
"variant_label": "A",
"is_baseline": true,
"created_at": "2026-09-01T10:15:00.000Z",
"change_description": null,
"stats": {
"sent_count": 620,
"open_count": 200,
"open_percentage": 32.26,
"click_count": 50,
"click_percentage": 8.06,
"reply_count": 14,
"reply_percentage": 2.26,
"bounce_count": 9,
"sender_bounce_count": 1,
"bounce_percentage": 1.45,
"unsubscribed_count": 2,
"positive_reply_count": 6
}
}
],
"linkedin_stats": null,
"manual_step_stats": null
}
]
}
}
{
"message": "Invalid API Key"
}
{
"error": "Campaign not found - Invalid campaign_id."
}
Campaign Statistics
Fetch Campaign Sequence Analytics
Per-sequence and per-variant performance for a campaign, with rates.
GET
/
api
/
v1
/
campaigns
/
{campaign_id}
/
sequence-analytics
curl "https://server.smartlead.ai/api/v1/campaigns/123/sequence-analytics?api_key=YOUR_KEY&start_date=2026-09-01T00:00:00.000Z&end_date=2026-09-30T23:59:59.999Z&time_zone=UTC"
import requests
API_KEY = "YOUR_API_KEY"
campaign_id = 123
response = requests.get(
f"https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/sequence-analytics",
params={
"api_key": API_KEY,
"start_date": "2026-09-01T00:00:00.000Z",
"end_date": "2026-09-30T23:59:59.999Z",
"time_zone": "UTC",
},
)
response.raise_for_status()
for sequence in response.json()["data"]["sequences"]:
stats = sequence["total_stats"]
print(f"step {sequence['seq_number']}: sent {stats['sent_count']}, "
f"open {stats['open_percentage']}%, reply {stats['reply_percentage']}%")
const API_KEY = 'YOUR_API_KEY';
const campaignId = 123;
const params = new URLSearchParams({
api_key: API_KEY,
start_date: '2026-09-01T00:00:00.000Z',
end_date: '2026-09-30T23:59:59.999Z',
time_zone: 'UTC',
});
const response = await fetch(
`https://server.smartlead.ai/api/v1/campaigns/${campaignId}/sequence-analytics?${params}`
);
const { data } = await response.json();
data.sequences.forEach((s) => {
console.log(s.seq_number, s.total_stats.sent_count, s.total_stats.reply_percentage);
});
{
"ok": true,
"data": {
"campaign_id": 123,
"sequences": [
{
"id": 4567,
"email_campaign_seq_id": 4567,
"seq_number": 1,
"seq_type": "EMAIL",
"seq_schedule_type": "IMMEDIATE",
"subject_line": "Quick question about {{company_name}}",
"seq_title": null,
"total_stats": {
"sent_count": 1240,
"open_count": 372,
"click_count": 89,
"reply_count": 23,
"bounce_count": 18,
"sender_bounce_count": 3,
"unsubscribed_count": 4,
"skipped_count": 0,
"positive_reply_count": 9,
"open_percentage": 30,
"click_percentage": 7.18,
"reply_percentage": 1.85,
"bounce_percentage": 1.45
},
"engagement_level": "high",
"variants": [
{
"id": 8901,
"variant_label": "A",
"is_baseline": true,
"created_at": "2026-09-01T10:15:00.000Z",
"change_description": null,
"stats": {
"sent_count": 620,
"open_count": 200,
"open_percentage": 32.26,
"click_count": 50,
"click_percentage": 8.06,
"reply_count": 14,
"reply_percentage": 2.26,
"bounce_count": 9,
"sender_bounce_count": 1,
"bounce_percentage": 1.45,
"unsubscribed_count": 2,
"positive_reply_count": 6
}
}
],
"linkedin_stats": null,
"manual_step_stats": null
}
]
}
}
{
"message": "Invalid API Key"
}
{
"error": "Campaign not found - Invalid campaign_id."
}
Returns one entry per sequence step in the campaign, each with its own totals, calculated rates and a per-variant breakdown. This is the same data the campaign Analytics tab renders.
Path Parameters
integer
required
The campaign ID
Query Parameters
string
required
Your SmartLead API key
string
required
Start of the reporting window, ISO 8601 (e.g.
2026-09-01T00:00:00.000Z).string
required
End of the reporting window, ISO 8601 (e.g.
2026-09-30T23:59:59.999Z).string
IANA timezone used to bucket the dates, e.g.
America/New_York. Defaults to UTC.curl "https://server.smartlead.ai/api/v1/campaigns/123/sequence-analytics?api_key=YOUR_KEY&start_date=2026-09-01T00:00:00.000Z&end_date=2026-09-30T23:59:59.999Z&time_zone=UTC"
import requests
API_KEY = "YOUR_API_KEY"
campaign_id = 123
response = requests.get(
f"https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/sequence-analytics",
params={
"api_key": API_KEY,
"start_date": "2026-09-01T00:00:00.000Z",
"end_date": "2026-09-30T23:59:59.999Z",
"time_zone": "UTC",
},
)
response.raise_for_status()
for sequence in response.json()["data"]["sequences"]:
stats = sequence["total_stats"]
print(f"step {sequence['seq_number']}: sent {stats['sent_count']}, "
f"open {stats['open_percentage']}%, reply {stats['reply_percentage']}%")
const API_KEY = 'YOUR_API_KEY';
const campaignId = 123;
const params = new URLSearchParams({
api_key: API_KEY,
start_date: '2026-09-01T00:00:00.000Z',
end_date: '2026-09-30T23:59:59.999Z',
time_zone: 'UTC',
});
const response = await fetch(
`https://server.smartlead.ai/api/v1/campaigns/${campaignId}/sequence-analytics?${params}`
);
const { data } = await response.json();
data.sequences.forEach((s) => {
console.log(s.seq_number, s.total_stats.sent_count, s.total_stats.reply_percentage);
});
Response Fields
object
Show properties
Show properties
number
The campaign these sequences belong to.
array
One entry per sequence step, ordered by step number.
Show properties
Show properties
number
Sequence step ID.
email_campaign_seq_id carries the same value.number
Position of this step in the sequence, starting at 1.
string
Step type, e.g.
EMAIL.string
When the step sends, e.g.
IMMEDIATE.string | null
Subject configured on the step.
null on follow-ups that inherit the thread subject.null
Reserved; not currently stored.
string
Derived label for the step’s open rate and volume.
object
Totals across every variant of the step:
sent_count, open_count, click_count, reply_count, bounce_count, sender_bounce_count, unsubscribed_count, skipped_count, positive_reply_count, plus open_percentage, click_percentage, reply_percentage and bounce_percentage.array
Per-variant breakdown. Each entry carries
id, variant_label, is_baseline, created_at, change_description and a stats object with the same counters as total_stats.object | null
LinkedIn counters for LinkedIn steps, otherwise
null.object | null
Counters for manual steps, otherwise
null.Response Codes
Success
Request successful.
Bad Request
Missing or malformed
start_date / end_date.Unauthorized
Invalid or missing API key.
Not Found
The campaign does not exist or you don’t have access to it.
{
"ok": true,
"data": {
"campaign_id": 123,
"sequences": [
{
"id": 4567,
"email_campaign_seq_id": 4567,
"seq_number": 1,
"seq_type": "EMAIL",
"seq_schedule_type": "IMMEDIATE",
"subject_line": "Quick question about {{company_name}}",
"seq_title": null,
"total_stats": {
"sent_count": 1240,
"open_count": 372,
"click_count": 89,
"reply_count": 23,
"bounce_count": 18,
"sender_bounce_count": 3,
"unsubscribed_count": 4,
"skipped_count": 0,
"positive_reply_count": 9,
"open_percentage": 30,
"click_percentage": 7.18,
"reply_percentage": 1.85,
"bounce_percentage": 1.45
},
"engagement_level": "high",
"variants": [
{
"id": 8901,
"variant_label": "A",
"is_baseline": true,
"created_at": "2026-09-01T10:15:00.000Z",
"change_description": null,
"stats": {
"sent_count": 620,
"open_count": 200,
"open_percentage": 32.26,
"click_count": 50,
"click_percentage": 8.06,
"reply_count": 14,
"reply_percentage": 2.26,
"bounce_count": 9,
"sender_bounce_count": 1,
"bounce_percentage": 1.45,
"unsubscribed_count": 2,
"positive_reply_count": 6
}
}
],
"linkedin_stats": null,
"manual_step_stats": null
}
]
}
}
{
"message": "Invalid API Key"
}
{
"error": "Campaign not found - Invalid campaign_id."
}
Related Endpoints
- Fetch Campaign Statistics by Campaign ID - campaign statistics
- Get Campaign Analytics - whole-campaign totals
