Contract management fails in the same two places at almost every company: nobody notices a non-standard clause until it becomes a problem, and nobody notices a renewal date until it has already passed. This workflow generates the right template for the contract type, has AI flag anything that deviates from your standard terms before it goes out, and tracks the full signature and renewal lifecycle without anyone maintaining a spreadsheet of dates.
Workflow diagram
flowchart TD
A[New Contract Webhook] --> B[Extract Details]
B --> C{Contract Type}
C -->|NDA| D[Generate NDA]
C -->|MSA| E[Generate MSA]
C -->|SOW| F[Generate SOW]
D --> G[Merge Templates]
E --> G
F --> G
G --> H[AI Risk-Clause Extraction]
H --> I{Non-Standard Clauses?}
I -->|Yes| J[Route To Legal] --> K[Wait Approval]
I -->|No| L[Merge Review]
K --> L
L --> M[Send For Signature]
M --> N[Wait Signature Status]
N --> O{Fully Executed?}
O -->|No| P[Wait 3 Days] --> Q[Send Reminder] --> N
Q --> R[Escalate If Repeated]
O -->|Yes| S[File Contract]
S --> T[Extract Key Dates]
T --> U[Wait Until 90 Days Before Expiry]
U --> V[Notify Account Owner]
V --> W[Log To Registry] Every branch shown here (IF/Switch outcomes) exists as a real conditional in the downloadable JSON, not a simplification for this diagram.
Why AI review happens before legal review, not instead of it
The AI Risk-Clause Extraction step is deliberately positioned as a triage layer, not a replacement for legal judgement. Most contracts generated from an approved template contain zero non-standard clauses, they are the same NDA or MSA language used dozens of times before. Routing every single one to a human reviewer wastes legal team time on documents that need no review at all.
The workflow only routes to Route To Legal Review when Parse Risk Flags finds something outside the template norm, an unusual liability cap, a missing termination clause, non-standard indemnification language. Legal sees exactly what was flagged and why, turning a full-document read into a two-minute check of a specific clause.
The reminder ladder before anything becomes a human problem
Contracts sitting unsigned in someone's inbox is one of the most common, least-noticed sources of deal delay. The Fully Executed? branch checks status after sending, and unsigned contracts get an automatic reminder every 3 days rather than waiting for someone to remember to follow up.
Escalate Unsigned Contract only fires after the reminder cycle has run its course, at that point it genuinely is a human relationship problem (the counterparty is stalling, has questions, or has gone quiet) rather than a process gap, and the person who needs to intervene has the full reminder history to reference.
Renewal tracking that runs itself
Extract Key Dates parses the effective date and term length from the executed document the moment it is filed, then Schedule Renewal Reminder holds until 90 days before expiry, real negotiation runway instead of a last-minute scramble that gives you no leverage to renegotiate terms.
Every contract enters the same registry regardless of type, so "which contracts expire in the next quarter" becomes a query, not an archaeology project through old email threads and a shared drive nobody has fully organised.
Node-by-node reference
| Node | Type | Role |
|---|---|---|
| Contract Type Router | Switch | Selects the correct template for NDA/MSA/SOW |
| AI Risk-Clause Extraction | HTTP Request | Flags non-standard clauses before signature, not after |
| Non-Standard Clauses Found? | IF | Only routes genuinely unusual contracts to legal |
| Wait For Signature Status | Wait (webhook resume) | Zero-cost pause until DocuSign reports status |
| Fully Executed? / Wait 3 Days loop | IF + Wait | Automatic reminder cascade before human escalation |
| Extract Key Dates | Code | Parses effective date and term length from the signed document |
| Schedule Renewal Reminder | Wait (specific time) | Fires 90 days before expiry, not at the deadline |
26 total nodes in the downloadable file, including sticky-note documentation embedded directly on the canvas.
Key logic, in code
Renewal date calculation (Extract Key Dates node)
const effectiveDate = new Date($json.effectiveDate);
const termMonths = $json.termLengthMonths;
const expiryDate = new Date(effectiveDate);
expiryDate.setMonth(expiryDate.getMonth() + termMonths);
const reminderDate = new Date(expiryDate);
reminderDate.setDate(reminderDate.getDate() - 90);
return [{
json: {
...$json,
expiryDate: expiryDate.toISOString(),
renewalReminderDate: reminderDate.toISOString(),
}
}]; Before / after
| Metric | Before | After this workflow |
|---|---|---|
| Contracts reviewed by legal | 100%, full document each time | Only those with flagged non-standard clauses |
| Unsigned contracts followed up | Ad hoc, whoever remembers | Automatic 3-day reminder cadence |
| Renewal negotiation runway | Often discovered at or after expiry | 90 days, every time |
| Contract registry accuracy | Spreadsheet, manually updated | Populated automatically at execution |
Prerequisites
- n8n v1.40+ with webhook-resume Wait and specific-time Wait support
- PandaDoc or equivalent template-generation API
- DocuSign eSignature API access
- Anthropic API key for risk-clause extraction
- Google Drive OAuth2, Airtable PAT, Slack Bot Token
Common pitfalls
AI risk-clause flags need a human-reviewed baseline
Tune the extraction prompt against your actual standard templates first, otherwise it flags normal boilerplate as risky and legal starts ignoring the alerts.
Reminder cascades need a hard stop
Without Escalate Unsigned Contract as a defined exit, a counterparty who never responds keeps generating reminders indefinitely instead of becoming a visible problem.
Renewal dates depend on clean term-length data
If Extract Key Dates cannot confidently parse the term length, route to manual entry rather than silently defaulting, a wrong renewal date is worse than a missing one.
Want this deployed, configured and monitored?
The template is free. Wiring in your real credentials, tuning the logic to your business, and keeping it running when an upstream API changes is what we do.
Get my free automation plan →Frequently asked questions
Can this handle contract types beyond NDA/MSA/SOW?
Yes, Contract Type Router is a Switch node, add a case and a template-generation branch for any additional contract type you use.
What happens to contracts that get amended after signature?
Route amendments through the same workflow as a new request referencing the original contract ID, so the registry keeps the full version history linked.
Does the AI review replace outside counsel for complex agreements?
No, it is a triage layer for standard contract types generated from your own templates. Complex, heavily negotiated agreements should go to legal review regardless of what the AI flags.