Back to the build library
Professional services
Standard

Retainer Renewal Pipeline

Every retainer renewal surfaces 90 days out and moves through a real pipeline, so agreements get renewed instead of quietly lapsing.

Industry
Professional services
Build effort
Standard
Typical time to launch
1–2 weeks
On this page
The problemWhat gets builtHow it runsAutomations in detailWhat changesBefore you start
Want this built for you?

Bring your stack to a call and we will scope it against how your business actually runs.

Book a call
01

The problem

Retainer revenue is the most profitable money a professional services firm earns. The scope is known, the team is staffed, the relationship is already paid for, and the margin does not have to carry an acquisition cost. It is also the revenue most firms lose by accident. Nobody sits down and decides to let a retainer lapse. The anniversary date sits inside a signed PDF in a shared drive, the partner who sold the work is heads-down on delivery, and the month the agreement actually runs out is the month nobody remembers to send the renewal paperwork. Three weeks later the team is still working, no current agreement exists, and the next invoice turns into an uncomfortable conversation about whether the client ever agreed to another year.

The leak is timing, not persuasion. A renewal worked ninety days out is a conversation about the next phase of work, held while the last quarter of wins is still fresh and before the client has started building next year's budget without you. The same renewal worked eight days out is a scramble: the client has no time to review terms, the procurement contact is on leave, and the only move left is a month-to-month extension at the old rate. That extension is where the second leak opens. Rates never get reviewed, scope creep never gets priced in, and a retainer signed three years ago keeps running at three-year-old numbers while the cost of delivering it has climbed every quarter.

The third failure is invisibility. Ask most firms what is up for renewal this quarter and what it is worth, and the answer takes someone an afternoon of digging through contracts and invoices. Without that view there is no forecast, no capacity plan, and no way to tell the difference between a client who is drifting and a client who is simply quiet. By the time a lapse is visible it has already happened. This build makes the renewal calendar a pipeline object instead of a memory, puts a dated clock on every active agreement, and runs the outreach that turns a dormant anniversary into a worked opportunity.

02

What gets built

Pipeline and stages

One pipeline, Retainer Renewals. Every active retainer lives in it permanently, not just the ones in their renewal window, so the pipeline doubles as the register of agreements in force.

  • Active - Clock Running - the agreement is in force and the renewal date is more than 90 days out. Opportunity value is set to the annualised retainer value.
  • Renewal Window Open - 90 days before the renewal date. Entry is automatic.
  • Value Recap Sent - the client has received the period summary and the renewal signal.
  • Renewal Conversation Booked - a dated call exists on the calendar.
  • Renewal Terms Out - updated scope and terms have been sent for review.
  • Verbal Yes - the client has agreed in principle, paperwork pending.
  • Signed - Rolled Over - new agreement executed. The automation resets the clock and the opportunity returns to Active.
  • Not Renewing - closed lost, with a required reason.

A second pipeline, At Risk Review, holds accounts flagged during the window that need a partner-level intervention rather than a sequence. Three stages: Flagged, Partner Contacted, Resolved.

Calendars

  • Renewal Conversation - 45 minutes, assigned round-robin to the relationship owner named on the account, with a fallback to the practice lead. Two days minimum notice, 14 days booking window, buffer of 15 minutes after.
  • Quarterly Business Review - 60 minutes, same ownership rules, used by the mid-term workflow so the renewal conversation is never the first conversation of the quarter.
  • Partner Save Call - 30 minutes, restricted to partner availability, surfaced only on the at-risk path.

Custom fields

On the contact or account record, depending on how the firm models clients:

  • retainer_start_date - date
  • retainer_end_date - date, the single source of truth the clock reads
  • retainer_term_months - number, typically 6 or 12
  • retainer_scope_summary - long text, one paragraph of what is included
  • retainer_monthly_hours - number, contracted hours or units per month
  • auto_renew_clause - dropdown: Auto-renews, Requires signature, Month-to-month
  • notice_period_days - number, the contractual notice to cancel
  • notice_deadline_date - date, calculated as retainer_end_date minus notice_period_days
  • relationship_owner - user reference
  • renewal_decision_date - date, when the client says they will decide
  • renewal_risk_flag - dropdown: Healthy, Watch, At risk
  • rate_review_due - checkbox, set true when the retainer has run more than 12 months at the same rate
  • last_qbr_date - date
  • renewal_outcome - dropdown: Renewed same terms, Renewed with change, Downgraded, Lapsed, Terminated
  • next_term_value - number, the proposed value of the renewed term
  • scope_change_requested - long text, filled by the renewal form

