Inspiration
Sales teams face a critical bottleneck: speed-to-lead. If a prospect isn't contacted within 5 minutes of filling out a form, the chance of qualifying them drops by 80%. However, human sales reps are often busy in meetings or dialing other prospects. Leads go cold, and businesses lose millions in potential revenue.
I wanted to solve this with AI-powered phone calls, and CALL-E's developer platform made it possible.
What LeadQualify Does
LeadQualify is an AI-first outbound voice agent that:
- Calls instantly: Dials prospects within seconds of form submission
- Qualifies intelligently: Conducts structured BANT interviews (Budget, Authority, Need, Timeline)
- Extracts data automatically: Translates conversations into structured JSON scorecards
- Empowers sales reps: Provides full context + transcript for immediate handoff
How I Built It
Backend: FastAPI + Python for REST APIs and webhook handlers AI Integration: CALL-E SDK for outbound calling and conversation extraction via custom result_schema Database: SQLAlchemy ORM with SQLite for lead records and transcripts Frontend: Vanilla JavaScript + glassmorphism CSS for real-time dashboard updates Testing: Pytest for endpoint validation and Mock Mode for offline simulation
Key Features
- Instant Conversational Callbacks: Triggers on form submission
- BANT Metrics Extraction: Structured data (budget_status, timeline_window, pain_point, interest_level, handoff_recommended)
- Secure Webhook Handler: Origin validation by querying CALL-E servers to verify call authenticity
- Premium Dashboard: Live call alerts, messaging-style transcripts, and animated scorecard updates
- Intelligent Mock Mode: Simulates complete call lifecycle for local demonstrations without API calls
Challenges & Solutions
Challenge 1: Webhook Security Webhook payloads can technically be spoofed. Solution: Implemented origin validation by making a secondary API call to CALL-E servers to verify the call's final status and contents.
Challenge 2: Translating Voice to Structured Data Converting natural conversation into strict BANT categories seemed lossy. Solution: Used CALL-E's custom result_schema to enforce structured outputs while preserving full transcripts.
Challenge 3: Real-Time Dashboard Updates Webhooks arrive asynchronously after calls end. Solution: Implemented efficient polling + state management in vanilla JS to update the UI without page refreshes.
What I Learned
- CALL-E's SDK makes outbound voice agents accessible to developers
- Structured extraction (JSON Schema validation) bridges voice and CRM
- Mock/dry-run modes are crucial for iteration without burning API credits
- Sales teams desperately need speed + structure - not one or the other
Future Scope
- CRM Integrations: Push scorecards directly to Salesforce/HubSpot
- Calendar Integration: AI books Zoom meetings during the call
- Multi-lingual Support: Qualify prospects in Spanish, French, German
- Advanced Analytics: Win/loss analysis by BANT profile
Built With
- api
- call-e
- css3
- fastapi
- html5
- javascript
- pydantic
- pytest
- python
- sdk
- sqlalchemy
- sqlite
- uvicorn
Log in or sign up for Devpost to join the conversation.