Skip to main content

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: 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)

{
  "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: 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