A sub-account is a single workspace inside a GoHighLevel agency. Each one has its own contacts, conversations, custom fields, custom values, pipelines, workflows, calendars, phone numbers and users. Most agencies give each client one sub-account. HighLevel's older name for it is "location," and the API still uses that word, which is why you'll see locationId in URLs and API calls.
Sub-accounts don't share data with each other. A custom field created in one doesn't exist in another unless you create it there too or load it with a snapshot.
In practice
You open a client's sub-account from the agency view's account switcher. Everything you configure under the sub-account's Settings (custom fields, custom values, users, phone numbers, integrations) applies to that client only. When you onboard a new client, the usual pattern is to create the sub-account, load your snapshot, then add the client's users, connect their phone number and finish A2P registration.
Because each sub-account is separate, agencies with dozens of clients end up repeating the same setup and lookups many times, and settings slowly drift apart between accounts.
Where it shows up in RGS Tools
RGS Tools is priced per agency with unlimited sub-accounts. You can connect the whole agency once through the marketplace app, or connect one sub-account with a Private Integration Token, then pick a sub-account from a list in each tool. Sub-account compare shows every field that exists in one sub-account but not another, and copy to another sub-account in Backup & Insights pushes contacts and their documents into a different sub-account. Power-Ups can be switched on everywhere or only in the sub-accounts you choose.