The Lead Nurturing Agent

The lead
nurturıng
agent

Every lead. Every touch. On schedule.

by James Rembert, Sept 2026

Most buyers and sellers act months after the first inquiry. This AI voice agent keeps calling on the calendar you set, day 1 through day 180, until each lead books, lists, or asks to stop. You keep the relationship. The agent keeps the calendar.

88%

of 2025 buyers purchased through an agent. Your lead will hire someone. Stay in touch and the someone is you.

7X

more likely to qualify a lead when a business reaches out within the first hour. Speed wins the first call. Cadence wins the rest.

<$1

per nurture call. All-in Retell setups run about $0.13 to $0.31 per minute, and a check-in lasts two to three minutes.

no. 01

Leads die between call two and call six.

Paid for. Called twice. Gone.

Zillow, Realtor.com, Facebook ads, open house sign-ins. Every source costs money or a Sunday afternoon. The first call goes out fast. The third call slips. By week five your lead is touring with someone else.

  • Where leads die

    In the gap between inquiry and readiness. A buyer who says “next spring” in October needs a check-in every few weeks until spring. Busy weeks push those calls off your list, and nobody else owns them.

  • The fix

    Every new row in your lead sheet starts a call schedule on day one. The voice agent works the schedule, logs each result, and steps aside the moment a lead books a showing or opts out.

  • Parts list

    Retell AI for the voice. Google Sheets for the records. Modal for three scheduled Python jobs, which Claude Code writes and deploys for you. You feed the sheet. The system handles the dialing.

    Fixed: $2/mo number. Variable: call minutes.

  • Answer rates

    These leads gave you their number and asked a question. A check-in on their own inquiry reads as good service. A short text before each call tells them who is calling, so they pick up instead of sending you to voicemail.

no. 02

Eight lead types. Eight calendars.

Same script. Different clocks.

A buyer who toured an open house and a homeowner curious about value need different timing. The voice script adapts through variables. The calendar lives in the cadence column. Each dot marks one scheduled call.

Days after the lead enrolls, on a square-root scale so the busy first week stays readable.

no. 03

Five moves. Repeat until every lead resolves.

Sheet. Scheduler. Voice.

Keep the schedule out of the voice agent. The sheet stores the plan, a scheduler reads the plan, and Retell handles only the conversation. Split this way, a new lead type means editing one cell.

  1. 1

    A lead becomes a row

    A Zapier zap, a form webhook, or your own typing adds the lead to the sheet with a lead type, the property or question, the signup date, and a cadence.

    Google Sheets
  2. 2

    The scheduler checks the calendar

    Twice an hour a Modal job reads every active row, counts days since signup, and compares the count to the next offset in the cadence. Dana enrolled 10 days ago on 1,4,10,21,45 with two calls logged. Her third offset is day 10, so Dana is up. Outside 8am to 8pm local time, nobody gets dialed.

    Modal cron
  3. 3

    A text lands first

    “Hi Dana, Harbor Lane Realty here. Expect a quick call about the Oak Street open house in a few minutes.” The call follows five minutes later, loaded with Dana’s name, the property, and notes from the last conversation.

    Retell SMS
    create-phone-call
  4. 4

    The agent has a short conversation

    “Hi Dana, you toured 14 Oak Street last weekend. Is the home still on your list, or should I send a few similar ones?” Ready leads pick a showing time or get transferred to you. Everyone else hears “no rush” and stays on the calendar. A stop request ends the calls for good.

    Retell conversation flow
  5. 5

    The sheet learns the result

    When the call wraps, Retell scores the conversation against your post-call fields and sends the scores to a webhook. The webhook updates Dana’s row with outcome, notes, and status. The next scheduled day takes over from there.

    Retell webhook
    Google Sheets

no. 04

Trace any call, dial to spreadsheet.

Six endings. One sheet.

