Skip to main content

Get Campaign Stats

Retrieve delivery, engagement and conversion stats for an email campaign.

Totals are lifetime. Unique counts can lag event counts by up to 15 minutes. Before the campaign is sent, counts are 0 and rates are null.

Endpoint​

GET /email/campaigns/:id/stats

Returns: 200 OK

Headers​

HeaderValueRequired
AuthorizationBearer <your-api-key>Yes

Path Parameters​

ParameterTypeRequiredDescription
idstringYesThe campaign ID.

Response​

{
"object": "email_campaign_stats",
"campaign_id": "0192a1b2-c3d4-7e5f-9000-abcdef123456",
"sent": 12040,
"delivered": 11800,
"failed": 12,
"bounced": 228,
"hard_bounced": 90,
"soft_bounced": 120,
"validator_rejected": 18,
"opens": 6100,
"unique_opens": 4720,
"clicks": 980,
"unique_clicks": 610,
"unsubscribed": 31,
"complained": 2,
"delivery_rate": 0.9801,
"open_rate": 0.4,
"click_rate": 0.0517,
"bounce_rate": 0.0189,
"unsubscribe_rate": 0.0026,
"complaint_rate": 0.0002,
"smart_sending": { "enabled": true, "skipped": 140 },
"links": [
{ "url": "https://example.com/sale", "clicks": 311 },
{ "url": "https://example.com/new", "clicks": 97 }
],
"conversions": {
"enabled": true,
"tracking_since": "2026-09-01T00:00:00.000Z",
"total": 42,
"revenue": [{ "currency": "SAR", "amount": 18350 }],
"by_event": [
{
"event_id": "0192a1b2-eeee-7fff-8000-111111111111",
"event_name": "order_completed",
"tracks_revenue": true,
"conversions": 42,
"revenue": [{ "currency": "SAR", "amount": 18350 }]
}
]
}
}

Response fields​

FieldTypeDescription
sentnumberEmails sent
deliverednumberAccepted by the receiving server
failednumberNever accepted by the mail provider
bouncednumberhard_bounced + soft_bounced + validator_rejected
hard_bouncednumberPermanent bounces
soft_bouncednumberTemporary bounces
validator_rejectednumberAddresses rejected by email validation before sending
opensnumberTotal opens
unique_opensnumberContacts who opened
clicksnumberTotal clicks
unique_clicksnumberContacts who clicked
unsubscribednumberUnsubscribes
complainednumberSpam complaints
delivery_ratenumber | nulldelivered / sent
open_ratenumber | nullunique_opens / delivered
click_ratenumber | nullunique_clicks / delivered
bounce_ratenumber | nullbounced / sent
unsubscribe_ratenumber | nullunsubscribed / delivered
complaint_ratenumber | nullcomplained / delivered
smart_sending.enabledbooleanSmart Sending was on when the campaign was sent
smart_sending.skippednumberRecipients skipped because they had reached the sending cap
linksarray{ url, clicks } per link, most clicked first. Unsubscribe links are excluded.
conversions.enabledbooleanfalse when the organization has no conversion events
conversions.tracking_sincestring | nullWhen the first conversion event was enabled (ISO 8601)
conversions.totalnumberConversions attributed to the campaign
conversions.revenuearrayAttributed revenue as { currency, amount }, one entry per currency
conversions.by_eventarrayThe same breakdown per conversion event

Rates are fractions from 0 to 1, rounded to four decimals, and null when the denominator is 0.


Examples​

curl "https://api.arsel.sa/v1/email/campaigns/0192a1b2-c3d4-7e5f-9000-abcdef123456/stats" \
-H "Authorization: Bearer $ARSEL_API_KEY"

Error Responses​

{
"status_code": 404,
"name": "not_found",
"message": "Campaign not found or access denied"
}