Territory planning happens once a year in a spreadsheet nobody can reproduce. Here is the model behind a planner that can, the prompts to build it, and what it takes to run it.
Your private status link is on its way to your inbox.
A quota and territory planner is four parts: an account universe with the attributes you segment on, territories defined as rules rather than lists, quota tied to the territory rather than the person, and a comparison view. Most plans fail on the third point: quota gets assigned to reps, so when someone leaves the number goes with them and the territory is left with nothing.
Territory planner
1,842
Accounts in scope
12
Territories
3
Matched twice
47
Matched by nothing
| Territory | Accounts | Potential | Quota | Coverage |
|---|---|---|---|---|
| EMEA Enterprise | 142 | 18.4M | 4.20M | 4.4x |
| EMEA Mid-market | 318 | 9.10M | 2.60M | 3.5x |
| NA Enterprise | 156 | 24.7M | 5.80M | 4.3x |
| NA Mid-market | 402 | 11.2M | 3.90M | 2.9x |
| APAC | 211 | 6.30M | 2.40M | 2.6x |
You run revenue operations or sales strategy. You already know your segments and your capacity model. What you want is to test three versions of a plan in an afternoon and show the leadership team what each does to coverage.
What a planner actually does with it, in order. Each step depends on the one above it.
Upload a CSV of every account you could sell to, with the attributes you segment on. The app reports which columns it did not recognise instead of quietly dropping them.
Each territory is a set of conditions over those attributes rather than a hand-picked list, so new and changed accounts assign themselves. A short exceptions list handles the handful that have to be placed by hand.
The app lists accounts matched by two territories and accounts matched by none. Both are invisible in a spreadsheet and both surface in month three as a rep complaint.
Enter base, retention, expansion and new business per territory. Quota is derived from those, and the coverage multiple flags any territory whose addressable base cannot support its number.
Compare territories on account count, potential value, existing base and travel load at once. The goal is not identical territories, it is knowing where the plan is uneven before a rep tells you.
Put the proposed plan next to the live one, see which accounts moved and what it does to each rep's number, then export the approved version for the CRM.
A territory planner is not an account list with an owner column. It is four parts, and the second is what keeps it alive after launch.
Every account you could sell to, with the attributes you segment on: industry, employee count, revenue band, region, existing customer or not, current spend, and a potential value estimate.
Each territory defined by conditions over those attributes, plus a named exceptions list for the handful of accounts that must be placed by hand. Rules first, exceptions second, never the reverse.
Quota derived from the territory: existing base, expected growth, expected new business, and a coverage multiple. Attached to the territory, with the rep assigned to it separately.
Two plan versions side by side, showing accounts, potential value, existing revenue and quota per territory, plus what moved between them. This is the artefact you take into the leadership meeting.
These prompts start from a Helix project, which is what handles sign-in, credentials and hosting. Start with Helix
Paste these into Claude Code, Codex or Cursor in order. Each one leaves you with something that runs, so you can stop after any step.
Get the universe in, and slice it in a way that survives new accounts.
In this Helix project, build me a territory planner.
Start with the part I argue about most: which accounts sit in which
territory.
I will upload a CSV of every account we could sell to. It has the
attributes we actually segment on: industry, employee band, revenue band,
country, region, whether they are already a customer, what they spend
today, and an estimate of what they could be worth. Read the headers and
tell me which ones you did not recognise rather than dropping them
quietly.
Then let me define a territory as a rule over those attributes, not as a
list of account names. "EMEA, enterprise band, not already a customer"
should be a territory I can write once and have new accounts fall into on
their own. I also need a small exceptions list for the accounts that have
to be placed by hand, and every exception has to carry a reason.
Show me, per territory: how many accounts, what they are worth today, and
what they could be worth.
Two lists matter more than anything else on this screen. Accounts matched
by two territories, and accounts matched by none. Put both where I cannot
miss them.
I sign in through Helix, so do not build a login page. Read the signed-in
user from the runtime. If you need to reach Salesforce later, tell me and
I will create the connection in my workspace rather than putting a key in
the code. Worth knowing. The two mismatch lists are the highest-value thing here. In a spreadsheet plan they surface in month three, as a rep complaint, and by then the plan is live.
Derive the number instead of negotiating it, and keep it when a rep leaves.
Now add quota.
For each territory I want to enter four things: the existing annual base,
what we expect to retain, what we expect to expand, and what we expect to
win new. Derive the quota from those and show every input separately, so
when someone argues with the number they have to argue with a specific
assumption rather than the total.
Add a coverage multiple: the territory's total potential value divided by
its quota. Flag anything below a threshold I set. That is a territory
being asked for a number its account base cannot support, and it is a
planning error rather than a performance one.
Keep reps separate from territories. A rep is assigned to a territory
with a start date and a ramp, and the quota belongs to the territory. When
somebody leaves I want the gap to stay visible on the plan instead of
disappearing with them.
Roll the quota up by segment, by region and for the whole plan, and let me
compare the total against the number I have been given. Answer the question every rep asks the day the plan is announced.
Add a view that answers "is my territory fair".
Rank every territory side by side on account count, total potential,
existing base, quota, coverage multiple, and quota as a multiple of the
base. For each of those show how spread out the territories are, so I can
see at a glance which dimension is the unbalanced one.
Include timezone spread and country count too. Account counts hide travel
and coverage load, and that is the part reps actually feel.
Highlight the three best and three worst territories on each dimension.
I am not trying to make every territory identical. I am trying to know
exactly where the plan is uneven before a rep tells me in a QBR. The reason to build this rather than open a spreadsheet.
Make plans versioned.
Every plan is a named version with a status: draft, proposed, approved,
live. Let me clone a version so I can experiment without touching the
live plan.
Then give me a comparison of any two versions: which territories were
added or removed, which accounts moved and where they went, and how each
territory's quota changed.
The screen I care about most is per rep: what they lose, what they gain,
and what it does to their number. That is the conversation the plan has to
survive, and I would rather have it with the data in front of me.
Let me export an approved version as a CSV for the CRM load, and record
which version was exported and when. Worth knowing. The per-rep impact view is what makes a territory change explainable. Without it, every reassignment reads as a punishment.
The step that turns a working prototype into something with your data in it.
Now connect it to the systems we actually run, so it works on real data
rather than the rows you seeded.
Anything in angle brackets is a placeholder. Swap it for whatever we use
instead, and have the app name the connection it wants rather than assume
a vendor, so changing my mind later is a config change and not a rewrite.
<Salesforce>. Read the account universe with the attributes you segment
on, then export an approved plan back.
<NetSuite>. Read current spend per account, which is what quota is
actually built from.
<Workday>. Read who is in seat, their start date and ramp, so assignment
reflects reality.
<a CSV export>. Import the account list to start, before any of the above
is connected.
<Snowflake>. Read historical performance by account and segment, which is
what a coverage multiple is checked against.
<Looker>. Feed coverage and balance into the planning dashboard leadership
already reviews, so the plan is argued from one view.
<Okta>. Resolve reps and managers, so assignment reflects the actual team.
Only write where I have said to write. Everything else is read only.
Do not write a key, a token or a connection string anywhere in the code,
and do not ask me to paste one. Tell me which connections you need and I
will create each as an authentication in my Helix workspace. Reference
them by alias. Worth knowing. Every name in angle brackets is a placeholder for whatever you run. Helix holds the credential as a workspace authentication, so the app references an alias and never the secret itself.
The last step of every build: a URL, and the right people on it.
Deploy my app. Worth knowing. Your assistant runs helix deploy underneath and the app comes back as a URL. Before you send it round, open the project in the Helix console and set Access Control, so planning stays with the people running it until the plan is published.
Planning happens outside the CRM and then has to land in it. Both halves need a connection.
Salesforce
Read the account universe with the attributes you segment on, then export an approved plan back.
NetSuite
Read current spend per account, which is what quota is actually built from.
Workday
Read who is in seat, their start date and ramp, so assignment reflects reality.
A CSV export
Import the account list to start, before any of the above is connected.
Snowflake
Read historical performance by account and segment, which is what a coverage multiple is checked against.
Looker
Feed coverage and balance into the planning dashboard leadership already reviews, so the plan is argued from one view.
Okta
Resolve reps and managers, so assignment reflects the actual team.
Each line says whether the app reads, writes or both. Anything not described as writing should be read only.
Named systems are the ones most teams actually run, not a list of the only ones that work. Swap in whatever you use.
Each connection is an authentication in your Helix workspace, referenced by alias. The app names the connection it wants and never holds the credential, so nothing here ends up in your code and any of it can be rotated or revoked without a redeploy.
The build gets you a working planner. It holds account data, decides who earns what, and produces the plan a sales org runs on, so it needs to be run properly.
AI Deployment
One command takes the app from your assistant to a live address, so the people who need it get a link rather than instructions for running it locally.
App Security
Quota and territory data is sensitive across a sales org. SSO means people sign in with their existing account, and access is scoped so planning stays with the people running it until a plan is published.
App Security
Loading accounts and pushing an approved plan back needs real CRM access. Granting it to the app rather than pasting a key into it means it can be rotated or revoked without a redeploy.
App Registry
Every app carries a named owner and an entry IT can see, so the tool does not become nobody's problem when the person who built it changes role.
Cost Management
Per-app spend visibility, with budgets and caps, so an internal tool cannot quietly become a line item nobody can explain.
It defines territories as rules over your account universe, derives quota from what each territory contains, and lets you compare plan versions before committing. Its main job is making the trade-offs in a plan visible before it is announced.
Rules, with a small named-exception list on top. A rule assigns new and changed accounts automatically. A hand-picked list is out of date the week after you publish it, and nobody can reconstruct why an account sits where it does.
The territory. When quota follows the person, a departure takes the number with it and the coverage gap disappears from the plan. Attaching it to the territory and assigning reps separately keeps the gap visible.
Compare territories on several dimensions at once: account count, total potential value, existing base, quota as a multiple of that base, and coverage multiple. A plan balanced on account count alone is usually badly unbalanced on value.
Total addressable potential in a territory divided by the quota assigned to it. Below a threshold you set, it means a territory is being asked for a number its account base cannot plausibly support, which is a planning error rather than a performance one.
Yes. The prompts here are written for Claude Code, Codex or Cursor and stage the build from a CSV import. The judgement calls are your segmentation attributes and your coverage threshold.
Sales and RevOps
Calculate commission from the plan rather than from a spreadsheet nobody can audit, show every rep how their number was reached, and handle the disputes as data. Prompts to build it, and what it takes to run it.
Sales and RevOps
Find the opportunities distorting your forecast, name who owns each fix, and make hygiene a short weekly list rather than a quarterly clean-up. Prompts to build it, and what it takes to run it.
People
One record per role from request to filled, with approval, budget, and a status that finance, recruiting and the hiring manager all read the same way. Prompts to build it, and what it takes to run it.
Sales and RevOps
Register referrals, protect them for a defined window, show partners the status of their own deals, and calculate what you owe. Prompts to build it, and what it takes to run it.
Last reviewed September 2026.
Helix is the governed runtime for AI-built apps. Deploy what you build, put SSO in front of it, connect it to your systems with managed credentials, and give it a named owner.
Your private status link is on its way to your inbox.