Every agency gets the email eventually. The client is moving to another agency, or bringing marketing in-house, or closing a location. It is rarely dramatic. What makes it expensive is what happens in the sub-account over the next week, because offboarding is the one moment where three things can go wrong at once: you lose the build you spent months refining, the client loses data they were entitled to, and a phone number with an approved A2P campaign behind it disappears for good.

None of those losses come from bad intent. They come from doing the right steps in the wrong order. Someone deletes the sub-account before anyone took a snapshot. Someone transfers it before the workflows were copied. Someone exports contacts and assumes the conversation history came with them. Each of those is irreversible once the next step runs.

This is the sequence I use when a client leaves one of my own sub-accounts. It leans on HighLevel's own help articles for every platform behavior, because the details here are the kind that change, and they are linked so you can check them on the day you need them.

First, settle who owns what

Before you touch the account, answer one question in writing: what is the client taking with them? Their contacts, conversations, reviews, phone numbers and domain are almost always theirs. Your workflows, funnel templates, email sequences and the logic you built across all your clients are usually yours, unless your agreement says the build was work for hire. That is a contract question, not a GoHighLevel question, and I am not giving legal advice here. But the answer drives every step below, so get it settled before the first click, not after.

The common split is simple: the client leaves with their data and a working account, and you leave with a copy of the system that produced it. The steps below protect both halves.

Step 1: Snapshot the sub-account before anything else

Once a sub-account has been transferred or deleted, you cannot snapshot it. So the snapshot comes first, even if you think you already have the build somewhere else. Accounts drift. The version running in a client's sub-account after a year of small fixes is rarely identical to the master you started from.

Per HighLevel's snapshot creation article, you do this from Agency View: Account Snapshots, then Create New Snapshot, pick the client's sub-account as the source, and select the assets. The same article lists what a snapshot captures (workflows, funnels, calendars, forms, emails, triggers, custom fields, custom values, membership content and more) and what it does not: contacts, appointments, conversations, reputation data, Stripe connections and integrations. Lead Gen Forms are also excluded.

Read that exclusion list twice, because it cuts both ways. A snapshot protects your build. It does nothing for the client's data. Nobody should treat "we snapshotted it" as a backup of the account.

Step 2: Turn the snapshot into a clean master

A snapshot of a live client account carries that client everywhere. Their business name sits in custom values. Their logo and offer are in the emails. Their staff are named in notifications and assigned in workflow actions. Load that snapshot into your next client as-is and you will be cleaning someone else's name out of automated messages for weeks.

In our operating experience, the reliable fix is to load the fresh snapshot into a scratch sub-account you own, make it generic there, and snapshot that clean copy as your master:

  • Custom values. Replace client-specific values with obvious placeholders like Business Name so a missed one is visible instead of embarrassing.
  • User assignments. Workflow notifications and assign-user actions pointed at the old client's staff point at nobody in the next account. Re-point them or flag them.
  • Copy and branding. Emails, SMS bodies and funnel pages carry the old offer. Neutralize them.
  • Hard-coded IDs. Pipeline, stage and field IDs that only existed in the old account can break silently in the new one. That failure mode is the subject of why GoHighLevel snapshots break, and it applies doubly to snapshots taken from a live client.

Step 3: Choose the exit route

HighLevel gives you three real options, plus a fourth that is really a pause button. They are not interchangeable, and the differences show up mostly in what survives.

Transfer to an existing agency. If the client is moving to another agency that already runs HighLevel, this is the cleanest route. HighLevel's transfer guide describes it as moving the whole sub-account, not merging it and not moving part of it: contacts, conversations, supported assets and account history go together. You start it under Manage Client, then Actions, then Transfer Sub-account, using the receiving agency's Relationship Number, and the receiving agency approves it. By default only the Agency Owner can request a transfer.

Eject to a new agency. If the client wants to run HighLevel themselves, an eject turns the sub-account into its own agency, owned by a user you nominate from the sub-account. HighLevel's eject article is worth reading line by line before you promise anything, because a lot does not come through intact. Automations move but are set to Draft. Auth connections are deleted. Facebook, Google and the sub-account's Stripe fields are cleared. Smart Lists do not move. Domains have to be re-added. SaaS has to be disabled and active subscriptions cancelled before the request. At the time of writing, the same article says the nominated user is invited to sign up on the $97 per month plan and that the sending agency earns an affiliate commission on their renewals.

Export and delete. If the client is leaving HighLevel entirely, you export what is theirs and then close the sub-account. This is the route with the most ways to lose something, so steps 4 through 7 matter most here.

Pause. HighLevel's deletion article itself suggests pausing the sub-account if you are unsure. When the client has not decided where they are going, pausing buys time without destroying anything.

Step 4: Export the client's data properly

Contact exports have limits that surprise people, and every one of them is in HighLevel's contact export article:

  • The CSV contains only the columns currently visible in the Contacts table. Use Manage Fields to show every custom field the client needs before you export, or those columns are simply missing.
  • Only the latest note comes through, truncated to 255 characters. Automation history such as past emails and SMS is not included.
  • Exports run in the background and are downloaded from Contacts, then Bulk Actions. Finished files stay available for 30 days.
  • Only admin users can export, and exports are per sub-account.

Tell the client plainly what the CSV is and is not. If they need conversation history, a transfer or an eject keeps it inside HighLevel. A CSV export does not.

Step 5: Move the phone numbers before anything is deleted

