Weekly ConnectWise PSA renewal radar in Slack
Every Monday at 7am, get a Slack digest of ConnectWise PSA agreements expiring in the next 60 days, with renewal call holds dropped on each account owner's calendar.
Every Monday at 7am in my local time zone, I want an agent that surfaces ConnectWise PSA service agreements coming up for renewal so my team can start the renewal motion before customers go cold. Build this as an agent-based workflow on a weekly cron trigger.
Step 1: Pull upcoming renewals from ConnectWise PSA. Use ConnectWise PSA's List Agreements to find every active service agreement whose end date falls inside the next 60 days. Skip any agreement that is flagged to auto-renew without intervention (the agent should ask me at setup how that flag is represented on my agreements, for example a custom field, a workflow tag, or a specific agreement type name).
Step 2: For each remaining agreement, gauge customer support health. Use ConnectWise PSA's List Service Tickets filtered to that agreement's company over the last 90 days. From those tickets, summarize: total ticket volume, how many are currently open, and how many were escalated or marked high priority. Use that to give a one-line risk read of healthy, watch, or at-risk. If you can't tell, default to watch.
Step 3: Write a short renewal brief per agreement. Each brief should include the customer name, the agreement type and recurring value, days until expiration, the support-load summary from step 2, and the one-line risk read.
Step 4: Hold time on the account owner's calendar. For each agreement, use Google Calendar Create Event to put a 30-minute renewal call hold on the calendar 14 business days before the agreement's end date. Title it "Renewal call: {customer name}" and put the renewal brief from step 3 into the event description so the owner has everything in one place when they open the invite. The attendee is the account owner pulled from the agreement (ask me at setup how to map ConnectWise PSA account owners to email addresses if it's not obvious).
Step 5: Post one consolidated digest to Slack. Use Slack Send a Message to post into a #renewals channel (let me confirm the channel at setup). The digest should list every upcoming renewal grouped by risk level, at-risk first, then watch, then healthy. For each agreement show the customer name, agreement value, days until expiration, ticket-volume summary, and the date of the renewal call hold that was just placed. Keep it one message, not one per agreement.
Defaults I want you to confirm with me at setup before the first run: the 60-day look-ahead window, the 14-business-day calendar offset, the Slack channel name, the Google Calendar that should hold the renewal calls, my time zone, and how auto-renewing agreements are flagged in my ConnectWise PSA so we skip them correctly.
If a week has no agreements in the window, still post a one-line Slack message saying so, so the team knows the workflow ran and the pipeline is clear.
Additional information
What does this prompt do?
- Pulls every ConnectWise PSA service agreement expiring in the next 60 days, with the customer name, agreement type, value, and days until expiration.
- Sizes up support health for each customer by reading the last 90 days of tickets (volume, open count, escalations) and writing a short risk read of healthy, watch, or at-risk.
- Drops a renewal call hold on each account owner's Google Calendar 14 business days before the agreement ends, so the conversation happens before the customer is in renewal limbo.
- Posts one consolidated Monday morning digest to your #renewals Slack channel, grouped by risk level so the team works the at-risk accounts first.
What do I need to use this?
- A ConnectWise PSA login with permission to read agreements and service tickets.
- A Google Calendar account for the person (or shared calendar) that should hold the renewal call slots.
- A Slack workspace and the name of the channel you want the renewal digest posted to.
- A list of which agreements auto-renew without a renewal conversation, so the agent can skip them.
How can I customize it?
- Change the look-ahead window. The default is 60 days but you can stretch it to 90 for enterprise renewals or shorten it to 30 for a tighter cadence.
- Pick a different cadence or time. Many MSPs prefer Sunday night so reps walk into Monday already briefed, or a Tuesday run after weekly leadership sync.
- Switch the Slack channel, route digests by region or team, or send a separate DM to each account owner alongside the channel post.
- Tune the risk thresholds. Tell the agent how many tickets or escalations should bump a customer from healthy to watch or at-risk.
Frequently asked questions
Which agreements show up in the digest?
How is the healthy, watch, or at-risk label decided?
Whose calendar gets the renewal call hold?
Will this work for MSPs with hundreds of agreements?
Can I run it more or less often than weekly?
Stop letting MSP renewals sneak up on you.
Connect ConnectWise PSA, Google Calendar, and Slack once, and Geni runs your renewal radar every Monday at 7am.