Territory planning for revenue teams
Draw territories on live data. Track every change.
ZoneCraft syncs your CRM, geocodes plain addresses, and lets you carve balanced territories on a real map. Compare what-ifs, route the plan through approval flows you design, and publish back to the system your data lives in, with a preview first.
- Single-tenant: your own instance and database
- US & Canada boundaries built in, any region on request
- No pre-geocoded files required
- 38,734boundaries built in for the US and Canada; any other region is added from its official boundary data
- 50k+records in one live workspace, with filters, totals and bulk edits that stay instant
- 5overlap-resolution strategies for radius and drive-time territories
- 100%of plan changes captured in an append-only history. Nothing edits the past.
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 five 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.
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. Other CRMs and systems are configured per instance, quickly.
- 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. Outputs become planning-ready datasets.
- 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
Tens of thousands of rows with server-persisted columns, condition filters, totals, and bulk assign. Locked rows stay put through every automated pass.
Boundaries
- Standard geographies, built in
US states, counties and ZIP areas plus Canadian provinces and forward sortation areas ship with every instance. Any other region is added from its 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.
- 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, editors and viewers. Editing can be scoped to selected territories and their subtrees; boundary edits are a separate permission.
- 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. Reversals are on record too.
- 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
Six steps from a raw account list to territories in your CRM.
- 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. Addresses are geocoded at the output, once.
- 03Carve
Assign boundaries or records, run rules, let the optimizer balance the rest, lock what must stay.
- 04Compare
Clone alignments, take snapshots, and read the impact per territory before deciding.
- 05Approve
Submit the whole alignment or a subset through a flow you designed, with due dates and a reviewable diff.
- 06Publish
Preview every write, run the job once, and keep the per-row log next to the plan.
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:02:11 | you | 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 or date. 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
- Single sign-on with your identity provider, or email and passwordSalesforce SSO ships today; other providers are configured per instance. Roles: admin, planner, contributor, viewer; plan teams on top
- 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 and Canada built in, any region on requestStates, counties, ZIP areas, provinces and FSAs restored at first boot; other regions loaded from their official boundary data
- Heavy work
- Background job queueSyncs, geocoding, drive-time shapes and publish runs queue, retry and report progress
- Operations
- Error tracking and uptime monitoringPer-instance environments; scheduled backups sized per customer
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)" |
| 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 | 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 | 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 |
| 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 |
| 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 BUILDApproval notifications
Due-date and decision notifications by email and chat, on top of the in-app inbox.
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.
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.
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?
US states, counties and ZIP areas plus Canadian provinces and forward sortation areas ship with every instance, and 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?
The workspace has been exercised with more than 50,000 records against dozens of drive-time territories in a single alignment, with filters, totals and bulk edits staying interactive. Larger volumes are sized per instance; tell us your record counts and we will size the stack with you.
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, 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