Custom Proposals in Minutes, Not Hours

AI generates tailored proposals from prospect requirements. Your team verifies every detail before delivery — fast turnaround without errors.


Why this matters

Creating custom proposals takes hours per prospect, delaying your sales cycle and giving competitors time to close the deal first. When reps rush proposals to save time, errors in pricing, terms, or scope can lose deals or create contractual problems. The tradeoff between speed and accuracy shouldn't exist.


How MultiMail solves this

MultiMail's AI agent gathers prospect requirements from conversation history, generates customized proposals with relevant pricing and case studies, and drafts a professional cover email. With gated_all oversight, every element of the proposal is reviewed by your team before delivery — catching pricing errors, wrong attachments, or mismatched terms before they reach the prospect.

1

Gather Requirements from Conversations

Your AI agent analyzes the conversation thread using get_thread to extract prospect requirements, use case details, team size, and specific feature needs discussed during the sales process.

2

Generate Custom Proposal

Using the extracted requirements, the agent selects the appropriate pricing tier, relevant case studies, and feature highlights. It generates a complete proposal document tailored to the prospect.

3

Draft Cover Email

The agent composes a professional cover email that summarizes the proposal highlights, references specific conversation points, and includes clear next steps for the prospect.

4

Full Review Before Delivery

Under gated_all oversight, the entire package — cover email, proposal document, and attachments — enters the approval queue. Your sales or deal desk team verifies pricing, terms, and accuracy before approving delivery.


Implementation

Extract Requirements from Thread
python
import requests

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

def extract_requirements(thread_id: str) -> dict:
    thread = requests.get(
        f"{API}/threads/{thread_id}", headers=HEADERS
    ).json()

    "cm"># Extract requirements from conversation
    requirements = analyze_conversation(thread["messages"])
    "cm"># Returns: {team_size, features_needed, use_case, budget_signals}

    "cm"># Look up contact for company context
    contacts = requests.get(
        f"{API}/contacts/search",
        headers=HEADERS,
        params={"email": thread["participants"][0]["email"]}
    ).json()

    requirements["company"] = contacts["contacts"][0]
    return requirements

Analyze conversation history to gather prospect requirements for proposal generation.

Generate and Send Proposal
python
import requests

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

def send_proposal(requirements: dict, thread_id: str):
    "cm"># Generate proposal document
    proposal = generate_proposal_doc(requirements)
    cover_email = draft_cover_email(requirements, proposal)

    "cm"># Send with attachment (queued for full review)
    response = requests.post(
        f"{API}/send",
        headers=HEADERS,
        json={
            "from": "[email protected]",
            "to": requirements["company"]["email"],
            "subject": f"Your customized proposal - {proposal[&"cm">#039;plan']} plan",
            "text_body": cover_email,
            "html_body": format_proposal_html(cover_email, proposal),
            "thread_id": thread_id
        }
    )
    print(f"Proposal queued for review: {response.json()[&"cm">#039;id']}")

Create a custom proposal and send it with a professional cover email for review.

MCP Tool Integration
typescript
"cm">// Using MultiMail MCP tools for proposal delivery

"cm">// 1. Get the full sales conversation
const thread = await mcp.get_thread({
  thread_id: "sales-thread-id"
});

"cm">// 2. Look up contact details
const contact = await mcp.search_contacts({
  query: thread.participants[0].email
});

"cm">// 3. Extract requirements and generate proposal
const requirements = extractRequirements(thread.messages);
const proposal = generateProposal(requirements, contact);

"cm">// 4. Send proposal (goes to full review under gated_all)
await mcp.send_email({
  to: contact.email,
  subject: `Your customized proposal - ${proposal.plan} plan`,
  text_body: draftCoverEmail(requirements, proposal)
});

"cm">// 5. Tag the thread
await mcp.tag_email({
  email_id: thread.messages[0].id,
  tags: ["proposal-sent", proposal.plan]
});

Use MCP tools to extract context and deliver proposals from an AI agent.


What you get

Proposals in Minutes, Not Hours

AI generates customized proposals from conversation context in minutes. Your team only needs to verify the output, not build from scratch.

Zero Pricing Errors

Gated_all oversight means every proposal is reviewed for pricing accuracy, correct terms, and appropriate scope before it reaches the prospect. No embarrassing corrections needed.

Conversation-Aware Content

Proposals reference specific needs and questions from the sales conversation, showing the prospect you understand their requirements rather than sending a generic template.

Faster Sales Cycles

Reducing proposal turnaround from days to hours keeps momentum in the deal. Prospects get your proposal while interest is still high.


Recommended oversight mode

Recommended
gated_all
Proposals contain pricing, contractual terms, and business commitments. A pricing error or wrong attachment can lose a deal or create legal exposure. Gated_all ensures every element is reviewed — cover email, proposal content, and attachments — before delivery to the prospect.

Common questions

Can the AI include different pricing for different prospects?
Yes. Your AI agent can apply custom pricing rules based on deal size, prospect segment, or negotiation signals from the conversation. The pricing is generated programmatically and verified by your team during the gated_all review before delivery.
How are proposal documents attached?
Your AI agent generates the proposal as a PDF or document file, then includes it as an attachment via the MultiMail API. The attachment is visible during the gated_all review so your team can verify the document content before approving delivery.
What if the prospect has questions about the proposal?
Follow-up emails land in the same thread, which your AI agent can monitor. The agent can draft responses to common proposal questions (timeline, scope, terms) for rep review, keeping the conversation moving without delay.
Can I track whether the prospect opened the proposal?
MultiMail logs delivery status for every email sent. You can track whether the proposal email was delivered and use engagement signals to time your follow-up. Combine this with the sales follow-up use case for an automated cadence.

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.