Tags

  • retainer-active, retainer-lapsed - lifecycle state
  • renewal-t90, renewal-t60, renewal-t30, renewal-t7 - window markers, applied by the clock and used as sequence entry gates
  • renewal-meeting-booked - suppresses all chase steps
  • renewal-at-risk - routes to the partner path and suppresses automated nudges
  • renewal-signed, renewal-declined
  • rate-review-due - tells the terms workflow to use the uplift template
  • renewal-paused - the manual brake. Any contact carrying it is excluded from every workflow in this build.
  • no-auto-renew - applied when auto_renew_clause is Requires signature, raising urgency on the T-30 path

Forms

  • Retainer Setup - internal form the delivery lead completes when a new retainer is signed. Captures start date, term, monthly hours, scope summary, notice period and relationship owner, then writes them to the custom fields and creates the pipeline opportunity. This is what keeps the register complete.
  • Renewal Confirmation - client-facing. Confirms the next term, hours, start date and any scope change. Submitting it moves the opportunity to Verbal Yes and triggers the paperwork workflow.
  • Scope Change Request - client-facing, linked from the recap email. Free text plus a checklist of common adjustments, so the renewal conversation starts from the client's own words.
  • Non-Renewal Reason - internal, required to close an opportunity into Not Renewing. Reason dropdown plus free text, feeding the quarterly loss review.

BO's role and guardrails

BO handles the inbound half of the window. When a client replies to a recap or a nudge, BO reads the reply, answers scheduling and logistics questions, and books the Renewal Conversation directly against the owner's calendar.

  • BO may confirm what is in the current scope by quoting retainer_scope_summary verbatim.
  • BO may state the current renewal date and notice deadline.
  • BO may book, move or cancel a Renewal Conversation.
  • BO may never quote, confirm, negotiate or imply a price, uplift or discount. Any message containing a number, a currency symbol, the words rate, fee, cost, budget, discount or increase is handed to the relationship owner with an internal note and BO replies only: "Good question - I will have [owner] come back to you on the commercial side today."
  • BO may never agree to terminate, pause or downgrade. Those replies apply renewal-at-risk, suppress the sequence and notify the partner within 15 minutes.
  • BO stops the moment a human replies in the thread and does not resume unless the owner releases it back.

Numbers and channels

  • One shared firm number for SMS, registered for business messaging, used only for short logistics nudges and meeting reminders. Renewal substance always goes by email so there is a written record.
  • Email sends from the relationship owner's own address with the firm domain authenticated, not from a generic marketing subdomain. Renewal mail that lands in a promotions tab is a lost renewal.
  • Internal notification channel for owners and partners, either in-platform notifications or a Slack webhook, carrying every at-risk flag and every T-30 with no booked meeting.
  • Quiet hours of 8am to 7pm in the client's own time zone on SMS, weekdays only. No renewal SMS on a Friday afternoon.
03

