Sales Calls Analytics Dashboard preview
Situation
An AI call flow is a 4-step funnel over 16,891 synthetic calls; the export does not say which step loses the client
Task
Take call breakdown off manual review and name the funnel step that loses the most clients
Action
Step labels from templated script markers, leak broken down by type, weighted contact loss, engagement by hour
Result
An answer in a minute: which step loses the client and what to fix; the funnel yields weighted contact loss and a first A/B scenario
Stack
PythonStreamlitpandas
Source View on GitHub → Updated: Jun 16, 2026
On this page
  1. Situation
  2. Task
  3. Actions
  4. What the dashboard shows
  5. Labeling methodology
  6. Data
  7. Run
  8. Result
  9. Limitations
  10. Documentation

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.

Documentation

Need this reasoning applied to your data?

Tell me the task — I'll come back with a plan: what data it needs, what we test, and how long it takes. I reply within a day.

Discuss a task →