Technical Deep Dive
"I'll Log It Later" Is a Lie — So I Built an AI That Calls Reps First
Reps say they'll update Salesforce after the appointment. They won't. I built a voice AI named Poppy that calls them first, debriefs them naturally, and logs 15+ fields in under 2 minutes.
Tisa Daniels
December 10, 2025

The Problem
Your acquisition agents just finished a property appointment. They're sitting in their car, mentally exhausted from a tough negotiation, and now they're supposed to open Salesforce on their phone and update 15 fields with accurate data? Fat chance.
Here's what actually happens:
- They forget half the details by the time they get back to the office
- Notes are vague garbage like "seller motivated, needs work"
- ARV and rehab numbers never get entered
- Follow-up tasks fall through the cracks
- Nobody knows why deals stalled
Your CRM becomes a graveyard of incomplete records. Pipeline visibility is a joke. And when someone asks "what happened with that Tampa property?" the answer is always "let me check my notes... somewhere."
The Solution
Built Poppy — a voice AI assistant that AEs call right after leaving appointments. She has a quick, natural conversation to debrief them, extracts structured data from their answers, and updates Salesforce automatically. Plus she schedules follow-ups and creates task reminders.
What Poppy does:
- Answers the phone with "Hey, how'd it go at the appointment?"
- Asks one question at a time (not a robotic checklist)
- Listens patiently during property walkthroughs
- Extracts ARV, rehab, lowest price, stage, and notes
- Updates the Opportunity record in Salesforce
- Creates calendar Events for seller meetings (with seller name, phone, record link)
- Creates Task reminders ("get seawall quote")
- Logs the full transcript + recording link as an Activity
All in a 3-minute phone call while they're driving to the next appointment.
What You'll Learn
- How to build an inbound voice AI agent with Retell AI
- How to update Salesforce Opportunities, Tasks, and Events via REST API
- How to include seller info and record links in Events
- Optimizing for low latency (responsiveness settings)
Build Details
Time Investment
| Who | Time Required |
|---|---|
| If You Hire a Dev | 30-50 hours (1-2 weeks) |
| If You Build It (with Claude Code) | 2-4 hours |
Breakdown:
- Retell AI agent setup: 30 minutes
- Flask webhook development: 1-2 hours
- Salesforce integration: 1 hour
- Testing & refinement: 30 minutes
Cost Breakdown
| Approach | Cost |
|---|---|
| Developer Rate | $100-150/hour |
| Estimated Dev Cost | $3,000-$7,500 |
| DIY Cost (with Claude Code) | 2-4 hours + ~$200/month tools |
| ROI | 15 min saved per appointment × 20 appointments/week = 5 hours/week saved per AE |
Monthly Tool Costs:
- Retell AI: ~$50/month (based on call volume)
- Heroku: $7/month (Eco dyno)
- OpenAI API: ~$20/month (GPT-4o-mini is cheap)
- Total Monthly Cost: ~$200/month to eliminate manual data entry
Tech Stack
| Tool | Purpose |
|---|---|
| Retell AI | Voice AI platform (handles calls, TTS, STT) |
| Python/Flask | Backend webhook handler |
| Heroku | App hosting |
| Salesforce REST API | CRM updates (Opportunities, Tasks, Events) |
| OpenAI GPT-4o-mini | Transcript → structured data extraction |
| 11Labs (Cleo voice) | Voice synthesis (via Retell) |
Step-by-Step Breakdown
1. Create Retell AI Agent
Set up a new agent in Retell with these voice settings:
- Voice: 11labs-Cleo (warm, natural)
- Responsiveness: 1.0 (fast turn-taking)
- Interruption Sensitivity: 0.6 (let them finish thoughts)
- Backchannel: enabled at 0.3 (natural "mm-hmm" responses)
- Ambient sound: call-center at 10% (subtle background)
The LLM prompt defines Poppy's personality: warm teammate, short direct questions, one question at a time, patient during property descriptions.
2. Provision Phone Number
In Retell, provision a phone number and assign it to your agent. This is the number AEs will call after appointments. Pick an area code that matches your market for familiarity.
3. Build Flask Webhook Backend
Create a Python Flask app with a /webhook/retell endpoint. When calls end, Retell POSTs the transcript and recording URL to this endpoint.
The webhook handler:
- Receives call data from Retell
- Sends transcript to GPT-4o-mini for structured extraction
- Queries Salesforce for matching Opportunity (by property address in Name)
- Updates Opportunity fields
- Creates Activity log with transcript + recording
- Creates Event if follow-up meeting mentioned
- Creates Tasks for any reminders
Key: Return 200 immediately and process async — don't make Retell wait.
4. Configure GPT Extraction
Send the transcript to GPT-4o-mini with a prompt that extracts:
- Property address
- ARV (as number)
- Rehab cost (as number)
- Offer made
- Lowest price seller will accept
- Stage (Hot/Warm/Nurture)
- Why not closeable
- Property walkthrough description
- Marketing notes
- Repair notes
- Follow-up meeting datetime
- Tasks/reminders mentioned
Return as JSON. Temperature 0.1 for consistency.
5. Salesforce Integration
Use SOAP login to authenticate (no Connected App needed). Then use REST API to:
- Query Opportunity by Name LIKE '%address%'
- PATCH Opportunity with extracted fields
- POST Task for call activity log
- POST Event for seller meetings (include seller name, phone, record link in description)
- POST Task for AE reminders
Pull Seller_Name__c, Phone__c from Opportunity to include in Events.
6. Deploy to Heroku
Push your Flask app to Heroku. Set config vars:
SF_USERNAME,SF_PASSWORD,SF_SECURITY_TOKEN,SF_DOMAINOPENAI_API_KEY
Add the Heroku app URL + /webhook/retell to your Retell agent's webhook configuration.
7. Test End-to-End
- Create a test Opportunity in Salesforce with property address in Name
- Call the Poppy phone number
- Run through a debrief conversation
- Check Salesforce: Opportunity updated? Activity logged? Event/Tasks created?
- Adjust prompt and extraction as needed
GitHub Repo
📂 Get the Code: View on GitHub
What's included:
- Full Flask application (
app.py) - Heroku deployment files (
Procfile,requirements.txt,runtime.txt) - Voice settings documentation
- Salesforce field mapping
- Live build prompt for Claude Code
Current Configuration
Voice Settings
| Setting | Value |
|---|---|
| Voice | 11labs-Cleo |
| Speed | 1.0 |
| Temperature | 1.02 |
| Volume | 1.2 |
| Responsiveness | 1.0 |
| Interruption Sensitivity | 0.6 |
| Backchannel | 0.3 frequency |
| Ambient Sound | call-center @ 10% |
Salesforce Fields Updated
StageNameARV__cRehab_Cost__cLowest_price_seller_will_accept__cLast_Offer_Made__cProperty_Walk_Thru__cAE_Marketing_Notes__cAE_Repair_Notes__cWhy_was_this_not_closable__c
Questions?
💬 Have questions or want to share your results?
- Comment on the YouTube video
- DM me on Instagram: @donottakeifallergictorevenue
Common questions:
- "Can Poppy call AEs instead of them calling in?" → Yes, Retell supports outbound. Add a trigger.
- "What if the Opportunity doesn't exist yet?" → Could auto-create, or have Poppy note it for manual review.
- "Can I change the questions?" → 100%, it's all in the LLM prompt.