How it runs, step by step

  1. A new retainer is signed. The delivery lead completes the Retainer Setup form: start date 1 March, 12-month term, 40 hours a month, 30 days notice, owner named. The automation writes every custom field, calculates retainer_end_date as 28 February and notice_deadline_date as 29 January, applies retainer-active, and creates an opportunity in Retainer Renewals at Active - Clock Running with the annualised value.
  2. Delivery runs. At the six-month mark the mid-term workflow books a Quarterly Business Review, so the relationship has a scheduled touchpoint that has nothing to do with asking for money. The call date is written to last_qbr_date.
  3. 1 December arrives, 90 days before the renewal date. The clock workflow applies renewal-t90 and moves the opportunity to Renewal Window Open. The owner gets an internal notification naming the client, the current value, and whether a rate review is due.
  4. The owner has 48 hours to review the account and set renewal_risk_flag. If they set it to At risk, the account diverts to the partner path and all automated outreach is suppressed. Healthy and Watch continue on the standard sequence.
  5. The recap workflow sends the value recap email from the owner's address: what was delivered this term, the hours used against hours contracted, and a direct link to book the Renewal Conversation plus a link to the Scope Change Request form. The opportunity moves to Value Recap Sent.
  6. The client replies asking whether reporting can be monthly rather than every two weeks next year. BO recognizes this as a scope question, not a commercial one, confirms it is a reasonable thing to cover on the call, and offers the owner's next three open slots.
  7. The client picks a slot. BO books the 45-minute Renewal Conversation, applies renewal-meeting-booked, moves the opportunity to Renewal Conversation Booked, and every remaining chase step in the sequence is suppressed by the tag gate.
  8. Reminders fire 24 hours and 2 hours before the call by email and SMS. The owner receives a pre-call brief: scope summary, hours used, last QBR date, open scope change request text, and whether rate_review_due is set.
  9. The call happens. The owner marks the meeting as showed and sets renewal_decision_date to 20 December and next_term_value to the proposed figure. The opportunity moves to Renewal Terms Out and the terms workflow sends the updated scope and agreement for review.
  10. Four days pass with no reply. The terms-follow-up workflow sends a short nudge, then a second nudge three days later, then notifies the owner to call rather than send a fourth email.
  11. The client submits the Renewal Confirmation form, confirming 12 more months at 40 hours with monthly reporting. The opportunity moves to Verbal Yes and the paperwork workflow sends the agreement for signature and raises the first invoice of the new term in the connected accounting system.
  12. The signature lands. The rollover workflow fires: retainer_start_date becomes 1 March of the new year, retainer_end_date becomes 28 February of the year after, all four window tags are removed, renewal_outcome is set to Renewed with change, rate_review_due is cleared, and the opportunity returns to Active - Clock Running with the new value. The clock starts again with no human action.
  13. Had the client gone quiet instead, the T-30 workflow would have escalated to the owner by notification, and at the notice deadline the containment workflow would have applied renewal-at-risk, moved the opportunity to the At Risk Review pipeline, and put a dated task on the partner.
  14. On the first Monday of each quarter the forecast digest emails leadership the full renewal book for the next 90 days: client, value, stage, owner, risk flag and days remaining. Nothing in that report is assembled by hand.
04

Automations in detail

1. Retainer Clock Setter

Trigger: submission of the internal Retainer Setup form, or an opportunity entering the stage Signed - Rolled Over.

Conditions: none. This runs on every new or renewed retainer so the register is never partial.

Actions in order:

  1. Write retainer_start_date, retainer_term_months, retainer_monthly_hours, retainer_scope_summary, notice_period_days and relationship_owner from the form fields.
  2. Calculate and write retainer_end_date as start date plus term months, minus one day.
  3. Calculate and write notice_deadline_date as end date minus notice_period_days.
  4. Apply retainer-active. Remove retainer-lapsed, renewal-signed, renewal-declined and all four window tags.
  5. If auto_renew_clause is Requires signature, apply no-auto-renew.
  6. Set renewal_risk_flag to Healthy and clear rate_review_due.
  7. Create or move the opportunity in Retainer Renewals to Active - Clock Running, with value set to monthly value times term months.
  8. Notify the relationship owner: "[Client] retainer is live. Term ends [retainer_end_date]. Notice deadline [notice_deadline_date]. Renewal window opens [end date minus 90 days]."

Exit: single pass, no waits. Re-running on the same record overwrites the dates cleanly, which is exactly what a renewal needs.

2. Window Opener (T-90)

Trigger: daily scheduled scan at 06:00 firm time over all contacts tagged retainer-active.

Conditions: retainer_end_date is exactly 90 days from today. Not tagged renewal-paused. Not already tagged renewal-t90.

