Never Drop a Deal Because You Forgot to Follow Up

AI drafts follow-up emails that reference your actual conversations. Reps review and approve — every prospect gets timely, relevant outreach.


Why this matters

Sales reps manage dozens of active deals simultaneously, and follow-ups consistently fall through the cracks. When they do follow up, it's often a generic 'just checking in' email that doesn't reference the specific conversation points that mattered to the prospect. This lack of personalization and consistency costs revenue on deals that were winnable.


How MultiMail solves this

MultiMail's AI agent monitors your conversation threads and detects when a follow-up is needed based on time elapsed since last contact. It drafts personalized follow-ups that reference specific discussion points from the thread history. With gated_send oversight, your reps review and refine each message before it reaches the prospect.

1

Track Active Conversations

Your AI agent monitors sales mailbox threads using get_thread and check_inbox. It tracks which prospects haven't responded within your follow-up window (e.g., 3 days after a demo).

2

Analyze Conversation Context

The agent reads the full thread history to identify specific topics discussed, questions asked, objections raised, and commitments made. This context drives personalization.

3

Draft Contextual Follow-Up

Using the conversation context, the AI drafts a follow-up that references specific points — not generic filler. Each draft includes a clear next step or call to action.

4

Rep Reviews and Sends

The drafted follow-up enters the approval queue under gated_send. Your rep can edit the tone, add details, or approve as-is. Approved emails are sent immediately via reply_email.


Implementation

Detect Stale Conversations
python
import requests
from datetime import datetime, timedelta

API = "https://api.multimail.dev/v1"
HEADERS = {"Authorization": "Bearer mm_live_xxx"}

"cm"># Check for conversations needing follow-up
inbox = requests.get(
    f"{API}/mailboxes/sales-mailbox-id/inbox",
    headers=HEADERS,
    params={"status": "read", "limit": 50}
).json()

stale_threshold = datetime.utcnow() - timedelta(days=3)

for msg in inbox["emails"]:
    thread = requests.get(
        f"{API}/threads/{msg[&"cm">#039;thread_id']}", headers=HEADERS
    ).json()

    last_message = thread["messages"][-1]
    # Only follow up if we sent the last message and got no reply
    if (last_message["direction"] == "outbound" and
        parse_date(last_message["date"]) < stale_threshold):
        draft_follow_up(thread)

Identify prospects who haven't responded within the follow-up window.

Draft a Contextual Follow-Up
python
import requests

API = "https://api.multimail.dev/v1"
HEADERS = {"Authorization": "Bearer mm_live_xxx"}

def draft_follow_up(thread: dict):
    "cm"># Extract key discussion points from thread
    context = extract_conversation_context(thread["messages"])

    "cm"># Generate personalized follow-up
    follow_up = generate_follow_up(
        prospect_name=thread["participants"][0]["name"],
        topics_discussed=context["topics"],
        questions_asked=context["open_questions"],
        days_since_last=context["days_elapsed"]
    )

    "cm"># Send via MultiMail (queued for rep approval)
    response = requests.post(
        f"{API}/reply",
        headers=HEADERS,
        json={
            "in_reply_to": thread["messages"][-1]["id"],
            "text_body": follow_up,
            "html_body": f"<p>{follow_up}</p>"
        }
    )
    print(f"Follow-up draft queued: {response.json()[&"cm">#039;id']}")

Generate a personalized follow-up email referencing specific conversation points.

MCP Tool Integration
typescript
"cm">// Using MultiMail MCP tools for sales follow-ups

"cm">// 1. Check sales inbox for stale threads
const inbox = await mcp.check_inbox({
  mailbox_id: "sales-mailbox-id",
  status: "read",
  limit: 50
});

for (const msg of inbox.emails) {
  "cm">// 2. Get full thread history
  const thread = await mcp.get_thread({
    thread_id: msg.thread_id
  });

  const lastMsg = thread.messages[thread.messages.length - 1];
  const daysSince = daysBetween(lastMsg.date, new Date());

  "cm">// 3. Draft follow-up if stale and we sent last
  if (lastMsg.direction === "outbound" && daysSince >= 3) {
    const context = extractContext(thread.messages);

    "cm">// 4. Reply (goes to approval queue under gated_send)
    await mcp.reply_email({
      email_id: lastMsg.id,
      text_body: generateFollowUp(context)
    });

    await mcp.tag_email({
      email_id: lastMsg.id,
      tags: ["follow-up-sent", `attempt-${context.followUpCount + 1}`]
    });
  }
}

Use MCP tools to manage sales follow-up sequences in an AI agent.


What you get

Every Deal Gets Follow-Up

No more prospects falling through the cracks. The AI monitors every active conversation and drafts follow-ups on schedule, regardless of rep workload.

Contextual, Not Generic

Follow-ups reference specific topics from the actual conversation — the pricing question from Tuesday, the integration concern from the demo. This shows prospects you were paying attention.

Rep Control Over Messaging

Gated send oversight means reps approve every outgoing message. They can refine tone, add personal touches, or adjust the ask — the AI handles the first draft, not the final word.

Consistent Follow-Up Cadence

Define your follow-up schedule once and the AI enforces it consistently across every deal. No more guessing when the last touchpoint was.


Recommended oversight mode

Recommended
gated_send
Sales emails directly impact revenue and represent your brand to prospects. Gated send lets AI handle the time-consuming drafting work while reps maintain full control over what reaches the prospect. This prevents tone-deaf or poorly-timed messages from damaging deal relationships.

Common questions

How does the AI know what to reference in the follow-up?
The AI reads the full thread history using MultiMail's get_thread endpoint. It extracts discussion topics, open questions, and commitments from prior messages. Your AI model uses this context to generate follow-ups that feel like a natural continuation of the conversation.
Can I set different follow-up cadences for different deal stages?
Yes. Your AI agent can apply different follow-up rules based on tags, deal stage, or conversation signals. For example, post-demo follow-ups might trigger after 2 days while post-proposal follow-ups wait 5 days. Tag emails with deal stage metadata to drive the logic.
What if the prospect responds before the follow-up is sent?
Your agent checks for new inbound messages before sending. If the prospect has replied, the follow-up is cancelled automatically. The agent also clears any pending follow-up drafts from the approval queue to keep things clean.
Can I limit the number of follow-ups per prospect?
Absolutely. Configure a maximum follow-up count (e.g., 3 attempts) after which the agent stops and tags the thread as 'no response - sequence complete'. This prevents aggressive outreach that could damage your brand.

Explore more use cases

The only agent email with a verifiable sender

Email infrastructure built for AI agents. Verifiable identity, graduated oversight, and a 38-tool MCP server. Formally verified in Lean 4.