Skip to content
Dialer & Setup

CDR Analytics for Outbound Call Centers: Turning Raw Call Records Into Operational Intelligence

A call detail record is the most granular data artifact your telephony stack produces. Most teams use CDRs only for billing reconciliation. The teams that use CDRs for operational intelligence consistently outperform on every KPI that matters.

What a CDR Actually Contains

A CDR from a SIP trunk contains more than most dialer supervisors realise. Beyond the obvious fields — originating number, destination number, call start time, duration, disposition — a SIP-level CDR includes:

  • SIP response codes on each leg. A 486 Busy Here is different from a 480 Temporarily Not Available, which is different from a 404 Not Found. All three show up as "not answered" in a dialer disposition summary but tell you completely different things about the destination number.
  • Post-dial delay (PDD). The gap between INVITE sent and the first SIP provisional response (180 Ringing). Domestic US/CA calls should ring within 1.5 seconds. International calls vary by country and carrier path.
  • Trunk-side timestamps. Your dialer logs when it sent the call; your SIP trunk logs when the network actually processed it. The difference is your system-side latency.
  • Media server events. If your infrastructure generates call progress events (answer-machine detection, early media detection), these often get written into extended CDR fields.

Building the Analytics Layer on Top of Raw CDRs

Raw CDRs arrive as flat records — one row per call leg. Useful analytics require transforming this into a structured dataset. The minimum viable schema adds five derived fields to each CDR:

  1. Call outcome category. Map SIP response codes to human-readable outcomes: Connected-RPC, Connected-VM, Connected-Gatekeeper, No Answer, Busy, Network Error, Carrier Rejection.
  1. Time-of-day bucket. 15-minute intervals, in the destination's local time zone. This is what enables answer-rate analysis by time of day — essential for campaign scheduling decisions.
  1. DID identifier. Which caller ID was used on this call. You need this to track per-DID answer rates and identify reputation degradation before it becomes a floor-wide problem.
  1. Campaign and agent IDs. Join keys to your campaign and agent tables so you can slice CDR data by campaign, by agent, and by their intersection.
  1. Session cost (flat-rate normalized). On per-minute billing this is a direct calculation. On a flat-rate network like UnlimCall at $99 per seat per month, you calculate implied cost as monthly_cost / monthly_minutes_capacity to maintain a consistent cost-per-minute baseline for comparative analysis — even though you don't actually pay that rate.

The Five CDR-Powered Analyses That Improve Operations

1. Answer rate by DID, time window, and destination area code. This three-dimensional slice reveals caller ID reputation problems at the geographic level. A DID performing at 22 % answer rate to 305 area codes but 41 % to 312 area codes suggests a regional spam flag, not a general reputation problem.

2. SIP error rate by carrier path. If 4xx and 5xx SIP errors are clustering on calls to a specific destination country or area code, the problem is usually a carrier routing issue, not a list quality issue. Route the affected destinations through an alternate carrier path and watch the error rate resolve.

3. AHT distribution by campaign and agent. AHT averages hide bimodal distributions. A campaign with a 95-second average might actually have two populations: 60 % of calls under 45 seconds (hung up before pitch completes) and 40 % over 120 seconds (genuine conversations). These require different interventions.

4. Abandon rate cohort analysis. Calculate abandon rate not just as a flat daily number but broken down by time-of-day, campaign, and dialing ratio setting. You will find that the same campaign running at 2.5:1 dialing ratio has a materially different abandon rate at 9 AM versus 2 PM, because answer rates differ and the dialer calibration hasn't caught up.

5. List penetration velocity. Track the ratio of unique numbers dialed to total list size, with attempt counts bucketed (first attempt, second attempt, 3+ attempts). This tells you when a list is effectively exhausted and continuing to dial is producing diminishing returns below economic break-even.

The UnlimCall API exposes CDR data with SIP-level fields so you can feed these analyses without building a custom SIP log parser.

Storage and Query Architecture for CDR Analytics

At 50 agents running predictive dialing with a 3:1 ratio and 35 % answer rate, you originate roughly 2,200 call attempts per hour. That's about 15 million CDRs per month for a single 50-agent campaign running 24/7. At a moderate campaign with 8-hour shifts and 5-day weeks, scale down to roughly 2 million CDRs per month.

For this volume, a columnar database (ClickHouse, DuckDB for smaller installs, or Redshift/BigQuery for cloud) substantially outperforms a transactional database for the time-series aggregation queries CDR analytics requires. Store raw CDRs in your transactional DB for near-real-time access; run nightly ETL to the columnar store for historical analysis.

Takeaways

CDRs contain SIP response codes, PDD, trunk timestamps, and media events — far more than a dialer disposition label. Build a transformation layer that adds five derived fields. Run five core analyses: per-DID answer rates by geography, SIP error rates by carrier path, AHT distributions, abandon rate cohort breakdowns, and list penetration velocity. Store raw CDRs in OLTP; move historical data to a columnar store for efficient aggregation queries.

Your SIP Trunk Should Give You CDRs, Not Just Bills

UnlimCall's flat-rate network across 33 markets gives you full CDR access via API. See pricing and get started without per-minute exposure.