Actions in order:

  1. Apply renewal-t90.
  2. If retainer_start_date is more than 12 months before today, or the monthly value has not changed in 12 months, apply rate-review-due and set rate_review_due true.
  3. Move the opportunity to Renewal Window Open.
  4. Create a task for the relationship owner, due in 2 days: "Set risk flag and confirm next-term scope for [Client]."
  5. Notify the owner: "Renewal window open for [Client]. Current term value [internal figure], ends [retainer_end_date]. Rate review due: [yes or no]. Set the risk flag within 48 hours or the standard recap goes out automatically."
  6. Wait 2 days.
  7. Branch on renewal_risk_flag: At risk routes to workflow 7 and this workflow stops. Healthy or Watch, or still unset, continues to workflow 3.

Exit: contact loses retainer-active, gains renewal-paused, or the risk flag is At risk.

3. Value Recap and Renewal Signal (T-90 to T-75)

Trigger: completion of workflow 2 on the Healthy or Watch branch.

Conditions: not tagged renewal-meeting-booked, renewal-at-risk or renewal-paused at each step.

Actions in order:

  1. Send email from the relationship owner's address. Subject: "[Client] - this year's work, and next year's". Body: "Hi [first name], your retainer with us runs to [retainer_end_date], so this is the right moment to talk about the next term rather than the last two weeks of it. Here is where we got to this year: [period summary]. You contracted [retainer_monthly_hours] hours a month and used [hours used] of them. Before we put next year's scope together, two things would help. First, book 45 minutes with me here: [booking link]. Second, if anything about how we work together should change, tell me in your own words here: [scope change form link]. I would rather build next year around what you actually need than copy this year forward."
  2. Move the opportunity to Value Recap Sent.
  3. Wait 5 days.
  4. If the recap email was opened but no meeting booked: send SMS, respecting quiet hours. "Hi [first name], [owner] here from [firm]. Sent you a note about next year's retainer - easiest next step is 45 mins in the calendar: [short booking link]. Reply STOP to opt out."
  5. If the recap email was not opened: resend by email with subject "Re: next year's retainer - did this reach you?" and the same body trimmed to three sentences.
  6. Wait 7 days.
  7. If still no booking, create a task for the owner: "No response to recap for [Client] - call them." Due same day.

Exit: renewal-meeting-booked applied, the Renewal Confirmation form is submitted, renewal-at-risk or renewal-paused applied, or the opportunity closes.

4. Window Escalation (T-60 and T-30)

Trigger: daily scheduled scan at 06:00 over contacts tagged retainer-active.

Conditions: retainer_end_date is exactly 60 days out, or exactly 30 days out. Not tagged renewal-meeting-booked, renewal-signed, renewal-at-risk or renewal-paused.

Actions in order, T-60 branch:

  1. Apply renewal-t60.
  2. Send email from the owner: "Hi [first name], we are 60 days from the end of your current term on [retainer_end_date]. I do not want this to become a last-minute piece of paperwork for either of us. Can we get 45 minutes in the calendar this week or next: [booking link]. If the honest answer is that next year looks different, that is a useful conversation too - I would just rather have it now than in January."
  3. Wait 3 days.
  4. If no booking, send SMS within quiet hours: "Hi [first name] - [owner] from [firm]. 60 days to your renewal and we have not got a date yet. Grab one here: [short booking link]. Reply STOP to opt out."
  5. Wait 4 days. If still nothing, notify the owner to call and log the attempt.

Actions in order, T-30 branch:

  1. Apply renewal-t30.
  2. Branch on the no-auto-renew tag. If present, send: "Hi [first name], one practical note. Your agreement does not renew automatically - it needs a new signature before [retainer_end_date], otherwise work pauses at the end of the term, which is in nobody's interest. I have held time here: [booking link]. If it is easier, reply to this and I will send the paperwork straight over." If absent, send: "Hi [first name], your retainer rolls into a new term on [renewal start date]. Before it does I would like 30 minutes to confirm scope and hours for the year, so you are not paying for last year's shape of work. Here: [booking link]."
  3. Notify the relationship owner and the practice lead jointly: "[Client] is 30 days from renewal with no booked conversation. Value [internal figure]. Owner [name]. Partner intervention recommended."
  4. Create a task on the partner, due in 1 day: "Call [Client] - renewal at T-30, no meeting."
  5. Wait 7 days. If still no booking and no-auto-renew is present, apply renewal-at-risk and hand to workflow 7.

