AI agents that place the calls, book the appointments, and report on themselves
Autonomous Voice Follow-Up & Revenue Portal
The challenge
A sales operation's entire follow-up sequence depended on a single low-code workflow of 138 nodes that could not refresh its own authentication tokens and had become effectively unmaintainable. Leads were falling through the cracks. The voice platform's own CRM integration was broken — confirmed by that vendor's support — so there was no supported path to book an appointment automatically.
Operators also couldn't answer their central question. The CRM produced activity counts — you made 47 calls this week — with no projection against target, so converting a revenue goal into weekly lead and appointment quotas stayed a manual exercise.
Worst of all, failures were silent. An outbound email step reported success while executing in about a millisecond and sending nothing. A nightly job reported success while writing zero rows, because a 404 from a route that was never deployed had been swallowed by an error-handling setting.
What we built
We built a multi-tenant portal that sits on the CRM and gives each customer one place to see and run their sales operation.
Every event the CRM produces — calls, texts, emails, pipeline moves, form fills — is pulled into a single append-only log, which feeds the dashboards: a goal tracker that projects whether the quarterly number will be hit, pipeline and forecast views, marketing source performance, and message deliverability health.
On top of that same data sit agents that do work rather than report on it. A voice agent places outbound calls and books appointments straight into the CRM calendar through four purpose-built function tools, with calendar slots deliberately pre-filtered to keep the voice platform inside its token budget. Call outcomes are classified from the platform's structured output and move the opportunity to the matching pipeline stage automatically; a no-answer triggers a retry chain that carries prior-call context forward. A second agent runs SMS and email follow-up conversations through a bounded tool loop that is forced to terminate, producing the customer-facing reply and the structured extraction in a single call. A third answers questions about the account by querying the database directly.
Models are routed per task across four providers with per-call cost recorded, and AI usage is metered and billed per action. Because the previous system had failed silently, a daily verifier now runs against production and surfaces jobs that fail quietly instead of letting them pass.
What was delivered
811
commits over five months
121
database tables
498
route handlers
17
external integrations
26 scheduled jobs
- Delivered as a production system over five months: 811 commits, 121 database tables, 498 route handlers
- 26 scheduled jobs and 17 external integrations, with per-task model routing across four LLM providers
- Replaced a 138-node low-code workflow that could not refresh its own credentials
- The daily health verifier caught three further jobs that had been failing silently
Every figure above is taken from the delivered system itself. Where we don't have a client-verified business outcome, we report what was built and measured rather than estimating an improvement.
Tech stack
- TypeScript
- Node.js
- Express
- React
- PostgreSQL
- Drizzle ORM
- Supabase
- Twilio
- Deepgram
- Multi-provider LLM routing
Have a similar project?
Tell us your goal and we'll map the fastest path to results.