Pick an ending. The path shows each step the agent takes and the exact change your sheet receives.

    no. 05

    One prompt into Conductor.

    Paste. Review. Test. Publish.

    Conductor is Retell’s built-in copilot for agent building. Open an agent, click the sparkle icon, and paste the prompt below. You get a draft flow with a node for each branch, the variables, and the post-call fields. Treat the draft as a first pass and test before going live.

    Retell Conductor prompt

    ROLE
    Build an outbound conversation flow for {{brokerage_name}}, a real estate team. Every person on the call list contacted the team first, through a home search site, an open house sign-in, a home value request, or a past transaction. These calls follow up on those requests. The agent never sells, never pressures, and never cold calls.
    
    SUCCESS LOOKS LIKE
    - Ready buyers and sellers end the call with a showing, buyer consult, or listing consult requested.
    - Undecided leads feel zero pressure and stay open to the next call.
    - Anyone who wants out gets out on the first request.
    
    INPUT VARIABLES
    first_name, brokerage_name, agent_name, transfer_number, lead_type, interest, days_since_inquiry, touch_number, last_outcome
    - lead_type values: portal_buyer, open_house, valuation, future_buyer, renter, relocation, listing_followup, past_client
    - interest example: "the open house at 14 Oak Street"
    - last_outcome example: "touring with spouse on Saturday"
    
    DELIVERY
    Warm, unhurried, neighborly. Sound like a trusted office coordinator, not a salesperson. Ask one thing at a time. Offer help once per call and drop the subject after two soft no's. Aim for 90 seconds to 3 minutes.
    
    NODE 1: IDENTITY
    Ask for {{first_name}} by name. Wrong person: apologize, end the call, outcome wrong_number.
    
    NODE 2: DISCLOSURE
    "I'm an AI assistant calling for {{agent_name}} with {{brokerage_name}}, and this call is recorded."
    
    NODE 3: CONTEXT
    Mention {{interest}} and roughly how long ago the lead reached out, based on {{days_since_inquiry}}. When {{touch_number}} is 2 or higher, bring up {{last_outcome}} in plain words.
    
    NODE 4: CHECK-IN (varies by lead_type, swap in {{interest}} for any address)
    - portal_buyer, relocation: "How's the search going? Any homes catch your eye?"
    - open_house: "Is the home still on your mind, or would a few similar listings help?"
    - valuation: "Want {{agent_name}} to walk through and firm up the number?"
    - future_buyer, renter: "Has your timeline shifted at all?"
    - listing_followup: "Have you picked a direction, or would answers help first?"
    - past_client: "How's the house treating you? Anyone you know thinking about a move?"
    
    NODE 5A: BOOK
    Collect a preferred day and time for a showing or consult. Offer a live transfer to {{transfer_number}} if they prefer a person now. Recap the request before ending. Outcome booked.
    
    NODE 5B: ANSWER
    Pull answers from the attached knowledge base only. Missing answer: tell them {{agent_name}} will follow up personally. Never give a price opinion, commission figure, offer advice, or any detail absent from the knowledge base. Return to NODE 4 afterward.
    
    NODE 5C: LATER
    Respond with warmth and no pushback. Ask once about timing and the main hurdle. Skip promises about when the next call comes. Outcome not_yet.
    
    NODE 5D: OPT OUT
    Any version of "stop calling," "remove me," or "don't call again" jumps here from anywhere in the flow. Confirm removal in one sentence, apologize, and end the call. No follow-up questions. Outcome opted_out.
    
    GLOBAL: FAIR HOUSING
    In every node: never characterize a neighborhood, school, or street by its residents. Never label an area safe, dangerous, good, or bad. Never adjust tone or offers based on who the caller seems to be. For school or crime questions, direct the lead to the school district website or local police data and offer a follow-up from {{agent_name}}.
    
    GLOBAL: OFF-LIMITS
    Legal, tax, lending, or inspection advice gets a polite decline and a follow-up offer.
    
    GLOBAL: HONESTY
    If asked whether this is AI or a person, confirm AI right away and keep helping.
    
    VOICEMAIL NODE
    Detect voicemail. Leave under 15 seconds: {{first_name}}, {{brokerage_name}}, and a callback number. Leave property, price, and address out. Outcome voicemail.
    
    POST-CALL DATA (exact field names, read by the backend)
    - outcome: booked | not_yet | opted_out | voicemail | no_answer | wrong_number
    - temperature: hot | warm | cold
    - appointment_request: text, requested day and time
    - timeline: text, move or decision timing in the lead's words
    - hurdle: text, main reason for waiting
    - preapproved: yes | no | unknown (buyers only)
    - summary: text, two sentences max
    
    CLOSE
    Every connected call ends with a spoken goodbye before hangup.

    Test before going live

    1. 1Call yourself once as an open house lead and once as a valuation lead. Confirm the check-in question changes.
    2. 2Say “take me off your list” in the middle of the call. The agent should exit on the spot.
    3. 3Ask “Is this a good neighborhood for families?” The agent should point you to public sources and offer a follow-up.
    4. 4Let a call roll to voicemail and listen back. No address, price, or property detail should come through.
    5. 5Open the call log and confirm all seven post-call fields populate under the exact names above.

    no. 06

    Every lead lives on one row.

    No new CRM.

    The cadence cell holds day offsets per lead, so a relocation buyer and a past client run on different calendars in the same tab. Edit the cell and the next scheduler run follows the new plan.

    Tab: leads. Example rows.

    first_namephonelead_typeinterestsignup_datecadencetouchlast_calledlast_outcomestatusnotes
    Dana+15555550142open_house14 Oak St open house2026-09-021,4,10,21,4522026-09-06not_yetactivetouring with spouse Sat
    Marcus+15555550187portal_buyer3BR under $450K2026-08-111,3,7,14,30,60,9052026-09-10bookedbookedbuyer consult Thu 6pm
    Priya+15555550119valuationvalue of 22 Elm Ave2026-07-142,7,21,45,90,18042026-08-28voicemailactive
    Tom+15555550163relocationmove from Denver2026-08-203,14,30,60,9012026-08-23opted_outopted_outdo not contact
    Alicia+15555550128listing_followuplisting consult, 9 Birch Ct2026-08-012,7,14,3042026-08-31not_yetdonelisted with another agent

    Active

    On the calendar. The scheduler reviews this row twice an hour.

    Booked

    A showing or consult got requested. Dialing stops and an alert hits your inbox.

    Opted out

    Permanent. The phone number also lands on the do_not_call tab.

    Done

    Every scheduled call went out with no booking. Move these leads to a long-term drip or a personal call from you.

    Feed the tab from the tools you already use: a Zapier zap from your CRM, a webhook from your website form, or a quick paste after Sunday’s open house.

    no. 07

    Three scheduled jobs.

    Timekeeper. Caller. Record keeper.

    Modal hosts all three, and a solo agent’s call volume fits inside Modal’s monthly free credits. Claude Code writes the Python in the next section. Here is what each job reads, writes, and passes along.

    The Scheduler

    Modal cron
    Every 30 minutes

    The timekeeper. Decides who needs a call right now and refuses to dial outside calling hours, twice in one day, or on any row not marked active.

    Reads
    status, signup_date, cadence, touch, last_called, do_not_call
    Writes
    status to done when a cadence runs out
    Passes to
    Due leads to the Dialer

    The Dialer

    One run
    per due lead

    The caller. Records the attempt in the sheet before dialing, so a restart mid-run never rings the same person twice. Then the heads-up text, a five-minute pause, and the Retell call with the lead’s variables attached.

    Reads
    first_name, phone, lead_type, interest, last_outcome
    Writes
    touch + 1, last_called
    Passes to
    Retell, with row number in call metadata

    The Results Webhook

    Modal web endpoint
    Receives call_analyzed

    The record keeper. Retell sends post-call data here after each conversation. The webhook matches the call to a row and applies the result, from a booking alert to a permanent opt-out.

    Reads
    call_analyzed payload, call metadata
    Writes
    last_outcome, notes, status, do_not_call
    Passes to
    Booking alert to your inbox

    no. 08

    Claude Code ships the backend.

    You answer. Claude builds.

    The prompt below turns Claude Code into a build partner. Claude interviews you for settings, scaffolds a Modal project, writes and tests each job, deploys, and proves the loop with a real call to your cell.

    Have these ready

    1. 1Retell account with the published agent
    2. 2Google account for Sheets and Cloud Console
    3. 3Free Modal account
    4. 4Your cell phone for the test call

    Aigent Lab build prompt for Claude Code

    You are my build partner for a real estate lead nurturing system. Work in phases. Finish each phase and check in with me before starting the next.
    
    CONTEXT
    - A Retell AI voice agent already exists and is published. The agent returns these post-call fields: outcome, temperature, appointment_request, timeline, hurdle, preapproved, summary.
    - Leads live in a Google Sheet. Each lead carries a cadence of day offsets.
    - You will build three Modal jobs: a scheduler, a dialer, and a results webhook.
    
    PHASE 1: INTERVIEW
    Collect settings in three short rounds. Tell me where to find each value.
    Round A, accounts: Retell API key, Retell agent ID, Retell outbound number in E.164 format. For Modal, check for an existing token first. If missing, guide me through "pip install modal" and "modal token new".
    Round B, Google: a service account JSON key with the Google Sheets API enabled. Walk me through Google Cloud Console if I need one, and remind me to share the sheet with the service account email as Editor. Then the sheet ID from the URL.
    Round C, business: brokerage name, agent name, transfer number, time zone, my cell for testing, and an optional email for booking alerts.
    Store secrets in .env locally and in a Modal Secret for production. Never print a full key back to me.
    
    PHASE 2: SHEET SETUP
    Create or verify these tabs.
    leads: first_name, phone, lead_type, interest, signup_date, cadence, touch, last_called, last_outcome, status, notes
    do_not_call: phone, first_name, date_added
    cadence_defaults: lead_type, cadence, with these rows:
      portal_buyer      1,3,7,14,30,60,90
      open_house        1,4,10,21,45
      valuation         2,7,21,45,90,180
      future_buyer      14,45,90,135,180
      renter            30,60,90,120
      relocation        3,14,30,60,90
      listing_followup  2,7,14,30
      past_client       30,90,180
    When a new row has an empty cadence, fill the cell from cadence_defaults by lead_type.
    Valid status values: active, booked, opted_out, done. New rows start with touch 0 and status active.
    
    PHASE 3: SCHEDULER (Modal cron, every 30 minutes)
    For each active row:
    - offsets = cadence split on commas.
    - If touch has reached the number of offsets, set status to done and skip.
    - days_since = whole days from signup_date to today in the configured time zone.
    - The row is due when days_since is at least offsets[touch].
    Skip the row if any check fails: local hour from 8 up to 20, last_called not today, phone absent from do_not_call.
    After downtime, a lead gets one catch-up call per run, never several.
    Send due rows to the dialer.
    
    PHASE 4: DIALER (one lead per run)
    1. Write touch + 1 and last_called = now before anything else.
    2. If PRECALL_TEXT is on, send through Retell's SMS API: "Hi {first_name}, {brokerage_name} here. Expect a quick call about {interest} in a few minutes." Default the flag to off until A2P 10DLC registration clears.
    3. Pause 5 minutes, or 30 seconds in test mode.
    4. Place the call with Retell create-phone-call. Pass retell_llm_dynamic_variables: first_name, brokerage_name, agent_name, transfer_number, lead_type, interest, days_since_inquiry, touch_number, last_outcome. Add the sheet row number to call metadata.
    5. In test mode, dial my cell instead of the lead.
    
    PHASE 5: RESULTS WEBHOOK (Modal web endpoint)
    - Protect the URL with a secret path token.
    - Handle call_analyzed events. Return 200 and ignore other event types.
    - Locate the row from call metadata, with phone number as the fallback.
    - Write last_outcome. Append "YYYY-MM-DD: summary" to notes, plus timeline and hurdle when present.
    - booked: set status to booked, then email the alert address with name, phone, interest, appointment_request, and preapproved.
    - opted_out: set status to opted_out and append the lead to do_not_call. No code path ever reactivates this row.
    - wrong_number: set status to done and note "wrong number".
    - not_yet, voicemail, no_answer: leave status alone.
    - Use the Retell API to set this endpoint as the agent's webhook URL.
    
    PHASE 6: TESTS BEFORE DEPLOY
    Write unit tests for the scheduler logic and run them. Cover: due on the exact offset day, not due one day early, exhausted cadence flips to done, blocked outside calling hours, blocked when already called today, blocked when on do_not_call.
    
    PHASE 7: DEPLOY AND LIVE TEST
    Deploy all three jobs. Add a test row with my cell, cadence "0", and status active. Trigger the scheduler by hand. Confirm my phone rings, then show me the row before and after the webhook update. Run a second test where I say "please stop calling" and confirm the opt-out path.
    
    HANDOFF
    Give me a five-line summary: what runs where, how to add leads, how to pause the system, where to read logs, and how to leave test mode (set TEST_MODE to False, then redeploy).

    no. 09

    Four rules for clean outbound.

    Consent. Fair housing. Reputation.

    Your leads opted in, which puts nurture calls on the friendliest end of outbound. Your AI still speaks under your license. Treat these four rules as non-negotiable.

    Consent and the TCPA

    The FCC’s February 2024 ruling placed AI-generated voices under the TCPA’s “artificial voice” rules. Every AI call needs prior express consent.

    • Put consent language on every capture point. “By checking this box, I consent to calls and texts from [Brokerage] about my real estate inquiry, including calls using AI-generated voice, at the number provided.” Web forms, portal integrations, and digital open house sign-ins all need the box.
    • Open with the disclosure. The agent names itself as AI and mentions recording before the conversation starts.
    • Treat opt-outs as instant. The FCC opt-out rule effective April 2025 sets a ceiling of 10 business days. Your webhook records the opt-out seconds after hangup.
    • Dial 8am to 8pm local. The federal window runs to 9pm. Florida and a handful of other states stop earlier, so 8pm keeps you clear in more places.

    Fair housing on every call

    The agent talks about the property and the process. The people in an area stay off the table.

    • No neighborhood descriptions based on who lives there.
    • No safe, good, or bad labels on schools or areas. Point leads to the school district site or local police data.
    • Same script for every caller. Variables change the property, never the treatment.
    • Ask your broker to review the prompt and knowledge base before launch.

    Stay off the spam label

    • Register at freecallerregistry.com. Hiya, First Orion, and TNS pull business identity from the registry and drive most caller ID labels.
    • Pace each number. Carriers watch for spikes. Nurture traffic stays low because each lead hears from you every few days at most. A ceiling near 100 calls per number per day keeps your reputation clean.
    • Text before you dial. A lead who recognizes the number rarely taps “report spam.”

    Call volume and limits

    Retell’s pay-as-you-go plan allows up to 20 simultaneous calls. The dialer processes leads one at a time, so a typical agent database never approaches the cap. Teams feeding thousands of portal leads a month should add a second number and split lead types between the two.

    Not legal advice. Run your consent language and calling hours past your broker and an attorney first.

    no. 10

    Price the system against one closing.

    One closing covers years.

    Swap in your own numbers. For most agents, one closing covers years of calls.

    example numbers. tap any one to swap in yours.

    $102

    Per month, calls plus a $2 number

    $1,224

    For a full year of follow-up

    7.4 YRS

    Of calls covered by one closing

    Run a reactivation campaign on your old database first. Then let nurture handle every new lead from day one.

    Build this agent live with us.

    Follow-Up Protocol. Live builds.

    Join The Aigent Lab

    see you inside. James