Monthly contract renewal radar from signed DocuSeal agreements
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.
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.
What does this prompt do?
- Reviews every completed agreement in your DocuSeal account and works out when each one expires, using the end date or contract term the signer filled in.
- Groups everything expiring in the next three months into 90, 60 and 30 day buckets, then posts a Slack digest with the counterparty, the contract value and who owns the relationship.
- Appends the same rows to a Google Sheets renewal register, so you build a running record of every renewal cycle instead of a one off snapshot.
- Prepares the renewal paperwork for anything inside 30 days and holds it as a draft, so nothing reaches a customer until a person approves it in Slack.
What do I need to use this?
- A DocuSeal account containing your signed agreements, plus the template you normally use for renewals.
- A Slack workspace and a channel where the renewal digest should be posted.
- A Google Sheets spreadsheet to act as the renewal register.
- Ideally an end date or contract term field on your agreement template. If your agreements do not capture one, the workflow falls back to the signing date plus a standard term length you choose.
How can I customize it?
- Change the timing. It runs on the first business day of each month at 8am, but weekly or quarterly works just as well if your contract book moves faster or slower.
- Adjust the horizon and the buckets. If your renewal conversations take longer to land, widen the window from 90 days to 180 and add a 120 day tier.
- Set the fallback term length used when an agreement has no end date on it, for example 12 or 24 months, and choose whether the draft renewal step runs at all.
FAQs
What if our agreements do not have an end date field on them?
Will this email our customers automatically?
Will it create a duplicate renewal draft every month?
Can I run it more often than monthly?
What happens if nothing is expiring that month?
Related templates
When your flight moves, your calendar times get corrected automatically and you get a Slack note naming the meetings you're about to miss.
Every 15 minutes, forwarded phishing reports get traced back to the server that really sent them, with a verdict in Slack and the worst senders reported.
Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.
Every weekday at 7am, sign in to the tender portals you track, filter new notices against your bid criteria, and open a deal for the ones worth chasing.
Every weekday at 4pm, spot the threads that went quiet, stage a ready-to-send nudge in your mailbox, and get a ranked Slack recap.
Every Monday, rank the week's matches by expected demand, put the big ones on your venue calendar, and post a rota-ready summary to Slack.
Stop discovering renewals after they have already lapsed.
Put every signed agreement on a monthly radar and walk into each renewal with the paperwork already prepared and waiting for approval.