Agent setup guide
Contract & Vendor Renewal Watcher
Works out every contract's notice deadline from Notion and alerts its owner in Slack at 60, 30 and 7 days, once per window.
What it does
Works out every contract's notice deadline from Notion and alerts its owner in Slack at 60, 30 and 7 days, once per window.
- Every Monday, reads your Notion contracts database (up to 100 contracts).
- The notice deadline (end date minus notice days, or the end date when it doesn't auto-renew) comes from a Notion formula, and the days to it and the 60 / 30 / 7-day window are worked out in code in your workflow's time zone — contracts outside a window are skipped before the AI sees them.
- When a contract enters the 60, 30 or 7-day window (or its deadline passes), AI writes the owner a Slack DM with the deadline, the options to weigh and the questions to answer.
- Writes the next step and date into the contract's “Next action” property in Notion.
- Remembers each alert for a year, so every window alerts once — never every Monday.
- Posts a finance summary: deadlines in the next 90 days (found in code) with values and contracts missing data, plus the owners alerted this week.
- The summary's total value is added up in code before it's posted — never by the AI; a wrong AI total is corrected and flagged in the run.
- The list of owners alerted, contracts not alerted and failures is counted in code from what each step really did, so it never reports an alert that wasn't sent.
What it needs
- A paid plan (agents run live on paid plans).
- An AI provider key (Settings → AI Providers).
- Notion and Slack, connected in Settings → Integrations.
- A Notion contracts database with end dates, auto-renew, notice days, a “Notice deadline” formula and owner emails (plus a “Next action” text property).
What it doesn't do
- It drafts and organises alerts for a person to decide; it makes no legal decision and is not legal advice.
- It reads only the dates and fields you typed into Notion and doesn't read contract PDFs or clauses.
- It never sends cancellation or renewal notices to vendors and never decides to renew or cancel.
- Owners without a Slack account matching their email can't be DMed; they're listed in the finance summary.
Availability and plans
Available
Its workflow is built and tested, and every app it needs is live. You can get it and set it up now.
Included free on the Enterprise plan; on other paid plans it's a one-time purchase per workspace (the price is on the Agents page). The Agents page in the app always shows its current status.
Before you start
- A paid plan: agents run live, and the Free plan only runs Dry Runs.
- An AI provider key (OpenAI, Anthropic, Google and more) in Settings → AI Providers. AI usage is billed by your provider.
- These apps, connected in Settings → Integrations: Notion and Slack.
- Nothing to send: the agent runs on a schedule.
- About 15 minutes.
Set it up step by step
Get the agent first (buy it, or it's already yours when your plan includes it), then in Agents → My agents press “Set up this agent”. That creates the agent's workflow in your workspace (it counts towards your plan's workflow limit) and opens the canvas with a setup checklist above it. Each item links to the exact place to go and ticks itself off when it's done.
1. Connect your AI provider
The AI steps run on your own key (OpenAI, Anthropic, Google and more). Add one in Settings → AI Providers.
2. Connect Notion
Connect Notion and share your contracts database with the Fluxo Flow integration (Settings → Integrations → Notion).
3. Connect Slack
Connect the Slack workspace your contract owners and finance team use (Settings → Integrations → Slack).
4. Describe your contracts database
Add the “Notice deadline” formula property to your database (see the FAQ), then open “Write the owner's alert” and “Write the finance summary” and replace the placeholder with your property names, ended statuses and currency. The 60 / 30 / 7-day windows are set in “Check the notice deadlines”.
| Setting | What to enter | In step |
|---|---|---|
| Your contracts database (owner alerts) | Replace the placeholder with your database's property names, the statuses that mean ended or cancelled, your currency and any questions you always want asked before a renewal. It starts as “[DESCRIBE YOUR CONTRACTS DATABASE (THE PROPERTY NAMES FOR THE OTHER PARTY, END DATE, AUTO-RENEW, NOTICE DAYS, OWNER EMAIL, ANNUAL VALUE, STATUS), WHICH STATUSES MEAN ENDED OR CANCELLED, YOUR CURRENCY AND ANY QUESTIONS YOU ALWAYS WANT ASKED BEFORE A RENEWAL HERE]” until you replace it. | “Write the owner's alert” |
| Your contracts database (finance summary) | Paste the same description again, so the summary reads the database the same way. It starts as “[DESCRIBE YOUR CONTRACTS DATABASE (THE PROPERTY NAMES FOR THE OTHER PARTY, END DATE, AUTO-RENEW, NOTICE DAYS, OWNER EMAIL, ANNUAL VALUE, STATUS), WHICH STATUSES MEAN ENDED OR CANCELLED, YOUR CURRENCY AND ANY QUESTIONS YOU ALWAYS WANT ASKED BEFORE A RENEWAL HERE]” until you replace it. | “Write the finance summary” |
5. Pick the contracts database
Open “Read your contracts database” and “Update Next action in Notion” and pick your account and database.
| Setting | What to enter | In step |
|---|---|---|
| Notion account (read contracts) | The Notion workspace with your contracts database. Pick your connected Notion account. | “Read your contracts database” |
| Contracts database | The database with one page per contract (Name (title), Counterparty (text), End date (date), Auto-renew (checkbox), Notice days (number), Notice deadline (formula), Owner email (email), Annual value (number), Status (select), Next action (text)). Add a filter on the step to skip ended contracts if you have more than 100. | “Read your contracts database” |
| Notion account (update Next action) | The same Notion workspace, used to write each contract's “Next action”. Pick your connected Notion account. | “Update “Next action” in Notion” |
6. Pick Slack and the finance channel
Open “Find the owner in Slack”, “DM the owner” and “Post the summary to finance” and pick the account (and the finance channel).
| Setting | What to enter | In step |
|---|---|---|
| Slack account (find owners) | The Slack workspace your contract owners use. Pick your connected Slack account. | “Find the owner in Slack” |
| Slack account (DMs) | The same Slack workspace, used to DM each owner. Pick your connected Slack account. | “DM the owner” |
| Slack account (finance summary) | The same Slack workspace, used to post the summary. Pick your connected Slack account. | “Post the summary to finance” |
| Finance Slack channel | The channel the weekly renewals summary goes to, e.g. #finance. | “Post the summary to finance” |
7. Test it with Dry Run
Press Dry Run: the agent runs on sample data with no messages sent and nothing written to your apps.
8. Switch the trigger on
Open the trigger, set your time zone (deadline days are counted in it) and switch the schedule on. It runs every Monday at 8:00.
How it works
The agent is a normal workflow with 18 steps (2 AI steps). You can open, edit and monitor it like any other workflow.
- Every Monday at 8:00 — Runs on a schedule (cron 0 8 * * 1, UTC — change it in the trigger's settings). Runs every Monday morning. Set your time zone on the trigger.
- Read your contracts database — Notion: Query a database. Queries your Notion contracts database (up to 100 contracts): the other party, end date, auto-renew, notice days, owner, annual value and status.
- Check the notice deadlines — Step. In code, not AI: reads each contract's notice deadline (your “Notice deadline” formula property — without one, the end date) in your time zone and keeps only contracts in the 60-, 30- or 7-day window, or whose deadline has passed while the contract still runs. Change the windows here (the deadline rule's buckets).
- Each contract in a window — Repeats the steps below for each item (up to 100 per run). Checks every contract the date check kept (up to 100 per run).
- [For each item — “Each contract in a window”] Already alerted for this window? — Recalls what it remembered earlier (memory “contract-renewal-watcher”). Recalls the last alert sent for this contract (its window and notice deadline), so each window alerts only once.
- [For each item — “Each contract in a window”] Write the owner's alert — AI step (runs on your AI provider key). The deadline and its window were worked out in code. AI checks the contract's status and owner, skips windows already alerted, and writes the owner's alert with the options to weigh and the questions to ask.
- [For each item — “Each contract in a window”] New window? — Decision: picks the branch to follow. Only contracts entering a new 60 / 30 / 7-day window (or whose notice deadline just passed) alert their owner.
- [For each item — “Each contract in a window”] No alert this week — Kept in the run history. Branch: No alert. Already alerted for this window, ended or missing an owner email (listed in the finance summary).
- [For each item — “Each contract in a window”] Find the owner in Slack — Slack: Find user by email. Branch: New window. Looks up the contract owner's Slack account by their email address.
- [For each item — “Each contract in a window”] DM the owner — Slack: Post a message. Sends the owner a direct message: the deadline, the options to weigh and the questions to answer, with the Notion link.
- [For each item — “Each contract in a window”] Update “Next action” in Notion — Notion: Update page properties. Writes the next step and its date into the contract's “Next action” property.
- [For each item — “Each contract in a window”] Remember this alert — Remembers it for later runs (memory “contract-renewal-watcher”, kept 365 days). Remembers the window and notice deadline just alerted (for a year), so the same window isn't alerted again next Monday.
- Count this week's alerts — Step. In code, not AI: lists the owners really alerted this week (the DM ran), the contracts in a window that weren't alerted and why, and any that failed (e.g. owner not found in Slack).
- Find deadlines in the next 90 days — Step. In code, not AI: keeps the contracts whose notice deadline is in the next 90 days (and that are still running), soonest-first facts for the finance summary.
- Write the finance summary — AI step (runs on your AI provider key). AI lists every contract with a notice deadline in the next 90 days (found in code) with its value, auto-renew and owner. This week's alerts are counted in code and added below it.
- Check the math — Step. Recalculates the total value of the contracts due in the next 90 days in code — not by AI — writes it into the finance summary, and flags it when the AI's total was wrong.
- Post the summary to finance — Slack: Post a message. Posts the renewals summary to your finance channel, with this week's alerts as counted in code.
- Week done — Kept in the run history. The run history keeps every contract's check, the alerts and the summary.
Test it with Dry Run
Press Dry Run in the canvas. The agent runs on the sample data stored on its trigger (the “Sample data for Dry Run” box), so you can check every step's output before anything is live.
- Nothing is sent or written: app actions, emails and Slack posts are simulated, and AI steps don't call your AI provider.
- For-each loops repeat only the first 3 items.
- Memory steps don't read or write stored memory: a recall finds nothing, and a save only shows what it would store.
Go live
- Open the trigger, set your time zone (deadline days are counted in it) and switch the schedule on. It runs every Monday at 8:00.
- Scheduled runs start only once the schedule is activated, and can't repeat faster than your plan's minimum interval.
- The setup checklist adds a “paid plan” item before activation: live runs need a paid plan (the Free plan only runs Dry Runs).
- When every checklist item is done and the trigger is on, the checklist says “Live — this agent is running”. Follow its runs in the workflow's History tab and in Analytics → Agents.
Questions
What should the contracts database look like?
One page per contract with properties like Name (title), Counterparty (text), End date (date), Auto-renew (checkbox), Notice days (number), Notice deadline (formula), Owner email (email), Annual value (number), Status (select), Next action (text). Names can differ: describe them in the setup text. The “Next action” property must exist (text) for the agent to write to it. Share the database with Fluxo Flow (••• → Connections).
How is the notice deadline worked out?
In code, never by the AI. Add a formula property named “Notice deadline” to the database: if(prop("Auto-renew") and not empty(prop("Notice days")), dateSubtract(prop("End date"), prop("Notice days"), "days"), prop("End date")) — Notion then computes end date minus notice days (or the end date when it doesn't auto-renew), and “Check the notice deadlines” counts the days to it in your trigger's time zone. Without that property the end date is used as the decide-by date. To change the 60 / 30 / 7-day windows, open “Check the notice deadlines” and edit the buckets.
How often will an owner be alerted?
Once when the notice deadline is 60 days away, once at 30 and once at 7 — plus once if the deadline passes. The agent remembers each alert for a year, so a Monday run never repeats the same window. Change the end date or notice days and the new deadline is alerted afresh.
Does it read the contract itself?
No. It works only from the dates and fields in your database, doesn't open PDFs, isn't legal advice and never sends a cancellation or renewal notice.
Troubleshooting
- “No AI provider connected” or a rejected key: connect or fix the key in Settings → AI Providers, then press Test there.
- A checklist item stays unticked: the setting is still empty or still contains its placeholder text. Open the step from the checklist and fill it in.
- An app step fails with “Needs reconnect”: the account's access was revoked or expired. Reconnect it in Settings → Integrations.
- Slack says the app isn't in the channel: in Slack, type /invite @Fluxo Flow in that channel (always needed for private channels).
- It didn't run at the expected time: the schedule must be activated, and its time is in the trigger's timezone.
- A step failed: open the run in History and check that step in the Trace tab for the error and what it received.
Generated from the agent's own workflow, so it always matches what the agent does. Last updated .