Exit: any of the suppression tags, a booked meeting, or form submission.

5. Renewal Conversation Handler

Trigger: a booking is created on the Renewal Conversation calendar.

Conditions: branches on appointment status after the slot time.

Actions in order:

  1. Apply renewal-meeting-booked. Move the opportunity to Renewal Conversation Booked. Stop all sequences from workflows 3 and 4.
  2. Send confirmation email immediately with the agenda: "Three things on the agenda: what worked this year, what should change, and what next year's scope looks like. If anything should be on that list that is not, reply and tell me."
  3. Wait until 24 hours before the slot. Send email reminder.
  4. Wait until 2 hours before. Send SMS reminder within quiet hours: "See you at [time] today - [owner]."
  5. Wait until 1 hour before. Send the owner a pre-call brief by internal notification: scope summary, contracted hours against used hours, last_qbr_date, the text of any scope_change_requested, rate_review_due state, and the notice deadline.
  6. Wait until 1 hour after the slot. Branch on appointment status.
  7. Showed: create a task for the owner due same day: "Set renewal_decision_date and next_term_value for [Client], then move to Renewal Terms Out." Send the client a short recap email: "Good to talk. Here is what I heard you need next year: [notes]. Terms with you by [date]."
  8. No-show: remove renewal-meeting-booked, send "Sorry we missed each other - grab another slot here: [booking link]", wait 2 days, and if no rebooking return the contact to the workflow 4 sequence at its current window tag.
  9. Canceled by client with no rebooking within 48 hours: apply renewal-at-risk and hand to workflow 7.

Exit: after the post-meeting branch resolves.

6. Terms Out and Paperwork

Trigger: opportunity moved to Renewal Terms Out.

Conditions: next_term_value must be populated, otherwise the workflow halts and tasks the owner to fill it. Branch on rate-review-due to choose the standard or the uplift version of the terms template.

Actions in order:

  1. Send the terms email from the owner with the agreement and updated scope attached or linked: "Hi [first name], as discussed - next term runs [start] to [end], [hours] hours a month, scope as set out in the attachment. Two links: sign here [signature link], or if anything needs changing, confirm the shape here first [Renewal Confirmation form link]."
  2. Wait 4 days.
  3. If no signature and no form submission: send nudge one. "Hi [first name] - just checking the renewal paperwork landed and nothing in it needs changing. Happy to walk through it on a call if that is quicker."
  4. Wait 3 days.
  5. If still nothing: send nudge two, short. "Hi [first name], anything blocking the renewal from your side? If it is procurement or a date, tell me and I will work around it."
  6. Wait 2 days. If still nothing, stop emailing and create a task for the owner: "Call [Client] on renewal paperwork - three written attempts made." Notify the practice lead.
  7. On Renewal Confirmation form submission: write scope_change_requested, move the opportunity to Verbal Yes, and notify the owner to reissue the agreement if the scope changed materially.
  8. On signature received: apply renewal-signed, move the opportunity to Signed - Rolled Over, raise the first invoice of the new term in the connected accounting system, and hand to workflow 1 for the clock reset.

Exit: signature received, opportunity closed into Not Renewing, or renewal-paused applied.

7. At Risk Containment

Trigger: renewal-at-risk applied, by the owner manually, by BO on a termination or pause signal, or by workflows 4 and 5.

Conditions: none. This path always involves a human.

Actions in order:

  1. Immediately stop and remove the contact from workflows 3, 4 and 6. No further automated client messages go out on this account.
  2. Set renewal_risk_flag to At risk. Create an opportunity in the At Risk Review pipeline at Flagged, carrying the current term value.
  3. Notify the partner and the practice lead within 15 minutes: "[Client] flagged at risk, [days] days to term end. Trigger: [source]. Owner [name]. Last client message: [quoted reply]."
  4. Create a task on the partner due within 1 business day: "Call [Client] - at-risk renewal."
  5. Wait 1 business day. If the task is not complete, re-notify the partner and copy the managing partner.
  6. When the partner logs the call and moves the opportunity to Partner Contacted, send the client the Partner Save Call booking link only if the partner requests it from the task.
  7. If resolved: the partner removes renewal-at-risk, sets the risk flag back to Watch, and the contact re-enters workflow 6 at Terms Out.
  8. If not renewing: the owner completes the Non-Renewal Reason form, which closes the opportunity into Not Renewing and hands to workflow 8.

