> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pulsyai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Build an Outbound AI Agent

> Step-by-step guide to configuring an outbound voice AI agent on PulsyAI — speed-to-lead campaigns, the identity-confirmation greeting variant, Auto Call Back, and SMS fallback workflows.

An outbound AI agent is a voice AI agent that initiates calls to leads or contacts — typically triggered by a form submission, a CRM update, or a scheduled campaign. Common use cases include speed-to-lead campaigns where the agent calls within seconds of a form submission, dead-lead reactivation campaigns, appointment confirmation calls, and high-volume cold outreach.

<Columns cols={3}>
  <Card title="Speed-to-lead in seconds" icon="zap">
    The AI dials within seconds of form submission — while the lead is still hot.
  </Card>

  <Card title="Voice + SMS in one stack" icon="layers">
    Auto Call Back retries voice, then falls back to SMS automatically when voice fails.
  </Card>

  <Card title="Identity-confirmation greeting" icon="user-check">
    "Hey, am I speaking with {name}?" — the opener built for outbound dynamics.
  </Card>
</Columns>

This page covers the outbound-specific setup. The script methodology, conversion principles, and the four-step structure that go into your agent's prompt are universal — they live on the [Build a Script](/platform/build-your-agent/build-a-script) page, and we recommend reading that first if you haven't already. The PulsyAI advantage for outbound is the combination of the methodology plus a stack of outbound-specific features that work together to maximize connection and conversion rates.

<Tip>
  **Before you start:** Read [Build a Script](/platform/build-your-agent/build-a-script) end-to-end. The eight principles on that page apply to outbound as well as inbound — shorter scripts convert better, never repeat user information, keep sentences short. Outbound just adapts the opening sequence because the AI is initiating the call rather than answering one. This implementation guide assumes you've drafted a script following that methodology.
</Tip>

## The outbound conversion stack

PulsyAI outbound agents combine four features that work together to maximize lead engagement on every campaign:

