> ## Documentation Index
> Fetch the complete documentation index at: https://api.smartlead.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Campaign Statistics

> Retrieves detailed email-level statistics for all emails sent in a campaign.

<Note>
  Retrieves detailed email-level statistics for all emails sent in a campaign Essential for detailed campaign analysis, A/B test evaluation, lead engagement scoring, and identifying best-performing sequences
</Note>

## Overview

Retrieves detailed email-level statistics for all emails sent in a campaign

**Key Features**:

* Returns individual email stats including opens, clicks, replies, bounces with precise timestamps
* Supports comprehensive filtering by sequence number (1-20), email status (opened/clicked/replied/bounced), and date ranges
* Includes pagination with configurable offset/limit (max 1000)

## Path Parameters

<ParamField path="campaign_id" type="number" required>
  The campaign ID
</ParamField>

## Query Parameters

<ParamField query="api_key" type="string" required>
  Your SmartLead API key
</ParamField>

<ParamField query="offset" type="number" default="0">
  Pagination offset
</ParamField>

<ParamField query="limit" type="number" default="100" max="1000">
  Number of records to return
</ParamField>

<ParamField query="email_sequence_number" type="number">
  Filter by sequence number (1-20)
</ParamField>

<ParamField query="email_status" type="string">
  Filter by status: opened, clicked, replied, unsubscribed, bounced
</ParamField>

<ParamField query="sent_time_start_date" type="string">
  Start date filter (ISO format)
</ParamField>

<ParamField query="sent_time_end_date" type="string">
  End date filter (ISO format)
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl "https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/statistics?api_key=YOUR_KEY"
  ```

  ```python Python theme={null}
  import requests

  API_KEY = "YOUR_API_KEY"

  response = requests.get(
      "https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/statistics",
      params={"api_key": API_KEY}
  )

  result = response.json()
  print(result)
  ```

  ```javascript JavaScript theme={null}
  const API_KEY = 'YOUR_API_KEY';

  const response = await fetch(
    `https://server.smartlead.ai/api/v1/campaigns/${campaign_id}/statistics?api_key=${API_KEY}`
  );

  const result = await response.json();
  console.log(result);
  ```
</RequestExample>

## Response Codes

<ResponseField name="200" type="Success">
  Request successful
</ResponseField>

<ResponseField name="400" type="Bad Request">
  Invalid request parameters or malformed request body
</ResponseField>

<ResponseField name="401" type="Unauthorized">
  Invalid or missing API key. Check your authentication.
</ResponseField>

<ResponseField name="404" type="Not Found">
  The requested resource (campaign, lead, email account, etc.) does not exist or you don't have access to it
</ResponseField>

<ResponseField name="422" type="Validation Error">
  Request validation failed. Check parameter types, required fields, and value constraints.
</ResponseField>

<ResponseField name="429" type="Rate Limit Exceeded">
  Too many requests. Please slow down and retry after the rate limit resets.
</ResponseField>

<ResponseField name="500" type="Internal Server Error">
  Server error occurred. Please try again or contact support if the issue persists.
</ResponseField>

<ResponseField name="503" type="Service Unavailable">
  API is temporarily unavailable or under maintenance. Please try again later.
</ResponseField>

<ResponseExample>
  ```json 200 - Success theme={null}
  {
    "success": true,
    "data": {
      "campaign_id": 123,
      "total_leads": 5240,
      "contacted": 4128,
      "opened": 1236,
      "clicked": 412,
      "replied": 312,
      "bounced": 58,
      "unsubscribed": 24,
      "open_rate": 29.9,
      "click_rate": 9.98,
      "reply_rate": 7.56
    }
  }
  ```

  ```json 401 - Unauthorized theme={null}
  {
    "message": "Invalid API Key"
  }
  ```

  ```json 404 - Not Found theme={null}
  {
    "error": "Resource not found"
  }
  ```

  ```json 422 - Validation Error theme={null}
  {
    "error": "Invalid parameters provided"
  }
  ```
</ResponseExample>

## Statistics Fields

<ResponseField name="total_stats" type="string">
  Total number of email statistics records
</ResponseField>

<ResponseField name="data" type="array">
  Array of email statistics

  <Expandable title="Statistics Object">
    <ResponseField name="lead_name" type="string">
      Lead's full name
    </ResponseField>

    <ResponseField name="lead_email" type="string">
      Lead's email address
    </ResponseField>

    <ResponseField name="sequence_number" type="number">
      Which email in sequence (1, 2, 3, etc.)
    </ResponseField>

    <ResponseField name="sent_time" type="string">
      When email was sent
    </ResponseField>

    <ResponseField name="is_opened" type="boolean">
      Email was opened
    </ResponseField>

    <ResponseField name="is_clicked" type="boolean">
      Link was clicked
    </ResponseField>

    <ResponseField name="is_replied" type="boolean">
      Lead replied
    </ResponseField>

    <ResponseField name="is_bounced" type="boolean">
      Email bounced
    </ResponseField>
  </Expandable>
</ResponseField>

## Use Cases

### Get All Opens

```python theme={null}
response = requests.get(
    f"{base_url}/campaigns/{campaign_id}/statistics",
    params={"api_key": API_KEY, "email_status": "opened", "limit": 1000}
)
```

### Get Sequence 1 Performance

```python theme={null}
response = requests.get(
    f"{base_url}/campaigns/{campaign_id}/statistics",
    params={"api_key": API_KEY, "email_sequence_number": 1}
)
```

### Get This Week's Stats

```python theme={null}
from datetime import datetime, timedelta

end_date = datetime.now().isoformat()
start_date = (datetime.now() - timedelta(days=7)).isoformat()

response = requests.get(
    f"{base_url}/campaigns/{campaign_id}/statistics",
    params={
        "api_key": API_KEY,
        "sent_time_start_date": start_date,
        "sent_time_end_date": end_date
    }
)
```

## Implementation Details

Returns paginated results. Use filters to narrow down large datasets. Statistics updated in real-time as events occur.

**Response Format**: object

## Related Endpoints

* [Get Campaign Analytics](/api-reference/analytics/campaign-performance)
* [Get All Campaigns](/api-reference/campaigns/get-all)
