One table per account: number, line type, who holds it, how calls behave, settings. Numbers can be given to individual reps so each customer keeps talking to the same person, and replies come back to that person. Released numbers are kept rather than deleted.
Also called: phone numbers · number per rep · who owns which line · add a phone number
- 1org_phone_numbers is the routing authority — inbound resolves on a unique index rather than scanning every tenant's provider config
- 2The number is stored globally UNIQUE, because two orgs claiming one number would make inbound routing ambiguous
- 3Released rows are retained: a number that was yours last month can still receive a reply to a message sent before you gave it up
- 4A2P registration stays one-per-builder; the numbers hang off it through the messaging service
- 5Accounts that text through GoHighLevel show their real account line here too, so Settings never claims they have none
The system assumed a business had one phone number, which is the wrong shape for a builder with sales reps who each need their own. Working out which account an incoming text belonged to also meant scanning every account on the platform, so the cost of receiving a single message grew with every new builder signed. Every number an account holds is now an inventory row with a holder, a line type, its call behaviour and its own settings — including numbers that live in a connected CRM, so settings never tell a builder they have no number while they are texting from one.
- One number per account as a structural limit
- Inbound routing that could not scale past a handful of tenants
- Existing working numbers invisible to the settings screen
See it on your own jobs
Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.
or keep browsing features →