Daily management briefings and AI watchdogs from the data warehouse.
Leadership found out about problems days late and steered on gut feeling. I built the layer that assembles, checks and delivers the numbers on its own, every single day.
Revenue dips, conversion drops, agents starting late, quotes without a traceable lead source: leadership heard about all of it days late. The data existed, in the dialer, the CRM, the warehouse. But nobody had time to assemble it every day, so decisions ran on anecdote and the weekly spreadsheet ritual.
- Four automated daily briefings on a proper warehouse layer (dbt models on a cloud warehouse), delivered to a management channel on schedule: yesterday in numbers, a live morning block, a 22:00 wrap of every appointment-lead and cancellation that went uncalled that day, and a full-day analysis.
- Scheduled AI watchdog agents that read live data on a cadence and write dated reports: a call-center KPI analyst, a data-quality watchdog checking freshness and attribution, a workflow watchdog catching failed automations before users noticed, and a weekly scout scanning manager requests for what to automate next.
- 17+ BI dashboards for self-service drill-down: call center, planner/closer performance, funnel conversion, punctuality, accounts receivable, recruitment, plus a live sales scoreboard on the office TV.
Management opened the day with numbers instead of assembling them. The manual spreadsheet routine disappeared, and problems surfaced the same day: late starts in the morning report, uncalled leads in the evening wrap.
50-64% of quotes had no lead-source attribution, which had silently made ROAS and cost-per-lead unmeasurable. A structural data-quality hole, found and quantified by an agent reading live data, instead of by an unpleasant surprise in a quarterly review.
An XGBoost model trained on 295k leads and 528k calls ranks any purchased list before the first dial.
- Live A/B test on 28,695 leads: 0.6% vs 0.1% appointments, same agents, same scripts
- +18% reach, +53% longer conversations
- Scores from public data only, so any fresh list can be ranked before dialing
Operational automations had grown into ~10 fragile no-code workflows with silent failures. I migrated them one-for-one into a single Python service and extended it.
- Speed-to-lead guardrails: alert after 15 min, escalate after 45
- Expired-callback recovery and a cancellation-retention lifecycle
- Persistent dedup, overlap protection and rate limiting
Your systems already contain the numbers you steer on; the gap is the layer that assembles, checks and delivers them, and flags what they can't be trusted on.