5
Steps to build
<30'
Build time
€0
Extra cost on M365

The Problem Is Not Missing Contracts. It Is Missing Context.

Most procurement teams have all their contracts somewhere. SharePoint, a shared drive, maybe a dedicated folder someone set up three years ago and hasn't been touched since. The contracts are there. The problem is that nobody is reading them systematically — and the information buried in them (renewal windows, auto-renewal clauses, price escalation triggers, liability caps) only matters on specific dates, most of which nobody has written down anywhere.

The pattern is familiar: a supplier invoice arrives in March with a 4% price increase. Someone pulls up the contract and finds a CPI escalation clause that technically allows it. The clause was in the original document, signed two years ago. Nobody flagged it at the time because reading every contract closely on the day it lands is not how teams actually work. The contract was filed and forgotten.

This flow does not replace contract management software. It does not build a full contract register or send you reminders 90 days before expiry based on a curated database. What it does is much simpler: every time a new contract lands in your SharePoint folder, it reads the file, extracts the key dates and commercial clauses, and posts a clean summary to your Teams channel within two minutes. No chasing. No manual reading. No missed context.

What You Need Before You Start

This is genuinely a short build. Before you open Power Automate, sort out two things:

Licence check
AI Builder is included in Power Automate Premium plans, but also ships with Microsoft 365 Copilot licences and select Business Premium bundles. Check your admin centre under AI Builder credits before assuming you need to purchase anything. If you have Copilot licences in your tenant, you almost certainly have AI Builder capacity already.

The 5-Step Flow

Step 1 — Trigger: new file in the SharePoint contracts folder

In Power Automate, create a new automated cloud flow. Set the trigger to "When a file is created (properties only)" from the SharePoint connector. Point it at the site and folder you prepared. This trigger fires every time a new document is uploaded — Word, PDF, or any other format your contracts arrive in.

Step 2 — Get file content

Add the "Get file content" action from the SharePoint connector. Pass in the file identifier from the trigger output. This retrieves the full binary content of the document — no separate text conversion step needed. AI Builder accepts the file directly in this format, which keeps the flow clean and avoids encoding issues you can run into if you try to convert to text first.

Step 3 — Set today's date as a variable

Add an "Initialize variable" action. Name it TodayDate, type String, and set the value to:

formatDateTime(utcNow(), 'dd.MM.yyyy')

This step exists for one reason: AI models handle relative date expressions inconsistently. If a contract says "renewal within 90 days of expiry" and the model does not know today's date, you can get a hallucinated year or a vague "coming soon" interpretation. Injecting today's date explicitly into the prompt context fixes this. It takes 20 seconds to add and prevents the most common source of incorrect output from contract parsing.

Step 4 — Run a custom prompt with the contract file

Add the "Create text with GPT using a prompt" action from AI Builder (you may see it listed as "Create text with a prompt" depending on your environment). Pass in the file content from step 2 and the TodayDate variable from step 3.

For the prompt itself, write the basic instructions — what fields you want extracted and in what format. A starting point:

"You are a procurement assistant. Today's date is [TodayDate]. Read the attached contract and extract: supplier name, contract start date, contract end date or renewal date, notice period for termination, price adjustment clause (if any — include the exact mechanism), and contract value if stated. Format the output as a Markdown table with two columns: Field and Value. If a field is not present in the document, write 'Not specified'."

Let Copilot write the prompt for you
Before writing the prompt yourself, paste your basic instructions into Microsoft Copilot Chat and ask it to rewrite them as a structured extraction prompt for a contract document. Copilot is genuinely good at this — it will tighten the phrasing, add output constraints you may have forgotten, and format it in a way that produces more consistent results from AI Builder. The prompt you get back will be better than what most people write from scratch.

Step 5 — Post the summary to Teams

Add the "Post message in a chat or channel" action from the Microsoft Teams connector. Set the target to your contracts channel. For the message body, use the output text from the AI Builder step — it already comes back as Markdown, which Teams renders natively. Add a header line before the table so the message is immediately readable in the channel feed:

"📄 New contract uploaded: [Trigger file name] — here is the summary:" followed by the AI Builder output on the next line.

The result is a clean two-column Markdown table in the Teams channel within about 30 seconds of the file being uploaded. Supplier, dates, price clause, value — everything that matters, visible to whoever is in the channel, without anyone having to open the PDF.

Teams vs email formatting
Teams messages use Markdown — pipe-separated tables (| Field | Value |), bold with **asterisks**, line breaks with a blank line. If you want to route the output to Outlook instead, switch to the Office 365 Outlook "Send an email" action and wrap the AI output in basic HTML tags (<table>, <tr>, <td>). The AI Builder step is identical either way — only the delivery action changes.

What This Actually Replaces

The immediate win is not efficiency — it is awareness. Before this flow, a contract landed in SharePoint, someone maybe skimmed the signature page, and the rest sat unread until a problem surfaced. Now, within 30 seconds of upload, the channel has a structured summary that anyone can scan in 20 seconds. Price escalation clauses get noticed. Renewal windows get noted. The person who was out the week the contract was uploaded does not miss it because it is sitting in the channel history.

The contract was always there. What was missing was the 30-second summary that tells you whether you need to read it now or in six months.

Where You Can Take This Next

This flow is deliberately simple — it is a proof of concept that takes under 30 minutes to build and immediately produces visible value. Once it has been running for a month without issues, the natural next steps are straightforward: write the AI output to a SharePoint list instead of (or in addition to) posting to Teams, and you have a contract register that builds itself. From there, a second scheduled flow can query that list daily for contracts expiring within 90 days and send a digest to the responsible owner. None of that requires rethinking the architecture — it is additions to what you have already built.

If your team manages a significant contract volume, a Dataverse table gives you more querying flexibility than a SharePoint list — but that is a later problem. Start with the 5-step version. Run it on real contracts for two weeks. The gaps it exposes will tell you exactly what to build next.

For a similar flow applied to a different operational problem — company car booking approvals — see Car Booking Automation. For the broader question of where contract monitoring fits in a procurement AI strategy, Where to Start With AI in Procurement is a useful starting point.