This is the step that cannot be undone, so it gets its own heading. HighLevel's deletion article warns that when a sub-account is deleted, all the numbers and A2P campaigns are deleted and cannot be retrieved. A number that has been on the client's business cards for five years, with a registered campaign behind it, is gone.

On a transfer or eject, it depends on the phone provider. Per the transfer guide, if both agencies use LC Phone, numbers move with the sub-account and eligible A2P registration stays with them. If either agency uses Twilio, numbers do not move automatically, and the agencies and the Twilio account owner have to coordinate the move separately. Settle that before you start the transfer, not after the client notices their texts stopped. If you have ever been through an A2P review, you already know why re-registering from scratch is the thing to avoid; we covered the common denial reasons in A2P 10DLC submission mistakes.

Step 6: Domains, email and integrations

Three more things do not travel the way people expect:

  • Domains. The eject article says domains and subdomains are not carried over and must be re-added. If the domain is registered in the client's name, they just repoint DNS. If it is registered in yours, that is a conversation to have now.
  • Email sending. The transfer guide says that for LC Email accounts, the agency-assigned dedicated domain is removed, and that Mailgun or SMTP configurations are removed. Expect a gap in email until the new operator sets sending up again.
  • Integrations. The deletion article tells you to disconnect third-party integrations such as Twilio, Mailgun, Facebook and Google first. On an eject, auth connections are deleted anyway. Either way, list every connected account before you start so the new operator knows what to reconnect.

Step 7: Hand over access and close yours

The client should leave with a list of who and what can reach their account, and you should leave with nothing still pointed at it. That means removing your team's users, revoking any Private Integration Tokens (PITs) you created for the account so no script of yours keeps working against it, and writing down where every remaining key and connection lives without writing down the key values themselves.

If the account is going to another agency, the operator receiving it is going to run something like our 30-minute health check on an inherited sub-account. Hand them the answers before they have to ask. It is the professional way to end the relationship, and it is the kind of exit that earns referrals.

Step 8: Delete last, and only if you must

If the route is export and delete, the deletion is the final step, never an early one. Per HighLevel's deletion article, you start it from Manage Client, then Actions, then Delete, and you have to confirm that you have discussed it with your client and have the authority to do it. Deletion is scheduled with a 24-hour window to undo it from the Sub-Accounts page. After that, contacts, messages, campaigns and settings are gone permanently. Do not rely on the 24 hours as your safety net. It is there for a misclick, not for a forgotten export.

If the client is entitled to the build

Sometimes the agreement says the client keeps the system too. Then you hand them a snapshot rather than the account, and HighLevel's snapshot sharing article gives you four link types: Permanent, One-Time, Agency-Restricted and Sub-Account Restricted. For an offboarding, a One-Time link or a link restricted to the receiving agency's Relationship Number is the sensible choice. A Permanent link works for anyone with the URL, which is fine for a product you sell and wrong for a single client handover. The same article describes an Assets Protected option that keeps applicable assets from being redistributed outside your agency.

Doing it without a checklist on a legal pad

Most of the work above is inventory: what is in the account, who can reach it, which numbers, domains and connections hang off it, and who owns each one. Done by hand, that means clicking through every settings page in the sub-account and hoping you did not miss a connection. It is also exactly the work that gets skipped when a client leaves on short notice.

GHL Command has an offboarding kit for this. From Claude on your own computer, you name the sub-account and it assembles the exit package in one pass: a full contact export, an inventory of what the account contains, an access map of every person and connected account that can reach it, the recorded owner of each asset, a key-rotation checklist, and a plain-language handoff document the next operator can follow. It is read-only, so it changes nothing in the account, and it refuses to run without an explicitly named sub-account, because exporting the wrong client is the one mistake an offboarding tool must not make. Key values are never included; the kit lists where each key lives instead.

It works across every sub-account you manage, so the same exit package is one request away for any client, and your credentials stay on your machine. GHL Command is a flat $97/mo for every sub-account you manage, never billed per account.

A clean exit package for any client, in one request. Flat $97/mo.

Contact export, account inventory, access map, asset owners, key-rotation checklist and a handoff document, built read-only from Claude across every GoHighLevel sub-account you manage.

See how it works

Frequently asked questions

Should I snapshot a sub-account before a client leaves?
Yes, first. A snapshot captures workflows, funnels, calendars, forms, emails, triggers, custom fields and custom values. It does not capture contacts, appointments, conversations, reputation data, Stripe connections or integrations, so it protects your build, not their data. Once the account is transferred or deleted, you cannot take one.

What is the difference between a transfer and an eject?
A transfer moves the whole sub-account to another agency that already has HighLevel, approved by the receiving agency. An eject turns the sub-account into a new agency owned by a user you nominate. On an eject, automations arrive in Draft, auth connections are deleted, domains must be re-added and Smart Lists do not move.

What happens to phone numbers and A2P if I delete the sub-account?
HighLevel says they are deleted and cannot be retrieved. Move them first. On a transfer between two LC Phone agencies, numbers and eligible A2P registration move with the account. With Twilio on either side, the numbers have to be moved separately.

Can I undo a deletion?
Within 24 hours, from the undo link on the Sub-Accounts page. After that it is permanent. If you are unsure, pause the sub-account instead.

Does the contact export include conversation history?
No. Only visible columns, only the latest note truncated to 255 characters, and no past emails or SMS. Files stay downloadable for 30 days.