Demos & Use Cases

Contract Triage with AI: Classify Incoming Contracts, Route Them, and Flag Risk

This contract triage bot reads an uploaded contract, determines its type, routes it to the right team, and flags its risk level, all from a short intake form and one AI step, no manual sorting required.

Contract Triage with AI: Classify Incoming Contracts, Route Them, and Flag Risk

Contract intake

The bot opens with a short form. It asks for the counterparty, the date the contract came in, and the email address of whoever is submitting it. Right after that comes a single dropdown: what does the person actually need, sign off before signing, help negotiating, filing for archiving, or something else entirely.

Intake fields and the request type dropdown configuration in the bot builder

A branch for the edge case

Only one of those four options needs more detail. Selecting other legal review opens a short free text field where the person describes what they actually need, so the reviewing team isn’t left guessing. Every other option skips straight past it and moves on to the upload step, where the contract itself goes in as a PDF or Word file.

Logical Condition branching into the free text field for other legal review, before the file upload step

AI contract analysis

Once the file is uploaded, a dedicated AI step reads the document together with the counterparty, the date, and whatever the person said they needed, and returns three things in one pass: the contract type, the assigned team, and a risk rating. It’s linked directly to the file upload node and runs the moment the file lands, with its own status message while it works.

AI Output node configuration for the triage analysis, linked to the file upload node

The system prompt behind it defines all three outputs, the contract type, the routing rules, and the risk thresholds, in plain language:

You are a professional Legal Operations and Contract Triage AI. Your task is to analyze the uploaded contract and extract key sorting data in structured JSON.

Specifically, evaluate:

  1. “contract_type”: Detect the exact contract type (e.g., NDA, SaaS Agreement, Service Agreement, Lease, Employment Contract, or Other).
  2. “assigned_team”: Determine the responsible department based on the company’s rules:
    • NDAs -> “Legal Core”
    • SaaS/Software agreements -> “IT Procurement”
    • Service / Consulting agreements -> “General Procurement”
    • Employment / Freelance contracts -> “HR Department”
    • All other contracts -> “Legal Core General”
  3. “risk_level”: Categorize the internal risk/priority level (“Low”, “Medium”, “High”) based on these guidelines:
    • If the user’s request is purely for archiving (“Nur zur Ablage / Archivierung”), risk_level should default to “Low” unless severe issues exist.
    • “High”: Contains unlimited liability, governing law outside the EU/Germany, term > 36 months, or severe non-compete clauses.
    • “Medium”: Liability capped between EUR 100,000 and EUR 1,000,000, term between 12 and 36 months, or automatic renewal periods.
    • “Low”: Liability capped below EUR 100,000, standard NDA terms, or term < 12 months.

Format your output as a single, valid JSON object with the following keys. Do not include any markdown wrappers (such as ```json) or conversational pleasantries: { “contract_type”: “[Extracted Contract Type]”, “assigned_team”: “[Assigned Team Name]”, “risk_level”: “[Low/Medium/High]” }

This is the node to edit if your organization needs a different routing table, different risk thresholds, or an additional contract type the list above doesn’t cover.

System prompt and dynamic prompt configuration for the contract triage analysis

Risk-based routing

The risk level the AI just returned drives a branch built into the bot. High risk attaches a red warning telling the reviewer this needs immediate attention from a senior colleague. Everything else attaches a green notice confirming the contract goes into the normal queue. This is also where you’d add a third tier, if your process ever needs one.

Logical Condition branching on risk level into the high risk and normal risk boilerplate notices

Summary, confirmation, and notification

All three results, along with the requester’s details, land in one summary panel. From there it’s a single confirmation click, its own step, separate from the summary. Once that’s clicked, a notification email fires automatically to whichever team was just assigned, and you can configure the content of that email too.

Send and Result node configuration and the automatic email notification node

User view

On the user’s side, the flow is a shorter version of the same process. Someone enters the counterparty, the date, and their own email.

Contract receipt and triage recording screen with counterparty, date, and requester email fields

They pick what they need, and if that’s other legal review, add a short description. Then they upload the contract, and a status message appears while the bot analyzes it.

Request type dropdown and file upload widget on the contract receipt and triage recording screen

A few seconds later the result appears: the contract type the AI detected, the team it’s been assigned to, and the risk level, with a red or green banner depending on the outcome. One click to confirm, and the assigned team is notified automatically, no forwarding required.

Triage results and allocation screen showing the contract triage summary with contract type, team, and risk level

More in this category