Exit: flag removed, or non-renewal recorded.

8. Lapse Handling and Offboarding

Trigger: opportunity closed into Not Renewing, or the daily scan finds retainer_end_date is yesterday with no renewal-signed tag.

Conditions: branch on whether the outcome was a decision or a drift.

Actions in order:

  1. Remove retainer-active, apply retainer-lapsed, write renewal_outcome.
  2. Drift branch, no decision recorded: notify the owner and partner urgently - "[Client] term ended yesterday with no renewal on record. Delivery may still be running unbilled. Confirm status today." Create a same-day task on the owner and a task on finance: "Hold further work orders for [Client] pending renewal status."
  3. Decision branch: send the offboarding email from the partner: "Hi [first name], thank you for the last [term] - it was good work to be part of. Everything we produced for you is yours; I will have the team package deliverables and credentials and send them across by [date]. If circumstances change, you know where I am."
  4. Create an offboarding task set: hand over deliverables, revoke access, final invoice, remove from active reporting.
  5. Wait 90 days. Send one win-back email from the partner, once: "Hi [first name], it has been a quarter. No pitch - I am just curious how [the work area] has gone since we stepped back, and whether there is anything worth picking up. Reply or ignore, both fine."
  6. If no reply, move the contact to the firm's low-frequency newsletter audience and stop.

Exit: after the single win-back attempt, or on re-signature, which routes back to workflow 1.

9. Quarterly Renewal Forecast Digest

Trigger: scheduled, first Monday of each quarter at 07:00 firm time. Also runs on the first Monday of each month in a shorter form.

Conditions: none.

Actions in order:

  1. Query all contacts tagged retainer-active with retainer_end_date inside the next 120 days.
  2. Compose an internal email to the partner group listing, per account: client name, relationship owner, current term value, next term value if set, pipeline stage, renewal_risk_flag, days to end date, and whether a conversation is booked.
  3. Append three counts: renewals in window with no booked conversation, accounts flagged At risk, and accounts with rate_review_due unresolved.
  4. Create one task per account in window with no booked conversation, assigned to its owner, due within 3 days.

Exit: single pass each run.

05

What changes

The renewal stops being an act of memory. Every agreement in force has a dated clock attached to it, and that clock opens a worked opportunity ninety days out whether or not anybody happens to think of it. The firm's first renewal conversation moves from the last two weeks of a term to the first week of the window, which is the difference between negotiating from strength and asking for an extension.

Three operational changes follow. Rate reviews actually happen, because the clock flags a retainer that has run twelve months at the same number and the terms workflow picks the uplift template automatically. Silent lapses become loud, because a term ending with no renewal on record generates an urgent notification to the partner and a hold instruction to finance rather than an unbilled month of delivery. And the renewal book becomes a number leadership can see on the first Monday of the quarter without anybody opening a contract folder.

What to measure, from the pipeline rather than from anyone's impression:

  • Renewal rate by count and by value - two different numbers, and the gap between them tells you whether you are losing small clients or large ones.
  • Days from window open to renewal conversation booked - the single best early indicator. If this creeps past 21 days the recap step needs rewriting or the owners are not reading their notifications.
  • Share of renewals closed before T-30 - the target is most of them. Anything closing inside the final two weeks is a scramble that happened to work.
  • Silent lapse count - terms that ended with no recorded decision. This should reach zero within one full cycle; it is the metric the build exists to kill.
  • Net value change on renewal - the aggregate difference between current term value and next term value across closed renewals. This is where rate discipline shows up.
  • At-risk flags raised, and how many were saved - a rising flag count is not a bad sign if the save rate holds; it means owners are being honest earlier.
  • Non-renewal reasons by category - from the required form. After two quarters this tells you whether you are losing on price, on delivery, or on client-side change you could never have influenced.

