Calls & CDR
The CDR (Call Detail Record) is the log of every call that passes through your phone system. Every time someone calls your business, calls out, or one extension calls another, an entry is created in the CDR.
This page explains how to read that log, what the filters mean, how to interpret costs, and how to export the data.
What is the CDR and why does it matter
Think of it as the call detail on your cell phone bill, but for your entire company and with more information. The CDR is useful for:
- Auditing calls: knowing who called whom and when
- Controlling costs: identifying high-cost international calls
- Monitoring service quality: seeing how many calls went unanswered (NO ANSWER)
- Reporting: exporting data for your own analysis
The CDR updates automatically. Every completed call appears in the portal within minutes.
The call table
The main table shows the most recent calls. Each row has these columns:
| Column | What it is |
|---|---|
| Date/Time | When the call started (local time) |
| Source (src) | Number or extension that initiated the call |
| Destination (dst) | Destination number or extension |
| Duration | Total call time (including ring time) |
| Billsec | Billable seconds (only when someone answered) |
| Result | ANSWERED, NO ANSWER, BUSY, or FAILED |
| Type | inbound, outbound, or internal |
| Cost | In dollars. Applies only to international calls. |
Difference between Duration and Billsec
- Duration = total time from when the call started to when it ended. Includes the time it rang without anyone answering.
- Billsec = seconds the call was active with someone on the line.
If a call rings for 30 seconds and then runs for 2 minutes, the duration is ~2m30s but the billsec is 120 seconds (2 minutes).
💡 Tip: For NO ANSWER calls, billsec is always 0 — nobody answered, so there are no billable seconds.
Available filters
At the top of the Calls screen there are filters to narrow down results:
Date range
You can select From and To to view a specific period. Defaults to the current period.
Example uses:
- View last week's calls
- Review a specific day where there was an issue
- Export the previous month for a report
Call type
| Filter | What it shows |
|---|---|
inbound | Incoming calls to the business from outside |
outbound | Calls that went out from your system to the outside |
internal | Extension-to-extension calls within your system |
| (empty) | All types |
Result (disposition)
| Filter | What it shows |
|---|---|
ANSWERED | Only calls that someone picked up |
NO ANSWER | Calls nobody answered (rang and caller hung up) |
BUSY | Calls rejected because the line was busy |
FAILED | Calls that failed due to a system error or invalid destination |
| (empty) | All results |
Free search
You can type a number, extension, or part of one to search for specific calls. Useful when looking for a particular number.
Understanding costs
Main rule: domestic calls have no cost
Calls to US and Canada numbers are unlimited and included in your plan. The "Cost" field on those rows is always $0.00.
This includes:
- Inbound calls — always $0
- Internal calls (extension to extension) — always $0
- Outbound calls to US/Canada numbers — $0
- Calls that weren't answered (NO ANSWER, BUSY, FAILED) — $0
International calls: these do have a cost
Calls that go out to international destinations are billed per minute (rounded up).
A call is international when the destination number has any of these characteristics:
- Starts with
011(international dialing prefix from the US) - Starts with
+(international E.164 format) - Has more than 11 digits
The per-minute cost depends on your plan:
| Plan | International rate |
|---|---|
| Essential | $0.025 / minute |
| Business | $0.020 / minute |
| Enterprise | Negotiated |
Example: A 7-minute 30-second call to Mexico on the Essential plan:
- Actual duration: 7m30s = 450 seconds
- Billable minutes: 8 (rounded up to the next minute)
- Cost: 8 × $0.025 = $0.20
⚠️ If you see an unexpectedly high cost: Filter by
callType = outboundanddisposition = ANSWEREDto see only answered international calls. If you see an unknown number with many long calls, contact support.
CDR cost vs invoice cost
The cost shown on each CDR row is the unit cost of that call. The international overage on your monthly invoice is the sum of all those costs in the period. You can see the current period's running total in the Billing section.
Period statistics
At the top of the Calls screen there is a stats bar showing (for the selected date range):
- Total calls
- Total minutes
- Answered calls
- Missed calls (NO ANSWER + BUSY + FAILED)
These stats respond to the filters you have applied, so if you filter by a specific date range or type, the numbers change.
Export to CSV
You can download the filtered CDR as a CSV file to work with in Excel, Google Sheets, or any analysis tool.
To export:
- Apply the filters you need (date range, type, etc.)
- Click the Export CSV button (top right of the table)
- The file downloads with the name
sipsop-cdr-YYYY-MM-DD.csv
The file includes all columns from the table: date, source, destination, duration, billsec, result, type, and cost.
💡 Tip for monthly reports: Filter by the previous month (day 1 to day 30/31), export, and you have the complete CDR for the period in a spreadsheet.
Frequently asked questions about CDR
Why isn't a call showing up that I know happened?
The CDR syncs from the FreePBX system approximately every 15 minutes. If a call happened less than 15 minutes ago, it may not appear yet. If it still doesn't show up after 30 minutes, contact support.
Why are there calls where the destination equals the source extension?
That happens with voicemail forwards or other internal routing paths. It's not an error — it's a call that the system routed back to the same device.
Do internal calls count toward billing?
No. Extension-to-extension calls (call_type = internal) always have cost = 0 and are not included in the monthly overage.
Can I see the CDR for all departments/extensions or only mine?
The CDR you see in the portal is for your entire organization — all extensions assigned to your account. You can't filter by "just my calls" at the specific extension level from the portal; that granularity is available in the CSV export.