preloader

Cisco CDR Format Explained:

A Guide to Fields, CMR, and Analytics


Cisco CUCM and Webex Calling analytics dashboard concept

Every time a phone rings, connects, or drops in your Cisco Unified Communications Manager (CUCM) environment, a digital footprint is left behind. These footprints—Call Detail Records (CDR) and Call Management Records (CMR)—are the raw materials for understanding your organization’s communication health.

However, raw Cisco CDR data is notoriously difficult to read. It consists of comma-separated values (CSV) containing hundreds of fields that look like a chaotic wall of text. This guide explains the Cisco CDR format, defines the critical fields you need to monitor, and highlights the difference between billing data (CDR) and quality data (CMR).


Cisco CDR vs. CMR: What’s the Difference?

Before analyzing the data, it is critical to distinguish between the two types of records CUCM generates.

Feature Cisco CDR (Call Detail Record) Cisco CMR (Call Management Record)
Primary Function Billing, Accounting, Traffic Analysis Diagnostics, Quality of Service (QoS), Troubleshooting
What it Tracks Who called whom, when, and for how long. Jitter, Latency, Packet Loss, Codec usage.
Key Fields callingPartyNumber, duration, origCause VarJitter, latency, pktsLost
Use Case Cost allocation, employee productivity, capacity planning. Diagnosing "choppy" audio, dropped calls, and poor voice quality.

Pro Tip: You can have a CDR without a corresponding CMR (if diagnostics are disabled or the call was purely internal signaling), but effective troubleshooting requires both.


How to Read the Cisco CDR Format

Raw Cisco CDR files are flat CSV files. When you open one in a text editor, you will see a string of integers and timestamps. To make sense of this, you need to map the data to the Cisco Data Dictionary.

The Anatomy of a CDR Line

A typical raw CDR line looks like this:

1, 12345, 98765, 1602345678, 120, 0, 16, ...

Without a parsing tool, this is unreadable. Here is how those values map to human-readable fields:

  • cdrRecordType: Integer identifying if it is a Start (0), End (1), or CMR (2) record.
  • globalCallID_callManagerId: Unique ID for the CUCM cluster node.
  • dateTimeOrigination: Unix timestamp of when the call started.
  • duration: Length of the call in seconds.
  • origCause: The code explaining why the call ended (e.g., 16 = Normal Clearing).
Example of Cisco CDR raw data structure and export

Essential Cisco CDR Fields Defined

To extract value from your analytics, focus on these high-impact fields.

1. Identity & Routing Fields

These fields tell you "Who" and "Where."

  • callingPartyNumber: The phone number of the person initiating the call.
  • originalCalledPartyNumber: The number originally dialed (before any forwarding or hunting).
  • finalCalledPartyNumber: The actual number where the call landed (useful for tracking hunt group activity).
  • origDeviceName / destDeviceName: The MAC address or name of the physical device (e.g., SEP... for IP phones).

2. Timing & Duration Fields

These fields tell you "When" and "How Long."

  • dateTimeOrigination: The precise start time (Epoch/Unix time).
  • dateTimeConnect: When the call was actually answered. Note: If this is 0, the call was never answered.
  • duration: The total time the call was active in seconds.

3. Termination & Quality Fields

These fields tell you "Why it ended."

  • origCause / destCause: The "Termination Cause Code." This is your primary troubleshooting tool.
    • Code 16: Normal clearing (someone hung up).
    • Code 34: No circuit/channel available (congestion).
    • Code 41: Temporary failure.

See our Guide to Cisco Termination Cause Codes for a full list.


Troubleshooting with CMR Fields

While CDRs tell you a call happened, CMRs tell you how it sounded. If users complain of "robotic voice" or echo, look at these fields:

VarJitter

Measures variation in packet arrival. High jitter (>30ms) causes robotic audio.

latency

The delay in audio transmission. High latency results in "talk-over" issues.

pktsLost

Total voice packets dropped. Anything above 1% can severely impact clarity.

Best Practices for Cisco Call Reporting

Handling "Zero Duration" Calls

Not all "Zero Duration" calls are failed calls. A duration of 0 can simply mean the call was ringing but not answered.

  • Check dateTimeConnect: If it is 0, the call was not picked up.
  • Check origCause: If it is 16, the caller hung up (Abandon). If it is 38 or 41, it was a system failure.

Tracking Hunt Groups

Cisco CUCM handles Hunt Groups by generating multiple CDR rows for a single logical call. To report on Hunt Groups accurately, you must link these rows using the globalCallID_callId, which remains constant across the different "legs" of the call.


Frequently Asked Questions

Q: Where are Cisco CDR files stored?

By default, CUCM stores CDR files on the publisher node. They are typically pushed via SFTP to an external billing server or reporting solution (like Metropolis) for retention and analysis.

Q: What is the difference between originalCalledPartyNumber and finalCalledPartyNumber?

originalCalledPartyNumber is what the user dialed. finalCalledPartyNumber is where the call was answered. These differ if the call was forwarded, transferred, or routed through a Hunt Group.

Q: Can I generate CDRs for internal calls?

Yes, but the CdrEnabled service parameter in CUCM must be set to "True". Furthermore, for internal calls to generate a CMR (quality record), "Call Diagnostics Enabled" must also be set to "True".


Stop Staring at CSV Files

Purpose-built third-party tools like Metropolis' Expo XT integrate directly with CUCM, Webex Calling, and UCCX to import and consolidate calling data automatically.

Ready to unlock the potential of your Cisco voice data?

Expo XT single platform analytics for Cisco CUCM, Webex, and UCCX