Sales planning with an assistant built in
Territories, quotas and capacity. One plan, on live data.
ZoneCraft syncs your CRM, geocodes plain addresses, and carves balanced territories on a real map. The same plan carries the quotas: allocated down the territory tree, assigned to the people who cover it, checked against capacity, tracked against actuals. The assistant drafts and proposes, you apply, with every change on record and a previewed publish back.
- Single-tenant: your own instance and database
- Assistant on your own model key: Anthropic or OpenAI
- US, Canada, Europe and world boundaries built in
- Tested at 300,000 records and 2,000 territories
- OpenID Connect single sign-on and SCIM provisioning
- 300krecords and 2,000 territories in one plan, tested end to end across metrics, health checks, rules, the optimizer and quota allocation. No computation caps rows.
- 45,169boundaries built in across eleven standard sets: the US, Canada, world countries, regions and states, and Europe's NUTS levels, each with filterable attributes.
- 6ways to allocate a quota: proportional to any basis, growth over a prior plan, equal, carried forward, share of a market, or proportional to capacity. Floors, caps and locks hold.
- 0changes the assistant makes on its own. Every proposal waits for your Apply and is logged as applied by the assistant.
The gap
Built for the moment your current territory tool stops being enough.
Most teams outgrow their current tool the same way: the data has to arrive clean, the model is a frozen copy, and nobody can say exactly what changed. ZoneCraft was designed around those seven gaps.
Edits leave no trace, or at best a version to roll back to. "What exactly changed, and what did it do to each territory?" has no answer.
Every change is an event, and analyzedActor, time, before and after, written in the same transaction as the change. Diff any two states, read the impact per territory, export it, or restore a snapshot.
Records must arrive pre-geocoded, so the data team owns the map.
Plain addresses are enoughGeocoding runs inside the data pipeline, once, and is cached by address. Rows that already carry coordinates are used as they are.
The planning set is an export. By the time the plan is done, the data is a quarter old.
Sync, not snapshotDelta pulls on a modification-timestamp watermark keep datasets current, from Salesforce or whichever system your data lives in. Record identities stay stable, so assignments survive every refresh.
A handful of scenarios at most. Beyond that, what-ifs mean duplicated projects and copies of copies.
Parallel alignmentsClone an alignment, run rules or the optimizer, lock what must not move, and compare outcomes territory by territory before anything ships.
Publishing is a leap of faith: no preview of what will be written, no per-record log afterwards.
Publish is a reviewed jobField-mapped writes with a destination preview, one run per job, a per-row audit log, and an approval gate when the plan requires one.
The decisions about a territory happen in email threads and chat channels, away from the map. The discussion cannot be found later, and the person who owns the territory hears about it last.
Discussion where the work isTeam chat per plan and per alignment, and comment threads on any territory, record, boundary or quota plan. Mention a colleague and it lands in their inbox; resolve the thread when the change is made. Approved scopes stay open for discussion.
Quotas are set in a workbook after the territories are done, from a copy of the numbers. When an account moves mid-year its quota stays where it was, and nobody can say what a seller's number is based on.
Quotas on the territory treeA quota plan attaches to the alignment: allocate from the plan's own metrics, assign the result to the people who cover each territory, check it against headcount and track it against actuals. When accounts move, the drift check finds the quota they carried and files the adjustments.
Sales planning
Quotas, people and headcount, planned on the territories you just drew.
A quota plan attaches to an alignment. Its territory tree is the allocation tree, its metrics are the basis, and its teams, history and approval flows apply unchanged. Versions, adjustments, actuals and acknowledgments stay on the same record as the territories.
| Territory | Won FY26 | Quota FY27 | Q1 | Q2 | Attainment |
|---|---|---|---|---|---|
| East | 8.4M | 12.4M | 2.73M | 2.98M | 37% |
| Northeast | 2.9M | 4.3M | 950k | 1.03M | 41% · ahead |
| Southeast | 5.5M | 8.1M−500k pending | 1.78M | 1.94M | 35% · behind |
| Central | 2.3M | 3.2M | 700k | 770k | 44% · ahead |
| West | 2.8M | 4.4M | 970k | 1.06M | 37% |
| Total | 13.5M | 20.0M | 4.40M | 4.80M | 38% |
- Allocation, six ways
Proportional to any blend of plan metrics, attributes or linked data, growth over a prior plan, equal, carried forward, share of a market basis, or proportional to capacity. Floors, caps and growth bands hold, locked cells keep their value, and the preview shows every territory before and after with the outliers flagged.
- People and coverage
Sellers cover territories with dates, shares and overlays; ramps and mid-year transfers prorate their quota. Person-level overrides and adjustments, a compensation export, and a My quota page where each seller sees and acknowledges their number.
- Capacity and headcount
Roles with productivity, ramp schedules and attrition; seats filled, open or backfill per territory. Ramped capacity is compared with the quota per period, hire-by dates and late hires are flagged, and an allocation can follow capacity.
- Actuals and attainment
Actuals come from the plan dataset or a linked dataset, attributed to the territory that held the account when the quota was set. Attainment, pace and behind-pace flags per territory and per person, and a past year's shape to split annual numbers.
- Bottom-up, with guardrails
Managers propose their own numbers cell by cell; a guardrail band blocks or routes changes outside the allocated baseline. Adjustments on an approved plan are proposed, decided and logged, and the drift check files them when accounts move.
- Versions, approvals and design targets
New versions clone or carry forward; compare up to four side by side and keep one. The same approval flows sign off a quota plan and lock its base. Approved quotas can become design targets, so the optimizer balances territories to them.
Assistant
An assistant that knows territory and sales planning and never acts on its own.
Open it on any page and ask in plain language. It reads only what you can read, drafts what you would otherwise build by hand, and turns changes into proposals you apply with one click.
Six territories, 5,888 records. Record counts sit within 4% of the mean except Southeast, which is 38% above it. 212 records are unassigned and 9 are not located. Two counties are locked. Rules last ran yesterday, and nothing is in approval.
Drafted. It would match 412 records; 37 of them move out of Central.
| Check | Result |
|---|---|
| Matches | 412 |
| Would move | 37 |
| Locked records affected | 0 |
- Analysis on demand
Alignment health, territory metrics, why a record landed where it did, dataset field profiles, snapshot diffs, rule previews, quota plan fairness, drift and capacity, from the page you are on.
- Drafts you open in the editor
Formulas checked for syntax, assignment rules with dry-run impact, recipe pipelines, hierarchies, metrics, table filters and import mappings, validated against your real fields.
- Proposals you apply
Record moves, territory changes, owners, locks, rule runs, optimizer dry runs, quota allocations and cells, adjustments, coverage and seats arrive as cards with the exact changes and their impact. Nothing runs until you click Apply.
- Carving
Ask for a balanced split or merge over county or ZIP units. Every territory stays one connected piece, locked units never move, and a disruption budget caps the number of moves.
- Never more than you
Per-user access: none, suggest or edit. Every request runs as you, through the same permissions, plan teams and approval locks. Publishing, syncing, deleting, restoring and settings are out of its reach by design.
- Your model, your key, your budget
Anthropic or OpenAI per instance, a model picker with list prices, token budgets per user and per month, and usage reports by user, request type and plan. Optional masking replaces names, contacts and record ids before anything leaves your instance.
Product
Data in, boundaries drawn, plans governed. One workspace, read like a map legend.
Three groups of capabilities, in the order a plan actually uses them.
Data in
- Sync from where your data lives
Salesforce connects today: pick objects and pre-filters, pull deltas on a watermark, keep identities stable across syncs, on a schedule if you want. Other CRMs and systems are configured per instance.
- Spreadsheets, guided
A five-step wizard maps columns, declares types, and picks an upload mode: replace, add, override, or fill gaps. It remembers the setup for next month's file.
- A real pipeline, visually
Join, filter, aggregate and compute across sources on a node canvas, and preview the rows after any step before a run. Outputs become planning-ready datasets.
- Pipelines the assistant drafts
Describe the dataset you need; the assistant drafts the recipe graph against your real fields and opens it for you to review and run.
- Geocoding built in
Plain addresses are geocoded at the pipeline output, once, and cached by address. Rows that already carry coordinates are used as they are.
- Records at scale
300,000 records and 2,000 territories in one plan, tested end to end. Metrics, health, quotas and publishing read every record; locked rows stay put through every automated pass.
- Linked datasets
Join bookings, pipeline or market data to the plan at any level: by account, by owner, by territory or by boundary. Linked rows feed actuals, allocation bases and per-territory roll-ups, with a match report per link.
Boundaries
- Standard geographies, built in
Eleven sets ship with every instance: US states, counties and ZIP areas, Canadian provinces and FSAs, world countries, UN sub-regions and states and provinces worldwide, and Europe's NUTS 1 to 3, each with filterable attributes. Other regions are added from their official boundary data.
- Your data as geography
Turn any ZIP or postal list into real polygons, matched by code, alias, or name. Leading zeros the spreadsheet ate are recovered.
- Custom boundaries from your parameters
Generate each territory's boundary from its center with the parameters you set: straight-line radius or road-network drive time, the reach in minutes or miles, and per-territory overrides where the market demands it.
- Overlap resolution, five ways
Nearest center, priority order, balance by metric, choose per pair, or shrink to tangency, plus mark-as-shared. Continuity is guaranteed: no orphaned islands.
- Carving proposals
Ask the assistant for a balanced split of a territory; it proposes contiguous parts over county or ZIP units, with locked units fixed, for you to apply.
- Select like a map, act like a table
Rectangle, circle, lasso, or click-pick boundaries and their records together, then assign, lock, or export the whole selection.
Balance & govern
- Detailed change analysis
Every change is recorded with actor, time and before-and-after state. Diff any two alignments or snapshots, read the impact per territory, export it, or restore.
- Metrics that roll up honestly
Sums, weighted averages and distinct counts roll up the hierarchy correctly. Custom fields, manual, joined, or formula-computed, behave like any other column.
- Rules and optimizer, preview first
A dry run shows each territory before and after, with metric deltas. Apply only from the preview, and manual assignments always win.
- Teams and scoped editing
Plan teams with admins and members. Per alignment, read or edit, scoped to selected territories and their subtrees; boundary edits and quota access are separate permissions.
- Approval flows you design
Build approval templates with the steps you need. Submit a whole alignment or a subset of territories, set due dates, review the exact diff, and lock what is approved. The same flows sign off quota plans. Reversals are on record too.
- Chat and comments, in the plan
Team chat per plan and per alignment, comment threads on territories, records, boundaries and quota plans, mentions and replies, and an inbox that also lists the approvals waiting on you.
- Publish back, reviewed
Publish templates map territories to standard or custom fields in Salesforce or the system you connected. Each job previews the destination impact, runs once, and keeps a per-row audit log.
How a plan ships
Eight steps from a raw account list to territories in your CRM and a quota on every seller.
- 01Connect
Connect Salesforce or the system your data lives in, or upload a spreadsheet. Pick the objects and filters that matter.
- 02Shape
Join and clean the data in a recipe, or ask the assistant to draft it. Addresses are geocoded at the output, once.
- 03Carve
Assign boundaries or records, run rules, let the optimizer or the assistant propose the rest, lock what must stay.
- 04Compare
Clone alignments, take snapshots, and read the impact per territory. Discuss the moves in threads on the territories themselves.
- 05Approve
Submit the whole alignment or a subset through a flow you designed, with due dates and a reviewable diff.
- 06Allocate
Attach a quota plan to the approved alignment, allocate from its own metrics with floors, caps and a period split, and review the growth per territory.
- 07Staff
Cover each territory with people, dates, shares and ramps. Check capacity against the quota per period, and let every seller acknowledge their number.
- 08Publish
Preview every write, run the job once, and keep the per-row log next to the plan. Actuals then roll in, and attainment shows per territory and per person.
Change analysis
Every change on record, and every change explained.
Territory state is a projection of an append-only event log, so history, diffs, per-territory impact, snapshots and restore are the same mechanism, not features bolted on later.
| When | Actor | Kind | Subject | Change |
|---|---|---|---|---|
| 14:18:45 | drift check | quota | 2 accounts · 410k | Northeast Southeast |
| 14:02:11 | you assistant | boundary | Berks County | Southeast Northeast |
| 14:02:11 | rules engine | record | Keystone Dental | unassigned Southeast |
| 13:41:56 | m.ortiz | lock | Allegheny County | locked in West |
| 13:15:02 | approval | step 2 of 3 | Q4 East realignment | approved · due Sep 12 |
| 12:58:40 | optimizer | record | 38 records | Central Northern Tier |
| 12:30:07 | you | snapshot | Before optimizer run | captured |
- Searchable, diffable, exportable
Filter by actor, kind, territory, quota plan or date, or show only the changes applied by the assistant, by a schedule or through an API token. Expand any row to the before-and-after state. Export the lot as CSV for the audit file.
- Impact, territory by territory
Compare any two alignments or snapshots and read what moved: records per territory, boundary deltas, metrics before and after. Restore a snapshot when a what-if went the wrong way.
- Approvals with reversal
Approved territories lock. Administrators can reverse an approval for the whole alignment or selected territories, and the reversal itself is on record.
Platform
Your instance. Your database. Nobody else's data in it.
ZoneCraft is single-tenant by design: every customer runs a separate stack with its own API and its own spatial database. Isolation is a deployment fact, not a row in a table.
- Tenancy
- One stack per customerOwn API, own PostgreSQL + PostGIS database, provisioned from a blueprint
- Sign-in
- OpenID Connect with any identity provider, or email and passwordOkta, Entra ID, Google, Cloudflare Access, Auth0, Keycloak or Salesforce; roles mapped from a claim. Roles: admin, planner, contributor, viewer; plan teams on top
- Provisioning
- SCIM 2.0 users and groupsCreate, update and deactivate from your identity provider; groups map to roles; nothing is hard-deleted through provisioning
- API
- Tokens that act as a named userEvery route that person could call, under their permissions, marked as API on the change record; expiry and revocation per token
- Schedules
- Syncs, pipelines, geocoding, actuals and publish runs on a cadenceHourly to monthly or one-shot, in your time zone; each run counts as its creator, with the same locks and permissions as a click
- Edge
- Cloudflare in front of every instanceTLS, WAF and DDoS protection; HTTPS only
- Secrets
- Connection credentials encrypted at restSalesforce tokens and every other connector secret, under a per-instance key; credentials never leave the instance
- Maps
- Mapbox maps and geocodingPermanent geocodes cached by address, so refreshes are free
- Boundaries
- US, Canada, Europe and the world built inEleven standard sets, 45,169 boundaries with filterable attributes, restored at first boot; other regions loaded from their official boundary data
- Heavy work
- Background job queueSyncs, geocoding, drive-time shapes, quota allocation, actuals refreshes and publish runs queue, retry and report progress
- Scale
- Tested at 300,000 records and 2,000 territoriesOne plan with 2,000 sellers covering the tree and a quota allocated over every territory; no computation caps rows; instances are sized per customer
- Operations
- Error tracking and uptime monitoringPer-instance environments; scheduled backups sized per customer
- Assistant
- Anthropic or OpenAI, on your own keyPer-instance switch, per-user access, token budgets per user and per month, usage and cost reports
- AI data
- Masking before the model, if you want itNames, contacts and record ids leave as placeholders; territory names and metrics stay readable; off by default
- Collaboration
- Chat, comments and notifications stay in your instanceNo third-party chat service; mentions, replies and comments on territories you own arrive in the in-app inbox
How it compares
The honest matrix. Categories, not names.
A side-by-side view of the capabilities that decide a territory project, across the kinds of tools teams typically use.
| Capability | ZoneCraft | CRM-native territory module | Desktop mapping suite | Spreadsheets & slides |
|---|---|---|---|---|
| Change analysis | Every edit on record with before and after; diffs, per-territory impact, restore | Alignment history with restore; no per-change diff or impact analysis | Save-file versions | "Final_v7_REAL(2)" |
| AI assistant | In-product assistant: analysis, drafts, proposals you apply, on your own provider key | General CRM assistant; no territory-planning actions | Not offered | Generic spreadsheet AI, unaware of the plan |
| Quota and capacity planning | Quota plans on the territory tree: allocation with floors and caps, people and ramps, capacity, attainment, bottom-up proposals with guardrails | In the vendor's separate sales-planning add-on: quotas and headcount distributed from stamped alignments | Not offered | The quota workbook, reconciled by hand |
| Un-geocoded data | Geocodes plain addresses inside the pipeline, cached | Needs latitude and longitude fields; the parent mapping product geocodes standard objects | Extra tooling | No map at all |
| Data from other systems | Spreadsheets, Salesforce, other systems configured per instance; external datasets linked to the plan by account, owner, territory or boundary | Other systems only through the vendor's analytics connectors, outside the planning tool | Files and databases | Anything you paste |
| Drive-time territories | Generated per territory from radius or drive time, with the parameters you set and overlaps resolved | Drive time only as a distance option when optimizing; no drive-time boundaries | Separate add-on modules | Not offered |
| What-if planning | Unlimited parallel alignments, snapshots, three-way compare with impact; quota plan versions compared side by side | Up to three scenarios per alignment, compared on general territory metrics only | Duplicate projects | Copies of copies |
| Data prep | Visual pipeline inside the product | Reports or queries; deeper prep in the vendor's analytics recipes, outside the planning tool | Separate ETL | By hand, monthly |
| Approvals | Flows you design: templates, the whole alignment or selected territories, due dates, reviewable diff, reversal | Sequential approval of the whole alignment only; no partial submissions | Not offered | Email threads |
| Team collaboration | Chat per plan and alignment; threads on territories, records, boundaries and quota plans; mentions, replies, in-app inbox | General CRM feed on records; no threads inside the planning workspace | Not offered | Cell comments and email threads |
| Publish back | Publish templates to any destination: field mapping, destination preview, per-row log | Publishes into its own CRM only; no preview of the writes and no per-row detail | CSV out, re-import | CSV out, re-import |
| Sign-in and provisioning | OpenID Connect with any identity provider, SCIM 2.0 provisioning, API tokens, roles plus plan teams | The CRM's own SSO and SCIM | Per-seat licences and local accounts | File-sharing permissions |
| Where it runs | Single-tenant, your own stack | Vendor multi-tenant cloud | Per-seat desktop installs | Wherever the file went |
More capability
Even more on the way.
In build now, sequenced by what early customers ask for first.
- IN BUILDMixed boundary modes
Drive-time territories side by side with ZIP-based ones in a single alignment.
- IN BUILDZIP-to-ZCTA crosswalk
Point ZIPs without a census polygon fold into their enclosing area automatically.
- IN BUILDCross-source matching
Carry assignments across datasets when the same account lives in more than one source.
- IN BUILDChoropleth legends and overlays
Readable legends for metric shading, and compare overlays for ZIP-level plans.
- IN BUILDGeocoding provider choice
Pick the geocoder per instance, with a postal-centroid fallback for rows that only need containment.
- IN BUILDNotifications by email and chat
Mentions, approvals, proposals and due dates delivered by email or Slack, on top of the in-app inbox.
- IN BUILDQuotas published to the CRM
Forecasting quotas and territory records created and updated in the destination, with the same preview and per-row log as today's publish jobs.
- IN BUILDMore boundary packs
UK postcode areas, US metro areas and districts, German, Austrian, Swiss and French postcodes, Australia, loaded like the eleven standard sets.
Questions
The ones every evaluation asks.
Do our records need to be geocoded first?
No. Map street, city, state and postal fields in the recipe output and geocoding runs there, once, with results cached by normalized address. Rows that already carry latitude and longitude are used as they are and never re-geocoded.
Do we have to use Salesforce?
No. Salesforce is the connector that ships today, spreadsheets need no connector at all, and other CRMs or systems your data lives in are configured per instance. The sync layer is source-agnostic: objects, filters and modification watermarks work the same way whatever the source.
Can we plan quotas in ZoneCraft, or only territories?
Both, on the same plan. A quota plan attaches to an alignment and uses its territory tree and metrics. Allocate top-down with six methods, floors, caps and a period split; let managers propose bottom-up within a guardrail; cover territories with people, ramps and shares; compare capacity with quota; pull actuals for attainment; and sign off through the same approval flows. Adjustments, versions and the drift check keep the numbers right through the year. Quotas leave through a compensation export today; publishing them to CRM forecasting is on the way.
Can the assistant change territories on its own?
No. In suggest mode it reads and drafts only. In edit mode it creates proposal cards with the exact changes and their impact; nothing happens until a person clicks Apply, and applied changes are logged as made by the assistant on that person's behalf. It never publishes, syncs, deletes, restores snapshots, or touches users and settings, and it runs with exactly the permissions of the person asking.
Can the team discuss a plan inside ZoneCraft?
Yes. Every plan and every alignment has a team chat, and any territory, record, boundary or quota plan can carry comment threads with mentions and replies. Mentions, replies and comments on territories you own arrive in the in-app inbox, next to the approvals waiting on you. Discussion stays open on approved scopes, so reviewers can talk about what is locked without changing it.
Which AI model does it use, and does our data leave the instance?
You choose Anthropic or OpenAI and provide your own API key; the model is picked per instance from a list with prices. The assistant runs inside your instance and sends the model only what the request needs. Optional data masking replaces names, contacts and record ids with placeholders before they leave. Token budgets cap usage per user per day and per instance per month, and every request is reported with an estimated cost.
Does it write territories back to our CRM?
Yes. A publish template maps territory names, owners or any attribute to standard or custom fields on the source object. Each publish job shows the destination impact before it runs, runs once, and keeps a per-row log. A plan can require an approved alignment before a job may run.
Can we approve part of a plan, with our own steps?
Yes. Approval templates define the steps and who signs each one. A submission can cover the whole alignment or selected territories, every step carries a due date, reviewers see the exact diff, and approved territories lock. Administrators can reverse an approval, in whole or for selected territories, and the reversal is on record.
Where does our data live?
In your own instance: a dedicated API and a dedicated PostGIS database that no other customer shares. Cloudflare sits in front for TLS and traffic protection. Connection credentials, Salesforce tokens included, are encrypted at rest with a key that belongs to the instance.
How do we sign in, provision users and automate runs?
Sign-in is OpenID Connect with your identity provider, Okta, Entra ID, Google, Cloudflare Access, Auth0, Keycloak or Salesforce, or email and password. SCIM 2.0 creates, updates and deactivates users and maps groups to roles. API tokens act as a named user under that user's permissions, and schedules run syncs, pipelines, geocoding, actuals refreshes and publish jobs on a cadence, each as the person who created it and with the same locks.
Can we start with spreadsheets only?
Yes. Excel and CSV import needs no CRM connection: the wizard maps columns, declares types and picks an upload mode, and remembers everything for the next file. Connect a CRM later and the same plans keep working.
Which geographies are supported?
Eleven standard sets ship with every instance: US states, counties and ZIP areas, Canadian provinces and forward sortation areas, world countries, UN sub-regions and states and provinces worldwide, and Europe's NUTS 1 to 3 regions, 45,169 boundaries with filterable attributes such as country, region, city or population. Any other region is added from its official boundary data. Any ZIP or postal list of your own becomes a boundary set, and territories can be grown from their centers as radius or drive-time shapes with the parameters you set.
How large a dataset can a plan hold?
A plan of 300,000 records and 2,000 territories, with 2,000 sellers covering them and a quota plan allocated over every territory, has been exercised end to end. At that size the workspace opens in about twenty seconds, rule and optimizer previews answer in seconds, people, capacity and export views in well under a second, and a whole-tree quota allocation runs as a background job of about three minutes, measured on one development machine. No computation caps rows: metrics, health checks, quotas and publishing read every record, while the browser loads up to 100,000 records at a time and says so when there are more. Production instances are sized per customer; tell us your counts.
How long does it take to get running?
An instance provisions from a blueprint and restores the boundary reference data on its first boot. Connecting Salesforce is a standard authorization and the first sync starts right after; other systems are configured per instance. Most of the elapsed time is deciding which objects and filters to bring in.
Walkthrough
See your own territories in ZoneCraft.
Bring an account list, a spreadsheet is enough, and see a plan built on your data: boundaries, balance, quotas, the assistant, change analysis and the publish preview. Tell us a little about your setup and we will reply to set a time.
We will reply to your address to set a time.
Prefer email? Write to hello@zonecraft.app