AI call tracking
Tracked numbers, recorded calls and AI summaries, so an agency can prove which marketing made the phone ring.
- Role
- Developer
- Timeline
- 2026
- Stack
- Laravel, Next.js, Twilio voice, Whisper, OpenAI, Google Analytics 4
- Client
- The same US agency, a second product
The situation
Agencies could not connect a phone call to the campaign that caused it, and nobody had time to listen to recordings.
The product also had to live on the same codebase as the SEO platform, without the two ever charging or showing each other's customers.
What I built
- Number provisioning and call routing on Twilio, with recording and voicemail.
- Encrypted recordings, Whisper transcripts and AI summaries where every point must quote the transcript word for word. The server checks the quote is really there and drops it if not.
- Qualified leads can be sent to Google Analytics 4 as key events, proven end to end on a test property, and Google Ads conversion sending is built.
- Agency accounts holding many clients, each with its own numbers and billing.
- Checkout and plan pages fully separated from the sister product on the shared codebase.
- A WordPress plugin for the website side, a public site with terms, privacy and a contact form, and a transactional email design.
What was hard
Every routed call was dropping
A production audit found that a release had started applying a call time limit as a mid-call update. The phone API rejected it and dropped the call, and the only symptom was silence. The fix was to move the limit into the dial instruction itself, one line. I verified it by placing a real call and watching the recording, transcript and AI summary arrive. Number sales resumed the same day.
Checkout charged the wrong product
Paying for call tracking could charge the SEO platform's plan and lock the customer out of what they paid for. I built a local payment simulator to reproduce it without touching live billing, then made every first-plan path refuse the wrong product.
Closing an audit in one release
The audit listed two critical and eight high findings. All ten were fixed, tested and shipped in a single release, with a rollback ref and a written receipt of what was verified.