Operations & Compliance package

Contract renewal reminders

A daily check of your contract register: owners are reminded 60, 30 and 7 days before each notice deadline and asked to renew, renegotiate or terminate.

ScheduledIntermediate~15 min setupv1.0.0

About this package

What it does

Contract renewal reminders keeps notice deadlines from slipping past. Every morning it reads the active rows of the Contracts data table and works out, for each one, the date by which notice must be given (end date minus the notice period) and how many days are left.

At 60, 30 and 7 days the contract owner gets a reminder email that says whether the contract renews automatically or expires. From 30 days out the check marks the contract "Decision requested" and starts the Contract renewal decision sub-workflow, which gives the owner a User Task to renew, renegotiate or terminate, with the new end date and value pre-filled. The decision is written back to the contract row and confirmed by email. Contracts whose deadline has passed without a decision are logged as warnings.

Adapt the Contracts table to your register (or keep it as the register), the reminder windows in the Reminder window switch, and the time of the daily run. Owners can be routed per contract with the optional owner user id column.

Scheduled

Daily at 07:00 (UTC). You can also start it any time from the Run dialog, the API or the CLI.

Runs on a schedule (daily, weekly, monthly) in your time zone.

The flow

Step by step

  1. 1

    Daily check

    The schedule fires at 07:00 and lists every active contract, earliest end date first.

  2. 2

    Work out the notice deadline

    For each contract the deadline is the end date minus the notice period; the check counts the days left from today (or the "as of" date).

  3. 3

    Remind the owner

    At exactly 60, 30 and 7 days the owner gets a reminder email with the end date, value and what happens if nobody acts.

  4. 4

    Ask for a decision

    From 30 days out the contract is marked "Decision requested" and the Contract renewal decision sub-workflow starts, once per contract.

  5. 5

    Renew, renegotiate or terminate

    The owner records the decision with the new end date, value and notes; the contract row is updated and the owner gets a confirmation.

  6. 6

    Flag missed deadlines

    Contracts past their notice deadline without a decision are logged as warnings in the run.

Daily contract renewal check — Every morning: reads the active contracts, works out the days to each notice deadline, emails the owner at 60, 30 and 7 days and starts a Contract renewal decision 30 days out. The same canvas you get in the designer after installing.

Sub-workflow: Contract renewal decision

Started by the daily contract check 30 days before a notice deadline: the owner decides to renew, renegotiate or terminate, and the contract row is updated.

Forms

Inputs and task forms

The inputs a caller passes when it starts a run, and the forms people complete when the process needs a decision.

Start inputs

Daily contract renewal check

Passed by the calling system

As of date as_of · dateYYYY-MM-DDOptional: check as if today were this date (YYYY-MM-DD). Empty = today. Useful for testing and back-filling.

User Task · Contract renewal decision

Decide on renewal

Renew, renegotiate or terminate {{contract.contract_name}} ({{contract.counterparty}})

New end date new_end_date · datePrefilled: {{=FORMAT_DATE(ADD_DAYS(contract.end_date, 365), "YYYY-MM-DD")}}
New annual value new_annual_value · numberPrefilled: {{contract.annual_value}}
Notes (terms, negotiation points, reason) notes · text
RenewRenegotiateTerminate

From your code

Start a run over the API

Every workflow can be started over REST, MCP or the CLI, whatever its trigger, with the sample input below. Runs start straight away on the published version; replace <workflow id> with the id the install created.

REST

shell
curl -X POST "$USERTASKS_URL/api/v1/workflows/start" \
  -H "Authorization: Bearer $USERTASKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"workflow_id":"<workflow id>","variables":{"as_of":"2026-11-02"}}'

CLI

shell
usertasks workflows inputs <workflow id>          # the start form: keys, types, required
usertasks workflows run <workflow id> --input as_of=2026-11-02 --wait

What's included

5 assets, ready to adapt

