← Back to Builds

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

Tisa Daniels

December 10, 2025

"I'll Log It Later" Is a Lie — So I Built an AI That Calls Reps First

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

WhoTime Required
If You Hire a Dev30-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

ApproachCost
Developer Rate$100-150/hour
Estimated Dev Cost$3,000-$7,500
DIY Cost (with Claude Code)2-4 hours + ~$200/month tools
ROI15 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

ToolPurpose
Retell AIVoice AI platform (handles calls, TTS, STT)
Python/FlaskBackend webhook handler
HerokuApp hosting
Salesforce REST APICRM updates (Opportunities, Tasks, Events)
OpenAI GPT-4o-miniTranscript → 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_DOMAIN
  • OPENAI_API_KEY

Add the Heroku app URL + /webhook/retell to your Retell agent's webhook configuration.

7. Test End-to-End

  1. Create a test Opportunity in Salesforce with property address in Name
  2. Call the Poppy phone number
  3. Run through a debrief conversation
  4. Check Salesforce: Opportunity updated? Activity logged? Event/Tasks created?
  5. 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

SettingValue
Voice11labs-Cleo
Speed1.0
Temperature1.02
Volume1.2
Responsiveness1.0
Interruption Sensitivity0.6
Backchannel0.3 frequency
Ambient Soundcall-center @ 10%

Salesforce Fields Updated

  • StageName
  • ARV__c
  • Rehab_Cost__c
  • Lowest_price_seller_will_accept__c
  • Last_Offer_Made__c
  • Property_Walk_Thru__c
  • AE_Marketing_Notes__c
  • AE_Repair_Notes__c
  • Why_was_this_not_closable__c

Questions?

💬 Have questions or want to share your results?

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.
Share

Want builds like this for your business?

Let's talk about your revenue systems.

Book a Call