Territory Management 2 is not the problem. Territory modeling is. Most TM2 implementations fall over at the third quarterly planning cycle when leadership wants to re-cut territories and the model hierarchy refuses to bend.
If you are modeling territories in 2026, here are the decisions that decide whether your model scales.
The first decision: hierarchy depth
TM2 supports up to 1,000 territories per model and effectively unlimited depth. That doesn’t mean you should use it.
The right hierarchy depth is the SHALLOWEST that lets you express:
- The reporting structure (one node per direct manager).
- The geographic or vertical split needed for assignment rules.
- The roll-up forecast you actually want.
Three levels works for most companies (~500 reps). Four levels for larger orgs. Five is rare and usually a sign of over-modeling.
If you have a level that has exactly one child everywhere, that level is doing no work. Delete it. Re-parent.
The second decision: geographic vs vertical vs hybrid
Three common shapes:
- Pure geographic — territories are countries / regions / postal code ranges. Simple. Falls apart for SaaS with cross-region named accounts.
- Pure vertical — territories are industries / segments. Simple. Falls apart at named-account boundaries between sub-segments.
- Hybrid — territories combine geography and vertical. The right answer for most enterprise sales orgs. Also the hardest to maintain.
Hybrid models need careful primary-axis discipline. Pick one axis as the parent level (usually geography) and one as the child level. Mixing them at the same level produces duplicated leaf nodes and confused assignment rules.
The third decision: account assignment rules
Assignment rules are where most TM2 models silently rot. The pattern that holds:
- ONE rule per territory.
- Each rule expresses the assignment in fields the data owner controls (e.g.
Country,Industry,AccountSegment__c). - Rules should not reference free-text fields (“Description contains ‘enterprise’”).
- Rules should not reference owner — circular.
Write rules like:
Territory: NAMER-ENT-WEST
Filter:
Account.Country IN ('United States', 'Canada')
AND Account.AnnualRevenue >= 1000000000
AND Account.Segment__c = 'Enterprise'
AND Account.OperatingRegion__c = 'West'
If you cannot express your assignment in these terms, your account data is the problem, not your territory model. Fix the data first.
The fourth decision: account sharing model
TM2 assigns accounts to territories; territory members get sharing. The sharing axis options:
- All accounts in territory — every member sees all accounts. Highest visibility, lowest exclusivity.
- Only owned accounts — members see only accounts they own. Low cross-rep visibility.
- Custom by role — members in the territory get a profile-based slice.
For most enterprise B2B orgs, “all accounts in territory” + an exception list of named accounts is the right combination. Reps see the whole patch, named-account holders maintain exclusivity.
The fifth decision: forecast hierarchy alignment
The territory hierarchy IS the forecast hierarchy in TM2. Decisions that constrain forecasting:
- Forecast manager must be the territory parent’s
ForecastManager. - A user cannot be in two territories that both roll up to a forecast (without splitting attribution).
- Quota allocation respects the hierarchy.
If your forecast hierarchy diverges from your territory hierarchy, you have a model problem. Reconcile before activating.
Code: bulk territory assignment validation
After every model activation, validate that no account fell off the assignment.
public class TerritoryAssignmentAudit {
public static List<UnassignedAccount> findUnassigned() {
List<UnassignedAccount> unassigned = new List<UnassignedAccount>();
for (Account a : [
SELECT Id, Name, BillingCountry, Industry, AnnualRevenue
FROM Account
WHERE Id NOT IN (
SELECT AccountId FROM ObjectTerritory2Association
WHERE Territory2.Territory2Model.State = 'Active'
)
AND IsCustomerPortal = false
LIMIT 5000
]) {
unassigned.add(new UnassignedAccount(a));
}
return unassigned;
}
public class UnassignedAccount {
public Id accountId; public String name;
public UnassignedAccount(Account a) {
this.accountId = a.Id; this.name = a.Name;
}
}
}
Run this within an hour of activation. Unassigned customer accounts are revenue that nobody owns.
The annual re-cut problem
The hardest test of a TM2 model is annual planning when leadership wants to re-cut territories. Two patterns:
Pattern A: model copy and replace. Create a new Territory2Model in Planning state, edit, activate. Salesforce migrates assignments. Clean, but breaks integrations that hard-code territory IDs.
Pattern B: in-place edit. Edit assignment rules on the active model. Re-run assignment. Faster, but riskier — there’s no rollback.
For annual planning, use Pattern A. For mid-cycle adjustments (single territory split), Pattern B with a documented rollback plan.
Integration considerations
If your downstream systems (HCM for comp, BI for reporting) consume territory data, version-stamp every external feed with the model name. When you cut over to a new model, downstream systems need to know to refresh their joins.
SELECT Id, Name, Territory2Model.Name, Territory2Model.State
FROM Territory2
WHERE Territory2Model.State = 'Active'
Pipe this through the morning sync.
Permission sets for territory admins
Don’t put territory admins on the System Administrator profile. Build a TerritoryModelAdmin permission set that grants:
ManageTerritory2ModelEditonTerritory2andTerritory2TypeEditonAccount(needed for assignment rule maintenance)
And nothing else. Goes back to the permission set group vs muting discipline — small vertical slices.
UX note
On the Account record page, surface the current territory and a “View territory members” component. Reps need to know who else can see their account. Surfacing it reduces “who’s working this account?” Slack messages by half in our last engagement.
Bottom line
- Pick the shallowest hierarchy that expresses your reporting and forecast needs; three levels covers most orgs.
- Hybrid geographic + vertical models scale further than pure-axis models but need disciplined primary-axis selection.
- Express assignment rules in data-owner-controlled fields; never in free text or owner state.
- Run the unassigned-account audit within an hour of every activation.
- For annual re-cuts, copy-and-replace; for mid-cycle, in-place edits with a rollback plan.