TypeNameDetails
Email templateContract notice reminderSent to the contract owner 60, 30 and 7 days before the notice deadline.
Email templateRenewal decision recordedConfirms the owner's renewal decision and what happens next.
Data tableContractsYour contract register: one row per active agreement with its end date, notice period, owner and renewal stage. The daily check reads it and the Contract renewal decision workflow writes the outcome back.
WorkflowContract renewal decision10 steps — Started by the daily contract check 30 days before a notice deadline: the owner decides to renew, renegotiate or terminate, and the contract row is updated.
WorkflowDaily contract renewal check18 steps — Every morning: reads the active contracts, works out the days to each notice deadline, emails the owner at 60, 30 and 7 days and starts a Contract renewal decision 30 days out.

Contracts · 8 sample rows

Contract IDContractCounterpartyOwnerOwner emailOwner user id (optional)Start dateEnd dateNotice period (days)Auto-renewsAnnual valueCurrencyStatusRenewal stageDecision notes

Requirements

What you connect it to

Credentials never travel in a package. The install wizard asks for what your environment must provide, or installs it incomplete until you finish setup.

Needs

  • Assignees — People in your workspace to receive the User Tasks (picked on install).
  • Email — Email delivery configured for the instance (EMAIL_PROVIDER), used for notifications.

After installing

  1. Assignees: pick the default contract owner for renewal decisions. Fill the optional "Owner user id" column on a contract to send its decision to someone else.
  2. Replace the sample rows in the Contracts table with your contracts (end date, notice period in days, owner email, auto-renew, annual value). Keep status "active" for contracts the check should watch.
  3. Change the run time or time zone on the "Every day at 07:00" trigger, and the 60 / 30 / 7 day windows in the Reminder window switch if your policy differs.
  4. Email: configure EMAIL_PROVIDER on the instance so reminders and confirmations are delivered (the steps continue on error).

Asked for on install

  • Workflow “Contract renewal decision” assigneesRequired

    • User for step “Decide on renewal”nodes.3.config.assignee_id

Install

Install it in your workspace

Works on UserTasks cloud and on any self-hosted instance. Installing creates the assets above; nothing runs until you complete setup and start it.

In the app

  1. Download contract-renewal-reminders-1.0.0.utpkg.
  2. Open Automations → Packages and drag the file onto the page (or choose Import package). Browse gallery there lists every gallery package without downloading by hand.
  3. Pick the file. The wizard verifies the checksum, every file hash and the signature, and shows the readme.
  4. Review the changes (what is created) and the data rows.
  5. Fill in the requirements, or tick Keep incomplete and finish later with Complete setup.
  6. Done: the workflow is published and active once setup is complete.

With the CLI

shell
curl -fLO https://usertasks.com/gallery/contract-renewal-reminders-1.0.0.utpkg
usertasks packages inspect contract-renewal-reminders-1.0.0.utpkg       # offline: checksum, hashes, signature
usertasks packages install contract-renewal-reminders-1.0.0.utpkg --dry-run
usertasks packages install contract-renewal-reminders-1.0.0.utpkg       # prompts for each requirement
usertasks packages install contract-renewal-reminders-1.0.0.utpkg --keep-incomplete --yes   # in CI; finish with:
usertasks packages complete contract-renewal-reminders -f values.yaml

Verify the download

File SHA-256
6939579a021d0ec021e067eaa2d0959c1c9c13a99121552c76e455787fb5c00e
Package checksum (what is signed)
sha256:04c52919d5b151881e6e1f28ce298d62e21246ccf9e05418a3e00285ead1a83e
Signer
Unsigned preview build — compare the SHA-256 above

shasum -a 256 contract-renewal-reminders-1.0.0.utpkg should print the file SHA-256. How gallery packages are signed.

Versions

Version 1.0.0

  1. v1.0.02026-10-26First release.

Installing a newer version upgrades in place: local credentials and requirement values are kept, and changes you made are flagged first. How packages work

More packages

Related

Browse the whole gallery