Monthly contract renewal radar from signed DocuSeal agreements

By General Input

Every month, find the signed agreements expiring in the next 90 days, post a Slack digest by urgency, and prepare renewal paperwork as a draft.

Integrations

  • DocuSeal
  • Slack
  • Google Sheets

Type

Agentic Task

Categories

  • Operations
  • Sales

On the first business day of each month at 8am, run a renewal radar over every agreement we have ever signed in DocuSeal. Schedule this on a cron for the 1st, 2nd and 3rd of the month at 8am and only continue the run if today is genuinely the first business day of the month, so the report still arrives promptly when the 1st falls on a weekend or a holiday.

Start by pulling our signed agreements with the DocuSeal List Submissions operation, filtered to completed submissions. Page through the full result set rather than stopping at the first page, because the register is only useful if it covers everything we have on file. If we keep contracts in a specific folder or use a specific agreement template, filter to those so quotes, NDAs and other non revenue documents do not pollute the report.

For each completed submission, read the signer's answers with the DocuSeal Get Submitter operation, which returns the submitted field values. This is where the contract term or end date lives, since it is a value the signer filled in rather than metadata on the submission itself. Look for a field capturing an end date, expiry date, renewal date or contract term, and be flexible about naming and date formatting across templates. If an agreement has no such field, fall back to the submission completion date plus a configurable default term length of 12 months, and mark that row as an estimated date everywhere it appears so nobody mistakes an inferred date for one the customer actually agreed to.

Work out which agreements expire within the next 90 days and sort them into 90, 60 and 30 day buckets, with the most urgent bucket first. Ignore anything that has already expired unless it lapsed within the last 30 days, in which case list it separately as recently lapsed, since those are usually still recoverable. For each agreement capture the counterparty, the contract value and who owns the relationship internally, reading all three from the submitted field values where they exist and leaving a clearly marked gap where they do not, rather than guessing.

Post the result to Slack with the Send a Message operation as a digest grouped by bucket. Lead with a one line summary of how many agreements are in scope and their combined value, then list each bucket with the counterparty, value, owner and exact expiry date per row. Keep it scannable, because this is a message people read on a Monday morning and act on, not a report they study.

Append the same rows to a Google Sheets renewal register using the Append Values operation, so we build a running record over time instead of a report that vanishes into Slack history. Include the run date, the counterparty, the value, the owner, the expiry date, the bucket and whether the expiry date was read from a field or estimated from the fallback.

For anything inside 30 days, prepare the renewal paperwork in advance using the DocuSeal Create Submission operation against the same template the original agreement used, carrying over the counterparty details. Set send_email to false. This matters: send_email defaults to true, so creating a submission emails the submitters unless it is explicitly set to false, and we do not want a renewal contract landing in a customer inbox without a human deciding to send it. The draft should sit untouched until someone approves it in the Slack thread, so call out clearly in the digest which drafts are waiting on approval and note that they have not been sent to anyone.

Before preparing a draft, check whether one already exists for that agreement so an agreement sitting inside the 30 day window across consecutive months does not accumulate duplicate drafts. If nothing is expiring in the next 90 days, still post a short all clear message so the team knows the check ran, because silence is ambiguous and we want to notice if this ever stops working.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageWin back LiveChat visitors whose chats went unansweredLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardChat quality review board for LiveChat support leadsLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seats