
GoHighLevel for Agencies Running Outbound: The Infrastructure Playbook
Managing outbound calling across 15 GHL sub-accounts is a different problem than managing one. Caller IDs multiply, costs aggregate, and a configuration error in one sub-account affects all the campaigns running under it. Here is how to build the infrastructure layer that makes agency-scale outbound predictable.
Why Agency-Scale Outbound Breaks the Default GHL Setup
The default GoHighLevel telephony setup — LC Phone, one Twilio account, per-sub-account number provisioning — works cleanly for a single business. It starts to fracture at agency scale for four reasons:
Billing aggregation. Every sub-account's LC Phone usage generates a separate billing line. An agency managing 20 active sub-accounts receives 20 per-minute billing streams with no consolidated view of total calling cost. When a sub-account's campaign runs hot, the billing surprise is discovered at invoice time.
Number management. LC Phone numbers are provisioned per sub-account. An agency with 20 sub-accounts each running 3 outbound agents has 60 numbers to track, monitor for spam flagging, and rotate when reputation degrades. At that volume, there is no tooling — you are checking each number manually.
No cross-sub-account routing control. If a sub-account's primary DID gets spam-flagged mid-campaign, there is no fast path to route that sub-account's calls through a clean number without going into the GHL dashboard and manually changing the calling configuration.
Margin compression. An agency that marks up calling services to clients needs to know the underlying cost with precision. Per-minute billing with Twilio's rate card, passed through GHL's LC Phone layer, leaves a margin that is hard to predict month-to-month, especially for clients with variable call volumes.
The Architecture: One Trunk, Many Sub-Accounts
The alternative: provision a single SIP trunk with a seat count that covers the total outbound agents across all sub-accounts, and connect each GHL sub-account to the same trunk via BYOC.
This consolidates billing into one flat monthly invoice. At $99/seat/month (or the promotional rate for new accounts) across, say, 30 outbound agents covering multiple sub-accounts, the monthly cost is fixed regardless of total minutes dialed. The per-minute counter disappears.
Operationally, this means:
- One UnlimCall account manages all seat credentials
- Each GHL sub-account's BYOC configuration points to the same SIP gateway domain, with sub-account-specific username and credential pairs
- Each sub-account has its own dedicated DID provisioned to the UnlimCall account
- Call completion events fire per-call to the sub-account's configured webhook endpoint
The GoHighLevel SIP trunk connection guide covers the per-sub-account BYOC configuration steps.
Caller ID Management at Agency Scale
Local presence calling — presenting a DID in the same country (or area code region) as the prospect — is the primary driver of answer rates in outbound campaigns. For an agency managing clients in multiple countries, this means provisioning local DIDs for each client's target market.
UnlimCall provisions caller IDs on demand across 33 live markets. There is no shared pool. When a client needs French DIDs for a campaign targeting Paris-region prospects, the provisioning flow takes minutes — request the +33 DID in the portal, receive it, assign it to the relevant sub-account's seat credential.
For agencies running A/B tests on caller IDs — comparing answer rates between area-code-local numbers and toll-free numbers, or between two different local prefixes — multiple DIDs can be provisioned per sub-account and assigned to different campaign groups within GHL's workflow engine.
See the full market coverage for all 33 available countries.
Flat-Rate Math for Agency Resale Models
An agency that purchases at $99/seat/month and resells calling services to clients has a simple margin calculation:
- Underlying cost: $99/seat/month per active outbound agent
- Client billing: whatever the agency charges per seat or per minute
- Margin: the spread between $99 and the client rate, minus any markup for management overhead
The daily rate for active-seat billing is $4.95 — that is $99 ÷ 20 working days. For clients who run campaigns for only part of the month (a common pattern in event-driven or seasonal outbound), the agency can provision seats for the active campaign period and deprovision afterward, keeping the cost proportional to actual usage.
This is materially different from per-minute billing, where a single high-volume campaign day can produce a cost spike that compresses the month's margin to near zero.
Monitoring Sub-Account Calling Health
At 15 or 20 active sub-accounts, monitoring must be automated. Four metrics to watch per sub-account:
Answer rate. If a sub-account's answer rate drops more than 15 percentage points week-over-week with no change in contact list, the most likely cause is DID reputation degradation. The response: provision a fresh DID from the pricing page and update the BYOC configuration.
Call completion rate. If calls are initiating (SIP INVITE sent) but not completing (no answer timestamp in the webhook payload), the issue is upstream — SIP credential misconfiguration, NAT traversal failure, or a routing problem at the trunk level.
Webhook delivery rate. If call completion events are not posting to the CRM at 100% (minus expected network failures), investigate the webhook endpoint. A CRM sub-account with an expired SSL certificate or a changed webhook URL silently drops events.
Cost per connected call. For flat-rate billing, this is (monthly seat cost) ÷ (number of connected calls in the month). As agents dial more efficiently, this number falls. It is a clean efficiency metric that works regardless of per-minute pricing.
Scaling Seat Count as Agency Client Base Grows
The seat count in the UnlimCall portal represents the number of concurrent outbound agents across all connected sub-accounts. Adding a new client with 5 outbound agents means adding 5 seats to the account — the unit cost stays flat, the billing scales linearly.
For new client accounts still in their first month, the LAUNCH50 promotional rate applies: 50% off the first month, making the introductory cost $49.50/seat for the first billing cycle. This makes the trial period economics clean — a client can evaluate the infrastructure at half the ongoing cost before committing to the full rate.
Takeaways
- Agency-scale outbound breaks LC Phone's default model through billing fragmentation, number management complexity, and lack of cross-sub-account routing control.
- One SIP trunk with seat-based billing consolidates all sub-account costs into a single predictable invoice.
- DIDs are provisioned on demand across 33 markets — no pool allocation, no wait, no shared numbers between sub-accounts.
- The daily active-seat rate of $4.95 makes campaign-period provisioning economically clean for seasonal or event-driven clients.
- Monitor four health metrics per sub-account: answer rate, call completion rate, webhook delivery rate, and cost per connected call.
Build the Infrastructure Once, Plug In Clients
The pricing page covers multi-seat provisioning. The network documents all 33 available markets for local presence DIDs.