August 8, 2026 · 6 min read

Build a sales follow-up agent with authenticated email

Most sales agents can generate a draft. The harder problem is maintaining a real conversation: receiving a reply, looking up the right context, deciding what to do next, and sending from an identity the recipient can recognize.

This walkthrough shows a safe sales follow-up workflow with e2a. Your CRM remains the source of truth for lead and account data; e2a gives the agent an inbox, threaded replies, and an approval boundary for outbound mail.

See the complete sales agent use case for the workflow overview.

The workflow

  1. A lead replies to a message or emails the sales agent directly.
  2. e2a delivers the inbound event with authentication evidence.
  3. The agent looks up the lead and account context in the CRM.
  4. It qualifies the reply and drafts a relevant next step.
  5. The agent replies in-thread, with approval required for sensitive outreach.

Listen for a lead reply

Use the TypeScript SDK, a webhook, WebSocket, REST polling, or the hosted MCP server. The important part is to bind e2a's conversation identifier to the sales workflow's own state:

for await (const event of client.listen("[email protected]")) {
  if (event.type !== "email.received") continue;

  const message = event.data;
  const lead = await crm.lookupByEmail(message.header_from);
  const nextStep = await salesAgent.run({
    lead,
    message: message.text,
    conversationId: message.conversation_id,
  });

The agent should treat authentication evidence as one input to its policy, not as proof that the message content is safe or that a particular individual authored it.

Reply in the same conversation

Once the agent has selected a next step, reply to the inbound message rather than starting an unrelated message:

  await client.messages.reply(
    message.delivered_to,
    message.message_id,
    { text: nextStep.reply },
  );
}

This keeps the lead's replies, the agent's context, and the application's session correlation together. The recipient experiences a normal email conversation; the application receives structured events.

Add a human approval boundary

Start with approval enabled for the outbound paths that deserve review:

e2a's per-agent human-in-the-loop queue can hold a send before dispatch. A reviewer can approve, edit, or reject from the dashboard, API, SDK, CLI, MCP tools, or a secure link.

Keep the agent useful without making it reckless

The best sales agents do not need unrestricted autonomy. Give the agent narrow tools and explicit policies:

For scheduled follow-ups, e2a supports scheduled sending in the explicitly beta surface. You can also schedule in your own job system and call e2a only when the message is ready.

What to build next

e2a handles the email boundary. Your CRM, product data, and sales policy remain yours.