# Call Detail Record (CDR) Interpreter

**URL:** <https://onehack.st/t/call-detail-record-cdr-interpreter/325476>\
**Category:** Discussion & Solutions\
**Tags:** solved\
**Created:** [September 11, 2026, 9:00am UTC](https://onehack.st/t/call-detail-record-cdr-interpreter/325476 "2026-09-11T09:00:35Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Wantok](https://onehack.st/user_avatar/onehack.st/wantok/32/24960_2.png) [@Wantok](https://onehack.st/u/Wantok)\
**Post date:** [September 11, 2026, 9:00am UTC](https://onehack.st/t/call-detail-record-cdr-interpreter/325476/1 "2026-09-11T09:00:35Z")

</div>

Since there are many free tools available, may I kindly ask if any team member knows a CDR tool that are available for free to interpret MSISDN call detail records?

---

<div class="post-metadata">

**Author:** ![Ze380y](https://onehack.st/user_avatar/onehack.st/ze380y/32/48760_2.png) [@Ze380y](https://onehack.st/u/Ze380y)\
**Post date:** [September 16, 2026, 3:54pm UTC](https://onehack.st/t/call-detail-record-cdr-interpreter/325476/2 "2026-09-16T15:54:42Z")

</div>

**Free tools that read and explain call detail records**

📞 **Drop the records in, get answers out — free programs and methods for MSISDN call detail records, zero setup first.**

**👁 Instant view (nothing to install)**

- **Call Log Explorer** — browser tab, drop the file, charts appear. 🔗 [github.com/soumendrak/call-log-explorer](https://github.com/soumendrak/call-log-explorer)
- **ChatGPT** — upload the file, ask in plain words, tables back. 🔗 [help.openai.com](https://help.openai.com/en/articles/8437071-advanced-data-analysis)
- **Claude** — upload 30 MB files, ask plain questions. 🔗 [support.claude.com](https://support.claude.com/en/articles/8241126-upload-files-to-claude)
- **Gemini** — upload 100 MB files, summaries and charts. 🔗 [support.google.com](https://support.google.com/gemini/answer/14903178)
- **[AnalyzeData.io](http://AnalyzeData.io)** — no signup, plain English report. 🔗 [analyzedata.io](https://analyzedata.io/)

**🧹 Messy files first**

- **CleverCSV** — fixes broken delimiters. 🔗 [github.com/alan-turing-institute/CleverCSV](https://github.com/alan-turing-institute/CleverCSV)
- **CSV-Cleaner** — one timestamp format, in bulk. 🔗 [github.com/dfirvault/CSV-Cleaner](https://github.com/dfirvault/CSV-Cleaner)

**📦 The dedicated free tools**

- **CCAT v2** — stats, top contacts, tower coords, KML path. 🔗 [github.com/Crimealysis/CDR-Analyzer](https://github.com/Crimealysis/CDR-Analyzer)
- **CDR-Stats** — search, group, dashboards with maps. 🔗 [github.com/cdr-stats/cdr-stats](https://github.com/cdr-stats/cdr-stats)
- **CDRViewer 3** — portable, 45+ formats. 🔗 [blue-tail.com/cdrviewer-3](https://blue-tail.com/cdrviewer-3/)
- **cellyzer** — Python plus no-code GUI, routes and maps. 🔗 [github.com/anjuchamantha/cellyzer—CDR-data-analyzer](https://github.com/anjuchamantha/cellyzer---CDR-data-analyzer)
- **gigaTrace** — self-hosted suite, contact graph, SQL. 🔗 [github.com/SU1199/gigaTrace](https://github.com/SU1199/gigaTrace)
- **TATVA** — multi-source platform, timelines, dossier. 🔗 [github.com/rio-ARC/TATVA-Forensic-Investigation](https://github.com/rio-ARC/TATVA-Forensic-Investigation)
- **RLEAPP** — carrier returns into timeline reports. 🔗 [github.com/abrignoni/RLEAPP](https://github.com/abrignoni/RLEAPP)
- **cdr-mapper** — tower sites into KML. 🔗 [github.com/danzek/cdr-mapper](https://github.com/danzek/cdr-mapper)
- **Mobipack** — clean and map trajectories. 🔗 [github.com/SpatialDataCommons/CDR-analysis-tools-std](https://github.com/SpatialDataCommons/CDR-analysis-tools-std)
- **bandicoot** — 1442 phone indicators plus visuals. 🔗 [github.com/computationalprivacy/bandicoot](https://github.com/computationalprivacy/bandicoot)
- **CDR\_Analyzer** — Python CLI, frequent callers, locations. 🔗 [github.com/Vega-4n6/CDR\_Analyzer](https://github.com/Vega-4n6/CDR_Analyzer)
- **Cell-Data-Viewer** — tower CSVs on a map, fully local. 🔗 [github.com/NerdTech-one/Cell-Data-Viewer](https://github.com/NerdTech-one/Cell-Data-Viewer)

**🧭 Twin and shape tools**

- **chroniq** — offline CSV timeline in the browser. 🔗 [github.com/thisislola/chroniq](https://github.com/thisislola/chroniq)
- **4n6time-go** — desktop timeline viewer. 🔗 [github.com/CdtDelta/4n6time-go](https://github.com/CdtDelta/4n6time-go)
- **pink-lemonade** — data grid, pivots, SQL. 🔗 [github.com/forynsics/pink-lemonade](https://github.com/forynsics/pink-lemonade)
- **Timesketch** — collaborative timeline analysis. 🔗 [github.com/google/timesketch](https://github.com/google/timesketch)
- **Gephi** — caller-callee columns become the map. 🔗 [gephi.org/quickstart](https://gephi.org/quickstart/)
- **Pivot manual** — analyst method in one PDF. 🔗 [policetechnical.com](https://policetechnical.com/wp-content/uploads/2012/04/Pivot-Table-Manual.pdf)

**📖 Read the meaning**

- **pi-labs method** — frequency, towers, IMEI links. 🔗 [pi-labs.ai](https://www.pi-labs.ai/cdr-analysis-investigators-call-records/)
- **Royal Palm playbook** — 10-step reading method. 🔗 [royalpalminvestigations.com](https://royalpalminvestigations.com/how-to-read-a-call-detail-record-report-a-pis-guide-for-attorneys/)
- **Bellingcat case** — worked phone-metadata example. 🔗 [bellingcat.com](https://www.bellingcat.com/resources/2020/12/14/navalny-fsb-methodology/)
- **Bellingcat toolkit** — free OSINT directory and community. 🔗 [bellingcat.gitbook.io](https://bellingcat.gitbook.io/)
- **i3Forum voice fraud** — practitioners sharing guidance. 🔗 [i3forum.org](https://i3forum.org/workgroups/voice-fraud/)

**🔓 Binary and odd formats**

- **MARBEN decoder** — upload raw binary, get readable XML. 🔗 [marben-products.com](https://www.marben-products.com/decoder-asn1-cdr/)
- **[asn1.io](http://asn1.io) inspector** — in-browser decoder, schema ready. 🔗 [asn1.io/CDR-inspector](https://asn1.io/CDR-inspector/)
- **tap3edit** — roaming TAP3 to XML and back. 🔗 [tap3edit.github.io](https://tap3edit.github.io/)
- **tap3xml** — C++ CLI for the same job. 🔗 [github.com/tap3edit/tap3xml](https://github.com/tap3edit/tap3xml)
- **3GPP 32.298** — every field’s exact meaning. 🔗 [etsi.org 32.298](https://etsi.org/deliver/etsi_ts/132200_132299/132298/17.08.00_60/ts_132298v170800p.pdf)
- **3GPP 32.297** — transfer rules companion. 🔗 [etsi.org 32.297](https://www.etsi.org/deliver/etsi_TS/132200_132299/132297/19.00.00_60/ts_132297v190000p.pdf)
- **GSMA TAP3 TD.57** — roaming dictionary. 🔗 [pdfcoffee.com TD.57](https://pdfcoffee.com/td57-v365-tap-format-specs-pdf-free.html)

**🗺 Towers become maps**

- **OpenCellID** — tower IDs to coordinates. 🔗 [opencellid.org](https://www.opencellid.org/downloads)
- **CellMapper** — crowd coverage map. 🔗 [cellmapper.net/map](https://www.cellmapper.net/map)
- **uMap** — drop CSV/KML, see the path. 🔗 [umap-project.org](https://umap-project.org/)
- **Google Earth** — satellite view of the same path. 🔗 [google.com/earth](https://www.google.com/earth/versions/)

**📱 Your own records**

- **TelstraCallToCSV** — carrier API into clean CSV. 🔗 [github.com/Capta1nT0ad/TelstraCallToCSV](https://github.com/Capta1nT0ad/TelstraCallToCSV)
- **Logger app** — device log exported on-device. 🔗 [f-droid.org logger](https://f-droid.org/packages/com.logger.app)

**🎓 Practice first**

- **CRAWDAD sample** — 142 days of real calls. 🔗 [ieee-dataport.org](https://ieee-dataport.org/open-access/crawdad-ctupersonal)
- **MPD lab** — hands-on course with real dataset. 🔗 [github.com/leoferres/mpdtutorial](https://github.com/leoferres/mpdtutorial)
- **krzdur/cdr** — worked course code. 🔗 [github.com/krzdur/cdr](https://github.com/krzdur/cdr)
- **NIST CFReDS** — documented training corpora. 🔗 [cfreds.nist.gov](https://cfreds.nist.gov/)
- **DFRWS challenges** — skill tests on real data. 🔗 [dfrws.org](https://dfrws.org/)

**⚡ Start:** drop the file into Call Log Explorer tonight.

---

<div class="post-metadata">

**Author:** ![Indianapolis](https://onehack.st/user_avatar/onehack.st/indianapolis/32/150586_2.png) [@Indianapolis](https://onehack.st/u/Indianapolis)\
**Post date:** [October 4, 2026, 12:30pm UTC](https://onehack.st/t/call-detail-record-cdr-interpreter/325476/3 "2026-10-04T12:30:06Z")

</div>

Yes — for mobile-operator CDRs containing MSISDN, start with a local/offline tool rather than uploading subscriber data to a random website.

**Free options**

**Python CDR Analyzer — best starting point**

→ Open-source GitHub project  
→ Imports CSV files  
→ Searches frequent callers and contacts  
→ Supports IMEI, dates, coordinates, cell locations, call type, and inbound/outbound analysis  
→ Expected fields include `PartyA`, `PartyB`, `IMSI`, `IMEI`, `LogDate`, `LAT`, `LNG`, `ADDR`, and call type  
→ Runs locally with Python, so it does not require a cloud upload.

```bash
git clone https://github.com/Vega-4n6/CDR_Analyzer.gitcd CDR_Analyzerpip install -r requirements.txtpython CDRAnalyzer.py

```

**No-code option — Excel or LibreOffice**

For a small or medium CSV:

1. Import the file.
2. Keep MSISDN columns as **text** , not numbers.
3. Convert date/time into one proper timestamp column.
4. Create pivot tables for:
  - Most frequent contacts
  - Total calls by day/hour
  - Incoming vs outgoing calls
  - Total duration by MSISDN
  - Calls by cell ID or location
  - IMEI changes over time

Excel can filter structured CDR files and use pivot tables/charts for call-pattern analysis; LibreOffice Calc can handle the same basic workflow for free.

**Larger data sets — CDR-Stats**

CDR-Stats is open-source and provides browser-based reports, mediation, rating, alarms, fraud-pattern analysis, and multi-source processing. It is primarily designed for **Asterisk, FreeSWITCH, Kamailio, SIP, and other VoIP CDRs** , so it may require field mapping before it works with a mobile-network MSISDN export.

**Important distinction**

```plaintext
Mobile CDR → MSISDN, IMSI, IMEI, cell ID, tower, SMS, locationVoIP CDR → SIP user, caller ID, destination, codec, MOS, packet loss

```

CDR-Stats is strong for VoIP. For raw mobile-network records, the Python analyzer or a custom pandas dashboard is usually the better fit.

**Minimum useful column mapping**

| **CDR meaning** | **Common column names** |
| --- | --- |
| Main subscriber | `MSISDN`, `PartyA`, `Calling_Number` |
| Other party | `PartyB`, `Called_Number`, `B_Number` |
| Date/time | `Call_Start`, `LogDate`, `Call_Originating_Time` |
| Duration | `Duration`, `Duration_Seconds` |
| Direction | `IN`, `OUT`, `Inbound`, `Outbound` |
| Device | `IMEI` |
| Subscriber identity | `IMSI` |
| Tower/site | `Cell_ID`, `CGI`, `LAC`, `Site_ID` |
| Location | `LAT`, `LNG`, `ADDR` |
| Event type | `CALL_TYPE`, `SMS`, `DATA` |

**My pick**

- **Under 100,000 rows:** Excel or LibreOffice
- **100,000–5 million rows:** Python + pandas
- **Large recurring telecom imports:** CDR-Stats or a custom PostgreSQL dashboard
- **Need maps and investigation timelines:** a local CDR analyzer with cell-site coordinates

Only process CDRs you are authorized to handle, and keep real MSISDN, IMSI, IMEI, and location data offline. Use dummy numbers when testing or asking for technical help.

---

<div class="post-metadata">

**Author:** ![Grace2077](https://onehack.st/user_avatar/onehack.st/grace2077/32/179796_2.png) [@Grace2077](https://onehack.st/u/Grace2077)\
**Post date:** [October 23, 2026, 2:50am UTC](https://onehack.st/t/call-detail-record-cdr-interpreter/325476/4 "2026-10-23T02:50:44Z")

</div>

Ze380y’s list covers the dedicated tools really well — I’ll add a workflow note from the AI side, since that’s where I do my first pass.

When I get a carrier CSV export, I do three things before asking any model anything: (1) normalize the timestamps to one format — mixed timestamp formats are the number one reason model summaries come back wrong; (2) split files over the upload limit into chunks by date range (Claude takes around 30 MB, Gemini around 100 MB) so nothing gets silently truncated mid-file; (3) strip or hash the actual phone numbers if the data is real and sensitive — cloud models are great for analysis, but I don’t upload raw PII to them.

Then I ask for structured outputs, not prose: top 10 contacts by call count and total duration, a time-of-day histogram, and a list of numbers that only ever receive calls but never make them. Those three questions surface most of the interesting patterns on the first pass. And I always spot-check the model’s numbers against a quick manual filter in the spreadsheet — models occasionally miscount when the CSV has quoted commas or multi-line fields.

For repeat work, I save the prompt that worked as a template and reuse it. The dedicated tools are better for maps and timelines, but for “what’s the story in this file” the chatbot pass saves me the most time.

---

<div class="post-metadata">

**Author:** ![Ze380y](https://onehack.st/user_avatar/onehack.st/ze380y/32/48760_2.png) [@Ze380y](https://onehack.st/u/Ze380y)\
**Post date:** [October 23, 2026, 3:27am UTC](https://onehack.st/t/call-detail-record-cdr-interpreter/325476/5 "2026-10-23T03:27:30Z")

</div>

# 🎧 Your call log is a piece of music, a constellation, and a diary

@Wantok — @Grace2077’s three questions are the right ones, and @Indianapolis already handed you the local parser. This is the fun half: five ways to look at a CDR that no dashboard on the internet has, and every one of them is free. 🎯

## 🎧 Hear the pattern instead of reading it

Timestamps are time, and time is rhythm. Map the hour to a note and the duration to its length, and a call log becomes music:

- **[TwoTone](https://twotone.io/)** — built with the Google News Initiative: load a CSV, choose which column becomes pitch, hit play. You hear the day
- **[DataSonifyer](https://studio.datasonifyer.de/en)** — the same idea with a different scale, no account
- **[Sonic Pi’s sonification cookbook](https://github.com/Decibels-Sonification/sonification-resources/blob/main/SonicPi-cookbook.md)** — when you want to compose it yourself, with the normalise function ready to copy

A number that calls every nine minutes sounds wrong instantly. On a table of 4,000 rows, you would never see it.

## 🌌 Draw it without writing a line of code

- **[RAWGraphs](https://www.rawgraphs.io/)** — 30 chart models, drag your columns onto the axes, export SVG. **Your data never leaves the browser** , which matters when every row is a phone number
- **[OpenRefine](https://openrefine.org)** — the quiet hero: cluster `+92 300…`, `0300…` and `+92300…` into one person before you analyse anything

## 🕳 The one nobody thinks of: the silence

The gaps between calls are the interesting part. A phone that goes quiet for nine hours was off, asleep, or somewhere else. Plot the gap length and you get a **diary** :

```sql
SELECT timestamp,
       timestamp - LAG(timestamp) OVER (PARTITION BY msisdn ORDER BY timestamp) AS silent_for
FROM cdr ORDER BY silent_for DESC LIMIT 20;

```

The longest silences are the nights. The pattern of them is a sleep schedule, a shift pattern, or a different time zone.

## 🤖 The bot radar

Calls with **zero duration in both directions** are a machine. Count them per number, then look at who they dialled — robocallers, IVR systems and auto-diallers all have the same signature, and it takes one query to separate them from people.

## 🗺 And the map that started this

Cell IDs become coordinates through **[OpenCelliD](https://opencellid.org)** or **[beaconDB](https://beacondb.net)**, then **[kepler.gl](https://kepler.gl)** animates the trail. One month of records becomes a movement video. 🗺

## 🧪 The join worth keeping

```sql
SELECT a.msisdn, b.msisdn, a.cell_id, a.timestamp
FROM cdr a JOIN cdr b ON a.cell_id = b.cell_id AND a.msisdn < b.msisdn
 AND ABS(strftime('%s', a.timestamp) - strftime('%s', b.timestamp)) < 300;

```

Same cell, five minutes apart — the query behind “were these two people actually together”.

> **The two habits that make any of this trustworthy**
>
> Normalise every timestamp into one column, one format, one time zone. Keep MSISDN and IMSI as **text** so the leading zeros survive the import.
> 
> Then hash the numbers before a file leaves your machine, and work only on records you are authorised to hold. Same analysis, and the rest of the file stays useful.
