Bookkeeping Client Offboarding
How to wind down a bookkeeping engagement. This SOP covers the closeout regardless of why they're leaving: client choice, non-payment, or Launch-initiated. The end state is always the same: a clean handoff, no recurring charges, no orphaned books.
Related SOPs: Managed Service Plans covers how we sell. Financial Handbook covers what happens in between.
The four offboarding paths
| Path | Trigger | Who initiates |
|---|---|---|
| Path 1: Voluntary cancellation | Client tells us they're leaving | Client |
| Path 2: Plan downgrade or scope reduction | Client wants to keep the relationship but smaller | Client + Launch jointly |
| Path 3: Non-payment lapse | Invoice unpaid 30+ days past due | Launch |
| Path 4: Launch-initiated termination | Bad fit, ethics issue, scope creep no resolution | Launch (with Monica sign-off) |
All four end at the same closeout checklist (bottom).
Path 1: Voluntary cancellation
The client emails saying they're moving to a different bookkeeper, doing it in-house, or shutting down the business.
Day 0 — confirm receipt + book a closeout call
Within 1 business day:
- Reply confirming the cancellation request and the date the engagement will end (default: end of current billing month)
- Schedule a 30-minute closeout call with the primary bookkeeper (typically Liberty or Emma)
- The closeout call is non-negotiable — it's how we catch things the client doesn't know they need
Closeout call — agenda
- Confirm the last closed month and what's still in-flight
- Walk through what they'll get: QuickBooks file access, signed-off financials through last close, A/R aging snapshot, payroll year-to-date
- Walk through what they need to do: change the QuickBooks subscription owner (if we own it), update Stripe / Square notifications if we receive them, replace us on any state/IRS contact lists, update their CPA
- Identify the handoff target: new bookkeeper / DIY / dissolving / CPA-direct
- Document everything in the client's Drive folder under
Offboarding
Final close + handoff work
If they want a clean final close:
- Run the last partial-month or full-month close, depending on agreement
- Send the final financial package: P&L, balance sheet, A/R aging, A/P aging, payroll YTD report
- All exported PDFs go in the Drive
Offboardingfolder - Reconciled QuickBooks file transferred to client or new bookkeeper per the handoff target
This is billable work (flat fee, never hourly going out the door). Quote it at the closeout call before doing it.
Day +30 — handover complete
- Cancel the Stripe subscription effective end of current billing cycle
- No partial refund unless the client overpaid into an unused tier month
- Send the final goodbye email with a copy of the full handoff package and an open invitation to come back
- Mark Supabase
bookkeeping_engagement_status = "offboarded_voluntary"with end date
Path 2: Plan downgrade or scope reduction
The client wants to stay, but smaller. Common reasons: business shrunk, they hired an in-house person to handle data entry, they're moving to DIY with light support.
This isn't a full offboard but it touches the same closeout discipline:
- Re-quote at the new tier or Flex Plan
- Send a new engagement letter
- Cancel the old Stripe subscription, open a new one at the new rate
- Update Supabase
bookkeeping_engagement_typeto the new tier - Send a transition email confirming the new scope and what's no longer included
If they ask to drop to "just monthly close and statements," that's Tier 1. Don't sell them a custom mid-point.
Path 3: Non-payment lapse
The client's bookkeeping invoice is unpaid 30 days past due.
Day +1 (1 day past invoice due) — friendly nudge
- Automated Stripe dunning email goes out (already in place)
- Bookkeeper or Stacia sends a personal "hey, did you see this?" email — sometimes the card just failed silently
Day +15 — formal pause notice
- Send the Service Pause Notice email (Gmail template: "Bookkeeping · Past Due — Day 15")
- "We've paused new work on your books as of today. Existing close work through [last paid month] is complete. We'll resume when payment is received."
- Pause the work — no new month close, no reconciliations, no A/R follow-up
Day +30 — formal termination notice
- Send the 30-Day Termination Notice email (Gmail template: "Bookkeeping · Past Due — Day 30")
- "If we don't hear from you by [date 30 days from now], the engagement will be terminated. We'll deliver your books through [last paid close] and the engagement will close out."
- Spell out clearly: what they'll receive (the last clean close), what they won't (no further work), what comes next
Day +60 — Launch terminates
- Send the Service Terminated email confirming the engagement is closed
- Run the standard closeout checklist (below) using whatever data we have through last paid close
- No final close attempted on unpaid work
- Mark Supabase
bookkeeping_engagement_status = "offboarded_nonpayment"with end date - Drive folder archived but retained
Path 4: Launch-initiated termination
Rare but happens. Reasons:
- Bad fit that didn't resolve: client refuses to use QuickBooks the way we need it, won't share information, weeks late on basic requests
- Ethics issue: client asks us to do something we won't do
- Capacity: bookkeeper team genuinely cannot take more work and this client is the lowest-fit
- Persistent abuse: rude, threatening, or boundary-pushing communication
Internal decision + Monica approval
- Document the reason in the client's Supabase record
- Get Monica sign-off before drafting any termination email — this is never unilateral
Send the 30-day termination notice
- Use the Launch-Initiated Termination email template (Gmail, "Bookkeeping · Launch-Terminate")
- Measured language — we're ending a contract, not picking a fight
- 30 days' notice (vs 60 for the client, since we're the one walking)
- Offer a final close at flat rate, recommendations for replacement bookkeepers
- Make clear: we will deliver the books in usable shape, not punish them for the end
Final 30 days
- Complete the work through the termination date
- Run the closeout call same as Path 1
- Run the final close
- Run the closeout checklist (below)
Mark in systems
- Supabase
bookkeeping_engagement_status = "offboarded_launch_initiated"with reason code
The closeout checklist (every path ends here)
| Item | Owner | Notes |
|---|---|---|
| Stripe subscription | Bookkeeper | Cancelled effective end of paid period. Verify in Stripe dashboard, not just trusted. |
Supabase clients row | Bookkeeper | bookkeeping_engagement_status updated; bookkeeping_end_date set |
| Recurring calendar reminders | Bookkeeper | All compliance reminders for this client removed |
| QuickBooks file | Bookkeeper | Transferred to client or new bookkeeper per closeout call decision |
| Drive folder | Bookkeeper | Final financials in Offboarding subfolder. Folder archived. 7-year retention. |
| ClickUp tasks | Bookkeeper | All open tasks for this client closed or reassigned |
| Recurring email rules | Bookkeeper | Any inbox rules forwarding their notices removed |
| Bank feed connections | Bookkeeper | We disconnect from their accounts; they should rotate any login credentials they shared |
| Payroll integration | Bookkeeper | If we ran payroll, transfer admin to client or new bookkeeper |
| State/IRS contact | Bookkeeper | If we're listed as their bookkeeping point-of-contact anywhere, remove |
| Nutshell / CRM | Stacia | Mark inactive, add closeout note |
| Goodbye email sent | Primary bookkeeper | With final packet attached |
What we DO NOT do during offboarding
- We don't withhold the client's books over a billing dispute — they own their data
- We don't refuse a closeout call out of frustration — every offboard gets the call
- We don't refund unused months unless explicitly negotiated — flat fee covers fixed monthly capacity, not metered work
- We don't trash-talk a departing client internally or externally — even Launch-initiated terminations get measured language
- We don't ghost — silence is never the offboarding path
Templates and where they live
- Gmail labels:
Launch / Bookkeeping / Closeout,Launch / Bookkeeping / Past Due — Day 15,Launch / Bookkeeping / Past Due — Day 30,Launch / Bookkeeping / Launch-Terminate,Launch / Bookkeeping / Goodbye - Drive (Sales folder): Closeout call agenda template, final financial package outline
- Drive (Finance folder): Per-client
Offboarding/subfolder created at start of offboard
Edge case: client comes back
It happens. They left, tried DIY or another bookkeeper, want to come back.
- Treat as a new engagement, not a reactivation
- Run a fresh intake call and re-quote
- They get the current tier pricing, not their old pricing
- The Drive folder un-archives but the engagement is logged as a new row in Supabase with a reference to the prior engagement
v1 draft. Verify Gmail template names + Stripe cancellation flow before relying on this verbatim. Last updated 2026-05-27.