AI tracks pending NDA signatures and sends professional follow-ups. Legal reviews the messaging while the AI handles the cadence.
Deals stall waiting for NDAs to be signed. The legal team sends the NDA, the counterparty intends to sign but gets busy, and weeks pass without follow-up because nobody owns the reminder process. Meanwhile, business teams may start sharing confidential information prematurely, creating legal risk. Manual follow-up tracking in spreadsheets is unreliable and inconsistent.
MultiMail's AI agent tracks pending NDA signatures and sends professional follow-up reminders at configurable intervals. Each follow-up includes the original NDA document, signing instructions, and an appropriate escalation in urgency. Gated_send oversight ensures legal reviews the messaging before it reaches the counterparty — important because NDA-related communications can have legal implications.
Your AI agent monitors your contract management or e-signature platform for NDAs that have been sent but remain unsigned past a configurable threshold.
The agent calculates how long the NDA has been pending and selects the appropriate follow-up tier: gentle reminder (7 days), firm follow-up (14 days), or urgent notice (21+ days).
The AI composes a professional follow-up email that reattaches the NDA, provides signing instructions, and adjusts tone based on urgency. It references the original send date for context.
Under gated_send, the follow-up enters the review queue. Legal verifies the messaging, confirms the correct NDA version is attached, and approves delivery.
import requests
from datetime import datetime
API = "https://api.multimail.dev/v1"
HEADERS = {"Authorization": "Bearer mm_live_xxx"}
FOLLOW_UP_DAYS = [7, 14, 21]
def check_pending_ndas(ndas: list):
today = datetime.utcnow().date()
for nda in ndas:
if nda["status"] == "signed":
continue
days_pending = (today - nda["sent_date"]).days
if days_pending in FOLLOW_UP_DAYS:
tone = select_nda_tone(days_pending)
body = draft_nda_follow_up(
nda, tone, days_pending
)
requests.post(
f"{API}/send",
headers=HEADERS,
json={
"from": "[email protected]",
"to": nda["counterparty_email"],
"subject": f"Reminder: NDA awaiting signature (sent {nda[&"cm">#039;sent_date']})",
"text_body": body,
"html_body": build_nda_html(nda, tone)
}
)
def select_nda_tone(days: int) -> str:
if days <= 7: return "gentle"
if days <= 14: return "firm"
return "urgent"Identify unsigned NDAs and send appropriate follow-up emails.
def draft_nda_follow_up(nda: dict, tone: str, days: int) -> str:
templates = {
"gentle": (
f"Hi {nda[&"cm">#039;counterparty_contact']},\n\n"
f"I wanted to follow up on the mutual NDA between "
f"{nda[&"cm">#039;company']} and {nda['counterparty']} sent on "
f"{nda[&"cm">#039;sent_date']}. We'd love to move forward with "
f"our discussions.\n\n"
f"The NDA is available for signature here: {nda[&"cm">#039;sign_url']}\n\n"
f"Please let me know if you have any questions about "
f"the terms."
),
"firm": (
f"Hi {nda[&"cm">#039;counterparty_contact']},\n\n"
f"The NDA between {nda[&"cm">#039;company']} and {nda['counterparty']} "
f"has been pending for {days} days. To keep our discussions "
f"on track, could you please review and sign at your "
f"earliest convenience?\n\n"
f"Sign here: {nda[&"cm">#039;sign_url']}\n\n"
f"If there are concerns about any terms, I&"cm">#039;m happy to "
f"discuss."
),
"urgent": (
f"Dear {nda[&"cm">#039;counterparty_contact']},\n\n"
f"The NDA sent on {nda[&"cm">#039;sent_date']} ({days} days ago) "
f"remains unsigned. Our teams are eager to begin "
f"substantive discussions, which require a signed NDA "
f"per our information security policy.\n\n"
f"Sign here: {nda[&"cm">#039;sign_url']}\n\n"
f"Could you confirm whether there are any outstanding "
f"concerns we can address?"
)
}
return templates.get(tone, templates["gentle"])Generate follow-up content that escalates professionally based on time elapsed.
"cm">// Using MultiMail MCP tools for NDA follow-ups
async function followUpPendingNDAs(ndas: PendingNDA[]) {
const today = new Date();
const followUpDays = [7, 14, 21];
for (const nda of ndas) {
if (nda.status === "signed") continue;
const daysPending = daysBetween(nda.sentDate, today);
if (!followUpDays.includes(daysPending)) continue;
const tone = daysPending <= 7 ? "gentle" :
daysPending <= 14 ? "firm" : "urgent";
"cm">// Send follow-up (queued for legal review)
await mcp.send_email({
to: nda.counterpartyEmail,
subject: `Reminder: NDA awaiting signature (sent ${nda.sentDate})`,
text_body: draftNDAFollowUp(nda, tone, daysPending)
});
"cm">// Track follow-up
await mcp.add_contact({
email: nda.counterpartyEmail,
metadata: {
nda_follow_up_count: (nda.followUpCount || 0) + 1,
last_nda_follow_up: today.toISOString()
}
});
}
}Track and follow up on pending NDAs using MultiMail MCP tools.
Automated follow-ups reduce average NDA signing time by reminding counterparties on schedule. Deals move forward faster when the NDA isn't blocking.
Follow-ups escalate naturally from gentle reminder to firm request. The tone progression is pre-approved and consistent, maintaining professionalism throughout.
Gated send ensures legal reviews every follow-up before it reaches the counterparty. NDA-related communications can have legal implications — the AI drafts, legal approves.
By tracking unsigned NDAs, your organization can enforce the policy of not sharing confidential information until the NDA is executed. The tracking visibility alone reduces risk.
Email infrastructure built for AI agents. Verifiable identity, graduated oversight, and a 38-tool MCP server. Formally verified in Lean 4.