Creel
A companion for parallel-dialer call blocks. It shows account context the moment a prospect answers, then turns every recording into a disposition, tasks, and a drafted follow-up for review. 1,921 calls processed.
Results
Across three weeks of my own call blocks. 47 follow-up drafts, 29 callbacks, and 13 referrals extracted.
Problem
A parallel-dialer block produces 50 to 150 conversations an hour across different verticals. Live context was whatever the rep had open at that moment, which in practice meant remembering 50 value props in the half-second before someone says hello. After the block, callbacks, referrals, and promised emails were reconstructed from memory, and each follow-up was written by hand. Some were missed.
How it works
Read the dialer
A Chrome extension reads the live dialing session and shows a card for whoever answers: account context, pain points, and a ready opener. The card is a cache read.
Precompute openers
Openers are generated offline on a small model at roughly $0.002 per account and cached per domain. Around 30,000 contacts are snapshot locally for instant lookup.
Transcribe in batch
After the block, recordings are transcribed with Deepgram in multichannel mode. The stereo channels separate rep and prospect deterministically, with no diarization model.
Extract a record
One model call per call extracts a fixed 12-field record: outcome, callback, referral, data-cleanup flags, and whether an email is warranted.
Review and send
Follow-ups are drafted in my own writing voice from a maintained voice file. Everything lands in one review queue, and a rep sends every email.
The latency budget
A model call cannot finish before the prospect says hello. So generation never runs at dial time.
Key decisions
Generation never touches dial time
A human answers in about a second, and no model call fits that window. Openers precompute offline; the live path is a cache read.
Extraction is schema-enforced
Extraction uses API-enforced JSON schemas with refusal checks. A response that does not match is rejected, not repaired downstream.
The pipeline never sends
It produces dispositions, tasks, and drafts. Human review is the final stage by design.
Technical details
- Integration
- The dialer's documented REST API was effectively empty. The working integration uses OAuth 2.0 + PKCE and JSON-RPC against the vendor's machine interface.
- Transcription
- Deepgram nova-3, multichannel, batched after each block
- Audio capture
- An earlier build captured dual-side call audio in the browser, merged to stereo. Retired when vendor recordings proved sufficient; the simpler path shipped.
- Guardrails
- Prompts prohibit invented facts and numbers; drafts carry only transcript-grounded content
- Testing
- A harness covers the extraction contract, the schema boundary where correctness matters most
- Ownership
- Designed, built, and run by me; I am its user on my own call blocks