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

# Campaign Analytics & Reporting

> How to interpret campaign performance and drill into outcomes

# Campaign Analytics & Reporting

This guide helps you read campaign performance in a reliable way.

Truedy exposes analytics both as:

* a **summary** (aggregated stats)
* a **per-contact view** (campaign contact statuses and outcomes)

## Who this is for

* Ops and founders who need to know “did it work?”
* Developers building dashboards and reporting pipelines.

## Summary analytics endpoint

Use:

`GET /api/public/v1/batch-calls/{batch_call_id}/analytics`

Docs:

* [Get Batch Call Analytics](/api-reference/batch-calls#get-batch-call-analytics)

What you typically get includes:

* `total_contacts`
* `completed_contacts`
* `successful_contacts`
* `failed_contacts`
* `voicemail_contacts`
* `no_answer_contacts`
* `total_cost_usd`
* `average_duration_seconds`

### Example response (shape)

```json theme={null}
{
  "data": {
    "batch_call_id": "BATCH_CALL_ID",
    "total_contacts": 500,
    "completed_contacts": 420,
    "successful_contacts": 110,
    "failed_contacts": 90,
    "voicemail_contacts": 65,
    "no_answer_contacts": 155,
    "total_cost_usd": 18.42,
    "average_duration_seconds": 83
  },
  "meta": {
    "request_id": "f98eb11f-9f34-4d13-9075-0e29f106f37d",
    "ts": "2026-03-20T12:00:00Z"
  }
}
```

## Drill down: campaign contacts

Summary stats tell you **what happened**. To learn **why**, you need per-contact outcomes.

Use the contacts endpoint:

* [List Batch Call Contacts](/api-reference/batch-calls#list-batch-call-contacts)

Common workflow:

1. Start with analytics (see totals)
2. List contacts by status:
   * `status=completed` to inspect successful/answered outcomes
   * `status=failed` to investigate delivery failures
   * `status=scheduled` to see what’s still pending
3. For any failed/interesting contact, follow up using call records (and transcript/recording if needed)

## Live vs completed stats

For scheduled/active campaigns, some stats may be approximations until calls finish and the provider events are reconciled.

If you want the most up-to-date view, use:

* the analytics endpoint regularly (dashboard behavior matches this model)
* webhooks (push) to update your own system as events land

## What to watch operationally

### 1) Completion rate

If `completed_contacts / total_contacts` is low, your delivery or conversion pipeline may be failing:

* Check scheduling window and working days
* Confirm outbound numbers are correctly assigned

### 2) Failure buckets

If you have high `failed_contacts`, use per-contact and/or call-level records to identify:

* provider errors (telephony failures)
* conversation-level failures (agent couldn’t place a successful interaction)

Then adjust:

* agent prompt/tool behavior
* telephony configuration
* scheduling pacing (`max_concurrent_calls`, `max_calls_per_day`)

### 3) Cost efficiency

Use:

* `total_cost_usd` and `average_duration_seconds`

to compare pacing strategies (more concurrency vs smaller windows).

## Next steps

* If you want operational controls: [Pause/Resume & Edit Campaigns](/guides/pause-resume-edit-campaigns)
* If you want to understand scheduling inputs: [Scheduling & Delivery Logic](/guides/scheduling-and-delivery-logic)