<Columns cols={2}>
  <Card title="1. Identity-confirmation greeting" icon="user-check">
    Outbound calls open with "Hey, am I speaking with {name}?" to confirm you've reached the right person before the agent introduces itself. See the [greeting section](#the-outbound-greeting-variant) below for the full pattern.
  </Card>

  <Card title="2. The four-step PulsyAI script" icon="list-checks">
    Adapted slightly for outbound (the AI initiates, the user doesn't dial in) but otherwise identical to inbound. See [Build a Script](/platform/build-your-agent/build-a-script) for the full methodology.
  </Card>

  <Card title="3. Auto Call Back" icon="rotate-cw">
    Automatic retry of unanswered calls with configurable delays, max attempts, time windows, and an optional SMS fallback agent. See [Auto Call Back](/platform/auto-call-back).
  </Card>

  <Card title="4. SMS AI Agent fallback" icon="message-square">
    When voice retries are exhausted, an SMS agent picks up the contact via text instead. Can be a separate SMS agent or the outbound agent itself acting as its own SMS follow-up.
  </Card>
</Columns>

Here is how the full outbound flow runs end-to-end, from the moment the campaign trigger fires to the moment the contact is either captured or closed:

```mermaid theme={null}
flowchart TD
    A[Trigger fires<br/>Form submission, CRM update,<br/>or campaign start] --> B[Outbound AI agent<br/>places the call]
    B --> C{Did the contact<br/>answer?}
    C -->|Yes| D["Hey, am I speaking<br/>with name?"]
    D --> E[AI introduces itself as<br/>virtual assistant +<br/>states reason for call]
    E --> F[Step 3: Capture lead info<br/>or update existing info]
    F --> G[Step 4: Closure with<br/>SMS verification mention]
    G --> H[Whisper post-call correction<br/>+ Verify User Info if enabled]
    H --> I[Lead lands in CRM, Slack,<br/>email, or webhook]
    C -->|No answer / voicemail / busy| J[Auto Call Back queue]
    J --> K{Retry attempts<br/>remaining?}
    K -->|Yes| L[Wait callback delay<br/>+ time window check]
    L --> B
    K -->|No| M{SMS fallback<br/>configured?}
    M -->|Yes| N[SMS AI agent<br/>follows up by text]
    M -->|No| O[Contact closed]
    N --> I
    style A fill:#EEF2FF,stroke:#6366F1
    style I fill:#D1FAE5,stroke:#10B981
    style D fill:#FEF3C7,stroke:#F59E0B
    style J fill:#FEF3C7,stroke:#F59E0B
    style N fill:#FEF3C7,stroke:#F59E0B
```

The yellow-highlighted nodes are the outbound-specific differentiators — the identity-confirmation greeting that gets past "who's calling?" suspicion, the Auto Call Back loop that catches contacts who didn't pick up the first time, and the SMS fallback that converts contacts who'll never answer a phone but will reply to a text.

The setup steps below walk you through configuring each piece.

## The outbound greeting variant

Outbound calls open differently from inbound calls because the dynamic is reversed — the contact didn't dial you, you dialed them. They don't know who you are when they pick up. The opening sequence has to confirm identity first, then introduce the agent, then state the reason.

The PulsyAI outbound greeting pattern:

> "Hey, am I speaking with `{name}`?" *\[Wait for confirmation]* "Great. This is Luna the virtual assistant from `{company_name}`. I'm reaching out because you recently `{reason}` — e.g., requested a free quote on our website, signed up for our consultation, etc. Is that right?" *\[Wait for confirmation]*

A few things matter in this opening:

* **Use the contact's first name in `{name}`** — pulled from the form submission or CRM record that triggered the call. This is the single biggest signal that this is a real, intentional call and not a spam dialer.
* **Confirm identity before introducing the agent** — if the wrong person answered (a spouse, a coworker), you find out before you've wasted the script on them.
* **Disclose the virtual assistant identity after confirmation** — same transparency principle as inbound, just sequenced after identity confirmation.
* **State the reason immediately** — referring to the action they took (form, signup, opt-in) creates instant context and reduces the "is this a scam?" instinct.

Once both confirmations are received, the script proceeds straight to Step 3 (capture or update lead info) — there's no Step 1 "describe your problem" because you already know why you're calling them. The full methodology for the remaining steps lives on the [Build a Script](/platform/build-your-agent/build-a-script) page.

## Setup walkthrough

<Steps>
  <Step title="Assign a phone number" icon="phone">
    Every outbound agent needs a phone number to call from. PulsyAI supports importing existing numbers from Twilio, Telnyx, or your own SIP trunk for outbound use.

    <Warning>
      Numbers purchased in-app are **inbound-only** — you cannot dial out from them. For outbound, import an existing Twilio, Telnyx, or SIP number.
    </Warning>

    For full details on each option, see the [Phone Numbers](/platform/phone-numbers) page.
  </Step>

  <Step title="Build the agent and paste your script" icon="file-text">
    Inside your agent builder, create a new agent of type **Outbound**. Paste the script you drafted using the [Build a Script](/platform/build-your-agent/build-a-script) methodology, with the outbound greeting variant covered above replacing the inbound greeting.

    <Info>
      Use `{name}` curly-brace variables to insert the contact's first name into the greeting at call time. PulsyAI substitutes these at runtime based on the contact data passed in by your trigger (form submission, campaign, API call).
    </Info>

    If your client's knowledge base fits inline in the prompt (under approximately 100 pages of equivalent text), include it directly in the prompt to avoid function-call latency. For larger knowledge bases, use the dedicated [Knowledge Base](/platform/knowledge-base) section instead.
  </Step>

  <Step title="Configure Auto Call Back" icon="rotate-cw">
    Auto Call Back is the feature that handles the inevitable reality of outbound calling: most calls don't connect on the first attempt. People are in meetings, driving, ignoring unknown numbers, or simply not near their phone. Without Auto Call Back, every unanswered call is a lost contact. With it, each contact gets multiple structured attempts before being closed.

    **PulsyAI recommendation for typical B2B outbound campaigns:**

    <Columns cols={2}>
      <Card title="Callback delay" icon="timer">
        **1 hour** after the original missed call. Long enough that the contact isn't still in whatever was distracting them, short enough that the lead is still hot.
      </Card>

      <Card title="Max attempts" icon="repeat">
        **3 retries.** Beyond this, voice contact rates drop sharply and you risk triggering recipient frustration.
      </Card>

      <Card title="SMS fallback agent" icon="message-square">
        **Enabled.** After 3 voice attempts, the SMS agent follows up by text — this captures contacts who'll never pick up a phone but will reply to a message.
      </Card>

      <Card title="Time windows" icon="clock">
        Match the timezone to where your **contacts** are located (not your business). B2B campaigns: weekday business hours (10:00–17:00 local time).
      </Card>
    </Columns>

    <Info>
      The SMS fallback agent dropdown lists every SMS AI agent on your account plus the current outbound agent itself — so you can use the same agent as its own SMS follow-up if you want voice and text to share one phone number and one configuration.
    </Info>

    For full configuration details, time window best practices, and the regulatory considerations around outbound calling, see the dedicated [Auto Call Back](/platform/auto-call-back) page.
  </Step>

  <Step title="Set up the campaign trigger" icon="zap">
    Outbound agents don't just sit and wait — they need a trigger to know when to place calls. PulsyAI supports several trigger sources, each suited to different campaign patterns:

    <Columns cols={2}>
      <Card title="Form submission" icon="file-text">
        A lead fills out a form on your client's website, and PulsyAI calls them within seconds (speed-to-lead). This is the highest-converting outbound use case.
      </Card>

      <Card title="CRM record creation or update" icon="database">
        A new contact lands in HubSpot, GoHighLevel, or another CRM, and the agent is triggered to make first contact automatically.
      </Card>

      <Card title="Webhook" icon="webhook">
        A custom event from any external system fires a webhook that triggers the agent. Suited for clients with bespoke automation stacks.
      </Card>

      <Card title="Outbound Campaign" icon="megaphone">
        A pre-built list of contacts uploaded as an Excel (XLSX) file, scheduled to fire at a chosen date, time, and timezone. Best for batched outreach — dead-lead reactivation, appointment rounds, cold lists.
      </Card>
    </Columns>

    ### Dynamic variables from Excel columns

    When you use Outbound Campaigns, every column in your Excel file automatically becomes a dynamic variable inside your agent's script. Reference any column using single curly braces with the exact column name — `{first_name}`, `{email_address}`, `{last_purchase_date}`, etc. At call time, PulsyAI substitutes the variable with the row's actual value for the contact being called.

    This is what powers the personalized outbound greeting:

    > "Hey, am I speaking with `{first_name}`?"

    The `{first_name}` placeholder pulls directly from the Excel column named `first_name`. Each contact in the campaign hears their actual first name in the opener. This applies to any column — you can build scripts that reference the contact's name, recent purchase, account balance, last appointment date, or any other data you choose to include.

    <Warning>
      The column name in your script must match the Excel header **exactly**, including case sensitivity. `{first_name}` matches a column named `first_name` but **not** `First_Name` or `firstname`.
    </Warning>

    For the full Outbound Campaigns workflow — Excel format requirements, the strict `PHONE_NUMBER` column rule, campaign scheduling, dynamic variables, and campaign lifecycle states — see the dedicated [Outbound Campaigns](/platform/campaigns) page.

    For details on triggering via integrations and webhooks instead of campaigns, see the [Integrations](/platform/integrations) section.
  </Step>

  <Step title="Connect integrations and test" icon="plug">
    The last step is wiring up where the captured or updated leads should land. Outbound agents typically integrate with:

    <Columns cols={3}>
      <Card title="CRM connectors" icon="database">
        Update the existing contact record with the outcome of the call (reached, no answer, booked appointment, etc.).
      </Card>

      <Card title="Webhooks" icon="webhook">
        Custom destinations for clients with bespoke systems.
      </Card>

      <Card title="Slack or email" icon="bell">
        Notification channels for high-priority outcomes.
      </Card>
    </Columns>

    For the full list of available integrations and setup guides, see the [Integrations](/platform/integrations) section.

    <Check>
      **Final test:** trigger the agent manually with a test contact. Verify three things:

      1. The agent uses the contact's `{name}` correctly in the greeting.
      2. The captured outcome data lands in the configured destination.
      3. If you deliberately don't answer the test call, Auto Call Back schedules the retry at the expected interval.
    </Check>
  </Step>
</Steps>

## Common outbound use cases

<CardGroup cols={2}>
  <Card title="Speed-to-lead" icon="zap">
    The highest-ROI outbound use case. A lead fills out a form on your client's website or a paid ad, and PulsyAI dials them within seconds — while the lead is still on the page, still focused, still hot. Industry data is consistent: leads contacted within five minutes convert dramatically higher than leads contacted an hour later. For ads-driven form campaigns specifically, PulsyAI resellers see at minimum 30% lift in conversion rate versus waiting for the human team to call back during business hours. Most businesses can't staff humans to dial that fast. Outbound AI agents can. See [The speed-to-lead playbook](/platform/build-an-outbound-ai-agent#the-speed-to-lead-playbook) below for the full configuration.
  </Card>

  <Card title="Dead-lead reactivation" icon="rotate-ccw">
    The agent calls old leads from your client's CRM — leads that were qualified but never closed, leads that went silent six months ago, leads that ghosted after a quote. The agent runs through a reactivation script and either re-engages them or marks them dead for good. Massive ROI on existing list assets.
  </Card>

  <Card title="Appointment confirmation" icon="calendar-check">
    The agent calls upcoming appointment holders to confirm they're still planning to come, reschedule if needed, or cancel cleanly. Drops no-show rates significantly in industries like dental, medical, and home services.
  </Card>

  <Card title="Cold outreach campaigns" icon="megaphone">
    Pre-built lists of cold contacts called in sequence, at scale, within compliance windows. The agent qualifies them and books the human callback for the ones who engage. Best for verticals with high lead-quality variance — the agent filters the noise so the human team only talks to qualified prospects.
  </Card>

  <Card title="Post-call follow-up" icon="phone-forwarded">
    After an inbound call or a human-handled meeting, the outbound agent calls back the next day to confirm next steps, gather missing info, or push the deal forward. Closes the loop on conversations that would otherwise stall.
  </Card>

  <Card title="Stale CRM record refresh" icon="database">
    Periodically calls old CRM records to verify contact info is still current, ask about updated needs, and refresh the database. Keeps the CRM clean and surfaces re-engagement opportunities the human team would have ignored.
  </Card>
</CardGroup>

## The speed-to-lead playbook

Speed-to-lead is the single highest-converting outbound use case PulsyAI runs in production. For paid-ad campaigns where leads fill out a form (Facebook Lead Ads, Google Lead Form Extensions, TikTok Lead Generation, or native website forms tied to paid traffic), implementing this playbook lifts conversion rates by at least 30% versus the alternative of waiting hours or days for a human team to call back.

This section documents the exact configuration the PulsyAI team uses for speed-to-lead campaigns.

### The script — keep it shorter than inbound

Outbound speed-to-lead scripts should be even shorter than inbound scripts. The lead just filled out a form moments ago — they know why you're calling, you don't need to explain it. Run the conversation in three minimal beats:

1. **Confirm identity** — "Hey, am I speaking with `{first_name}`?"
2. **Confirm intent** — "Great, this is Luna the virtual assistant from `{company_name}`. I'm reaching out because you just submitted a form for `{reason}` — e.g., a free quote on bathroom renovation, our consultation, etc. Is that right?"
3. **Book immediately** — "Perfect. We wanted to help you set up an appointment with one of our representatives — what would be the best time for them to reach out to you?"

That's it. Once the lead confirms a callback time, the agent captures whatever scheduling details the client needs and ends the call. No qualification questions, no deep discovery, no rate quoting. The job of this script is to **capture the booking intent while the lead is still hot** — the human representative handles everything else on the scheduled callback.

The same PulsyAI Plumber example structure on the [Build a Script](/platform/build-your-agent/build-a-script) page applies, just trimmed. Steps 1 and 2 of the four-step structure collapse into the identity-and-intent confirmation above. Step 3 (capture) is just the callback scheduling. Step 4 (closure) is the warm wrap-up promising the human callback.

#### Full example script: PulsyAI Sofa Care

Below is a complete, production-grade speed-to-lead script for an outbound voice AI agent serving a sofa-cleaning business that runs paid ads. The fictional company is "PulsyAI Sofa Care". This script demonstrates every principle from this playbook applied in real form — identity-confirmation greeting, intent confirmation, immediate booking attempt, calendar function calls, optional pricing fallback, light upsell, and clean closure.

The full call is typically completed in 1–2 minutes. The human representative handles deep qualification and pricing on the scheduled callback, which is capped at 5 minutes.

##### Knowledge base — pricing reference (inline)

The script includes a small inline pricing knowledge base immediately below the closure, following [Principle 5](/platform/build-your-agent/build-a-script#principle-5-knowledge-base-placement---inline-vs-separate) — small enough to fit in the prompt, eliminating function-call latency on pricing questions:

* **Sofas:** \$125 minimum, \$350 maximum (travel included)
* **Chairs:** \$40 to \$140
* **Armchairs:** \$80 to \$150
* **Car interiors:** \$180 to \$220
* **Rugs / patios:** Quote-based

> **Important:** These are approximate ranges. The representative gives the exact price during the callback. Do not mention price unless the customer asks.

##### Critical rules section (always at the top of the prompt)

> **Never:** Read the phone number or email out loud. Invent availabilities. Give an exact price (only the range, and only if asked). Say "10:00" — always say "10 o'clock" or "10 in the morning". Forget to ask the customer's preferred booking time.
>
> **Always:** Mention the representative will follow up to qualify and give the exact price. Use the calendar functions (`isDateAvailable`, `confirm_booking`, etc.). Write all numbers in spelled-out form. Stay natural and efficient.

##### Step 1: Identity confirmation

> **Agent:** "Hello, am I speaking with `{first_name}`?"
>
> *\[Pause for confirmation]*

##### Step 2: Intent confirmation

> **Agent:** "Great. This is Aria from the PulsyAI Sofa Care team. I saw that you just filled out our form for a sofa cleaning quote. Do you have a couple of minutes so we can set up a call with one of our representatives?"
>
> *\[Pause]*
>
> *If yes:* "Excellent!" → proceed to Step 3.
>
> *If not now:* "No problem at all. When would be a good time for me to call you back?"
>
> *\[Note the requested time]* "Perfect, I'll call you back `{time}`. Talk soon!" → End call.

##### Step 3: Book the representative callback

> **Agent:** "Perfect! I'm going to set up a 5-minute call with one of our representatives. They can answer all your questions and give you an exact price for your situation. Do you have a specific date and time in mind for this call, or would you prefer the earliest available slot?"
>
> *\[Pause — wait for response]*

**Technical directives for the agent:**

* Never invent availabilities. Always use the calendar functions to fetch real slots.
* When mentioning times, always say "10 o'clock", "2 in the afternoon", "9 thirty in the morning" — never "10:00", "10 H 00", or "10am" as digits.

**Available functions:**

1. `isDateAvailable(date)` — Check whether a specific date has availability.
2. `getAvailabilityForRange(start_date, end_date)` — Fetch all available slots within a date range.
3. `fetchEarliestAvailability()` — Fetch the nearest available slot.
4. `confirm_booking(date, time, details)` — Confirm and persist the booking. **Required to finalize.**

**If the customer proposes a date:**

1. Call `isDateAvailable(date)`.
2. If available → call `getAvailabilityForRange(date, date)` to list the day's open slots → propose slots naturally → on acceptance, call `confirm_booking(date, time, details)`.
3. If not available → call `fetchEarliestAvailability()` → propose the nearest slot → on acceptance, call `confirm_booking(...)`. Otherwise, call `getAvailabilityForRange(start, end)` to propose alternatives.

**If the customer wants the earliest available slot:**

1. Call `fetchEarliestAvailability()` immediately.
2. Propose the slot. On acceptance, call `confirm_booking(...)`.

> **Agent (on confirmation):** "Excellent! I'm confirming that our representative will call you on `{day}` at `{time}`. You'll receive an email confirmation with all the details."

##### Pricing fallback (only if the customer asks)

This branch fires only if the customer explicitly asks for pricing during any step.

> **Customer:** "How much does it cost though?" / "Give me an idea of the price." / "What's the price range?"
>
> **Agent:** "Our sofa cleaning rates typically range from one hundred and twenty-five to three hundred and fifty dollars, travel included. That's really just a general range for a very high-quality service. Our representative will give you the exact price during the 5-minute call based on your specific situation."
>
> *\[Pause]*
>
> *Return to the booking flow if not yet booked, or confirm the appointment if already booked.*

##### Step 4: Light upsell

> **Agent:** "By the way, are there any other surfaces you'd like cleaned while we're at it?"
>
> *\[Pause]*
>
> *If no:* "No worries!" → proceed to closure.
>
> *If yes:* "Perfect! You'll be able to discuss it with the representative during your call. They can walk you through everything and give you a combined price." → proceed to closure.

##### Step 5: Closure

> **Agent:** "Perfect! To recap: our representative will call you on `{day}` at `{time}`. The call will be 5 minutes maximum. They'll qualify your exact needs, give you the precise price, and walk you through our service in detail. You'll also receive an email confirmation."
>
> **Agent:** "Thank you for trusting us, and talk to you very soon!"

##### Why this script works

The full AI call clocks in at 1–2 minutes — well under the 2-minute conversion sweet spot covered in [Principle 1 of Build a Script](/platform/build-your-agent/build-a-script#the-core-principle-shorter-scripts-convert-better). The script captures the booking intent without trying to qualify, quote, or close — those higher-effort tasks are delegated to the human representative on the scheduled callback.

The agent only quotes pricing if the customer explicitly asks, and only as a range — never an exact figure. This both respects the "never quote on AI" best practice and creates a natural reason for the customer to want the representative callback ("I want the exact price for my situation"). The upsell at Step 4 is intentionally light — the goal is awareness, not conversion, since the representative handles all conversion-critical conversations.

Adapt this template to any speed-to-lead vertical by swapping the company name, the agent name, the service vocabulary, the pricing knowledge base, and the calendar function set. The four-step structure stays identical.

### Pro tip: Warm transfer to closers

If your client has a dedicated closing team available during the times the campaign runs, replace the "book the representative callback" step with a **warm transfer** — the AI prequalifies the lead, then transfers the call directly to a live human closer instead of scheduling a callback for later.

The script change is minimal. Replace the booking step in the speed-to-lead script with this two-line exchange:

> **Agent:** "Would you like me to connect you right now with one of our specialists who can walk you through the details and give you the exact pricing for your situation?"
>
> *\[Pause for confirmation]*
>
> *On customer agreement (yes, sure, please, go ahead, etc.):* **Agent:** "Perfect, one moment please while I connect you."

In the agent's prompt, the corresponding directive that fires the transfer is: *"If the customer agrees to be connected to a specialist, transfer the call immediately."* This is the trigger-condition pattern that PulsyAI function calls require — the agent asks, the customer confirms, the directive fires the transfer to the configured destination phone number.

For the full configuration of transfers — destination numbers, trigger wording variants, fallback behaviour — see the dedicated [Transfers](/platform/transfers) page.

Then the call is transferred to the closing team's phone line (or queue), and the human takes over while the lead is still warm.

The conversion lift from warm transfer over scheduled callback is significant — for paid-ad speed-to-lead specifically, warm-transferred leads close at rates dramatically higher than leads who wait hours for a scheduled callback. Every minute of delay between the AI qualification and the human conversation is a minute of intent decay. Warm transfer eliminates that decay entirely.

This configuration only works if the client has live closers available during the campaign window — if the closers start at 9am and the campaign runs 24/7, the scheduled-callback flow remains the right default. For the principles behind why human closing outperforms AI closing, see [Principle 9: The AI prequalifies, the human closes](/platform/build-your-agent/build-a-script#principle-9-the-ai-prequalifies-the-human-closes).

### The retry stack — aggressive in the hot window, then taper

Most leads will not answer on the first call attempt. They might be still scrolling, on another call, or stepping away from the ad they just clicked. The right response is **aggressive in the first 15 minutes, then taper to SMS**.

PulsyAI recommends this exact Auto Call Back configuration for speed-to-lead campaigns:

* **Callback delay** — 5 minutes between voice attempts.
* **Max attempts** — 3 voice retries (so the agent attempts the call at 0 minutes, 5 minutes, 10 minutes, and 15 minutes after the form submission).
* **SMS fallback agent** — Enabled. Use the outbound agent itself as its own SMS follow-up (the SMS Fallback dropdown lets you select the current outbound agent — same phone number, same configuration).
* **Time windows** — Match to the lead's timezone, set to the widest reasonable window your client allows (often 9:00 – 21:00 for B2C consumer campaigns).

The reasoning: a lead who just filled out a paid-ad form is at peak intent **right now**. Every minute that passes drops the conversion probability. Three rapid attempts in 15 minutes maximizes the chance of catching them while they're still focused on the topic they just engaged with. After 15 minutes of no voice contact, voice calls become increasingly intrusive — the SMS fallback takes over with a less aggressive medium.

For the full Auto Call Back configuration walkthrough, see the dedicated [Auto Call Back](/platform/auto-call-back) page.

### The SMS fallback — re-engage without phone friction

When the 3 voice attempts are exhausted, the SMS fallback fires. The SMS agent picks up the lead's contact and sends a short, casual text — something the lead can respond to whenever they have a moment.

Because PulsyAI lets you use the outbound agent itself as its own SMS fallback, the configuration is one phone number, one script, two channels. The lead who didn't pick up the phone three times still gets one chance to engage by text before they're closed out — and a meaningful percentage of them do.

### Stale Conversation Recovery — extending the SMS retry sequence

For outbound speed-to-lead, the [Auto Call Back](/platform/auto-call-back) configuration above already includes the SMS fallback after voice retries are exhausted. Stale Conversation Recovery is optional for outbound — it extends the SMS retry sequence further if you want additional relaunch attempts beyond what Auto Call Back handles.

If you enable it, configure stale recovery with:

* **Trigger condition** — Activate when the lead hasn't responded to the Auto Call Back SMS fallback within a short window.
* **Relaunch delay** — 1 hour after the initial fallback SMS went unanswered.
* **Max relaunch attempts** — 1 or 2 attempts maximum. Beyond this, you risk irritating the lead and damaging the client's brand.

For full Stale Conversation Recovery setup, see the dedicated [Stale Conversations](/platform/integrations/stale-conversations) page. Note that for outbound agents specifically, the Call Back integration in the Integrations tab does NOT apply — outbound uses its dedicated Auto Call Back tab instead.

### The full speed-to-lead funnel

End-to-end, the speed-to-lead stack runs like this:

1. **0 min** — Lead submits form on paid ad → outbound agent triggered → first call placed
2. **5 min** — If no answer, first Auto Call Back retry
3. **10 min** — If no answer, second Auto Call Back retry
4. **15 min** — If no answer, third Auto Call Back retry
5. **15 min+** — Voice retries exhausted → SMS fallback agent sends a casual text
6. **1 hour later** — If no SMS response, Stale Conversation Recovery sends one final SMS
7. **Closed** — Lead is marked closed or handed back to the human team for manual follow-up

This stack converts substantially better than the standard "human calls back during business hours" pattern because it catches leads at three different windows: peak intent (under 15 min), warm intent (text-receptive in the first hour), and recovery (final SMS nudge before close).

When you pitch this configuration to your clients running paid ads, the conversion math is straightforward: even a 30% lift on existing ad spend pays for the PulsyAI subscription many times over. For high-volume ad campaigns the lift can be considerably higher.

## Next step

<CardGroup cols={2}>
  <Card title="Build an SMS AI Agent" icon="message-square" href="/platform/build-an-sms-ai-agent">
    The implementation guide for SMS agents — text-only nuances, conversation cadence, and stale recovery as a core feature.
  </Card>

  <Card title="Auto Call Back" icon="phone-arrow-up-right" href="/platform/auto-call-back">
    The full configuration guide for Auto Call Back — retry delays, max attempts, time windows, SMS fallback, and regulatory considerations.
  </Card>
</CardGroup>