The second-order effect is capacity planning. Once renewal dates and next-term hours are structured fields rather than prose in a PDF, the firm can see committed delivery hours three months forward and staff against them instead of reacting.

06

Before you start

Data you need before the first workflow goes live

This build is only as good as its clock, and the clock reads one field. Before switching anything on, somebody has to go through every live agreement and populate retainer_start_date, retainer_end_date, retainer_term_months, notice_period_days and auto_renew_clause for each one. Budget real time for this - it is usually a day or two of someone reading contracts, and it is the step firms skip and then wonder why half their renewals never surface. Run the daily scan in reporting-only mode for a week first, so you can see which accounts it would have flagged and catch bad dates before a client receives anything.

Integrations

  • Calendar - Google Calendar or Outlook connected for every relationship owner and partner, with two-way sync on, so the booking links never offer a slot that is already taken.
  • E-signature - a signature tool with webhook callbacks, so the signed event triggers the rollover rather than relying on someone forwarding a confirmation email.
  • Accounting - QuickBooks, Xero or equivalent, if you want the renewal to raise the first invoice of the new term automatically. If the connection is not available, the workflow creates a finance task instead.
  • Time tracking - whatever the firm uses for hours. The hours-used figure in the recap email is the most persuasive line in the whole sequence, and it has to be real. If hours cannot be pulled in, remove that line rather than estimating it.
  • Internal notifications - Slack or Microsoft Teams webhook, or in-platform notifications. At-risk flags need to interrupt someone.

Numbers, SMS and deliverability

  • Provision one sending number and complete business messaging registration - A2P 10DLC brand and campaign registration in the United States, or the equivalent local process elsewhere. Registration takes days to weeks and is not something to start the week you launch. Register the campaign as customer care or account notifications, which is what these messages genuinely are.
  • Every SMS template needs opt-out language on first contact and STOP honoured automatically. Confirm that the opt-out list is shared across all workflows, not per-campaign.
  • Set quiet hours of 8am to 7pm in the recipient's time zone, weekdays only, and enforce them at the workflow level rather than trusting send times.
  • Authenticate the sending domain with SPF, DKIM and DMARC before the first recap goes out. Send renewal mail from the owner's real address on the firm domain, never from a marketing subdomain - a renewal email in a promotions tab is a renewal you did not send.
  • Warm the sending domain if it is new. These are low-volume, high-value emails; one spam-folder cycle costs more than the whole build.

Permissions and ownership

  • Decide whether retainers attach to a contact or to an account or company object, and model it once. Retrofitting this halfway through is painful.
  • Name a relationship owner for every live retainer, with a named fallback. Unowned accounts silently drop out of every escalation path.
  • Agree who can apply renewal-paused and renewal-at-risk, and that applying either is a commitment to do something manually. A pause tag with nobody behind it is just a hidden lapse.
  • Restrict commercial fields - next_term_value, rate_review_due - to partners and owners, not the whole delivery team.

Compliance

  • Renewal and account-servicing messages to existing clients are generally transactional rather than marketing, but the win-back email in workflow 8 is marketing and must respect marketing consent and unsubscribe handling separately. Keep the two consent states as distinct fields.
  • If the firm serves clients in the United Kingdom or the European Union, client contact data in these workflows is personal data under UK GDPR or the GDPR: document the lawful basis, keep retention limited, and make sure the offboarding path in workflow 8 includes deleting or minimizing contact records when the relationship genuinely ends.
  • Notice periods and auto-renewal clauses have real legal weight, and some jurisdictions regulate automatic renewal notices specifically. The notice deadline this build calculates is an operational prompt, not a legal determination.
  • Nothing here is legal advice. Have the firm's own counsel confirm notice-period handling, auto-renewal clause wording, consent treatment for the win-back step, and data retention before go-live. Where scope and pricing for a build need working out, point the client at a scoping call at bookings.appbo.io rather than quoting anything.
Field notes

Build it with us.

Every build on this page is something we configure, test and hand over with the SOPs your team needs to run it.

Book a call