Sales Calls Analytics Dashboard
Situation
An AI call flow is a funnel: greeting → offer → meeting → qualification. The production export stores the calls but does not say which step the bot loses the client on. The goal is to turn the raw export into an answer in a minute: where the drop-off is, for what reasons, when to call, and what to fix — the script, the timing, or bot quality.
Task
I needed the call export to name the step where the bot loses people, so I owned the analysis that maps the drop-off, its reasons, and the fix across script, timing, and bot quality.
Actions
What the dashboard shows
| Block | What it answers |
|---|---|
| KPI + funnel | overall picture and where the main break is |
| Step-1 breakdown | the main leak by type: silence / hang-up / refusal |
| Where to focus | funnel transitions by weighted contact loss |
| Client reactions | what to fix in the script from the engaged tail |
| When to call | engagement by hour and weekday |
| Bot quality | ready-made defects: industry bug, looping, dead air |
| Dialog drill-down | filter a slice + read drop-off transcripts |
Labeling methodology
The bot script is templated, so the step a conversation reached is determined deterministically from markers in the bot’s replies:
- 1 — greeting + consent;
- 2 — offer;
- 3 — meeting;
- 4 — qualification.
The step-1 drop reason and the client reaction type are text heuristics. No LLM is used in the pipeline (everything is reproducible), but if an llm_labels.csv with phone, dt_raw, <labels> columns is placed alongside, the labels are merged automatically — reaction labeling can be strengthened via an LLM.
Data
The data/calls_demo.csv dataset is fully synthetic: generated by make_demo_data.py, deterministic on a fixed SEED, and contains no real phone numbers, names, or recordings. The numbers reproduce the shape of a typical production export (funnel, defects, hourly distribution) so the dashboard tells a realistic story on safe data.
Run
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/streamlit run app.py
Result
The dashboard gives an answer in a minute: which step loses the client and what to fix. Labeling is deterministic and reproducible, with no LLM in the critical path, so the numbers can be checked. The funnel yields a growth point — weighted contact loss and a first A/B scenario.
Limitations
The dataset is synthetic and the step labels come from a templated script’s markers: on a live bot with freer replies the heuristics would need revision. The value of the card is the method of breaking down an export on safe data, not the specific funnel values. The dashboard is built on a fork of a base repository (vmamaevawork-bit/sales-calls-dashboard): the analytics layer is mine, the original dashboard scaffolding is not.