Sales territory mapping is the process of grouping accounts by geography and rep owner to balance workloads. Instead of paying $49 per user monthly for tools like Badger Maps, operations teams export Salesforce data to Google Sheets and use InstaMaps' =GEOCODE() and =TERRITORY() formulas to plot accounts for free.
This workflow is built for sales operations managers and team leads handling a 10-person field team who need a coverage map for a quarterly business review in under five minutes. The end state is a shareable, live URL generated via =INSTAMAP() that displays exact account density and rep assignments without requiring admin bottlenecks.
- →Paid territory mapping software from vendors like Salesforce Maps and Badger Maps costs $30 to $75 per user, per month.
- →Harvard Business Review found that proper territory design increases sales by up to 7% without changing total resources.
- →You can visualise account density and plan assignments for free using Google Sheets and the InstaMaps add-on.
- →=INSTAMAP() generates a live, hosted map URL directly from your sheet, updating automatically as your data changes.
- →Use =TERRITORY() to assign accounts to specific reps automatically, and =CLOSEST_TO() to fix orphaned accounts.
- →Before mapping, run CRM reports to fix missing addresses, inactive account owners, and PO Boxes.
- →Use =ROUTE_LINK() to build daily driving routes for reps directly from the spreadsheet (maximum 11 stops).
Who needs sales territory mapping (and who does not)
This workflow is built for sales operations managers and team leads running quarterly business reviews on tight budgets. The core business case for mapping accounts is measurable: Harvard Business Review found that optimising territory design can increase sales by up to 7% without any change in total resources, and Xactly reports that companies with well-designed territories see up to 30% higher sales performance.
You need this workflow if your primary jobs are visualising account density to spot coverage gaps, filtering accounts by owner to plan rep assignments, and building the 'territory distribution' slide for leadership reviews. If your team currently pays $49 per user per month for Badger Maps across a 10-person team, you spend $5,880 annually just to perform these three tasks.
You do not need this workflow if your field reps require offline mobile access or automated daily multi-stop route sequencing. Route optimisation is a separate problem requiring dedicated, paid tools. If your reps spend 45 minutes planning 15-stop driving routes, buy the paid software. If your goal is seeing where 500 accounts sit and who owns them, use the free Google Sheets method.
Clean your CRM data before you map
Territory mapping fails silently when account data is broken. Before exporting anything, run three standard Salesforce reports to identify un-mappable records.
First, filter for accounts where Billing Street is blank. In most orgs, 15–30% of accounts have incomplete addresses and will not appear on the map. Fix your highest-revenue accounts first. Second, identify orphaned accounts by filtering where Account Owner is an inactive user. These records skew territory distribution views because they have no active rep assignment. Third, filter for physical addresses containing 'PO Box'. Postcodes map to the post office location, not the delivery site, meaning a rep will drive to the wrong destination.
Export your cleaned list to Google Sheets. Once the CRM data is in a tab named 'layer_Accounts', standardise the formatting using the InstaMaps sidebar (Extensions > InstaMaps > Enable formulas). Click the Build-the-workflow button to automatically insert =CLEAN_ADDRESS(A2:A500) into column B. This corrects capitalisation and parsing errors without manual edits.
If you are unsure whether your physical addresses will resolve, paste a sample of 50 rows into a test sheet and run =GEOCODE(A2:A50). The formula returns precise latitude and longitude coordinates. If rows return an #N/A error, the address is malformed. Fix the 50 rows before processing the entire 5,000-account sheet.
The free sales territory mapping workflow
This workflow takes 10 minutes to set up initially, then under 5 minutes for each subsequent territory review. It relies entirely on standard Google Sheets functionality and InstaMaps formulas.
1. Run any Salesforce report (Accounts by Owner, by Stage, or by Region). Click Export and select Google Sheets.
2. Rename the sheet tab to start with 'layer_' (for example, 'layer_Q3Accounts'). InstaMaps automatically detects this prefix as a map layer.
3. Ensure your address components sit in dedicated columns. If Billing Street, City, and Postcode are merged into one cell, use =CLEAN_ADDRESS(A2:A500) to parse them properly.
4. Generate coordinates. In an empty column, type =GEOCODE(A2:A500). The free tier provides 100 lookups per day (increased to 1,000/day with a free email unlock). If you manage 200 accounts, this completes in seconds.
5. Open the InstaMaps sidebar by navigating to Extensions > InstaMaps > Enable formulas. Use the Build-the-workflow button to insert formulas without typing.
6. Generate the live map. In a blank cell, type =INSTAMAP(B2:H500). This returns a live, hosted, shareable map URL. Any updates made to the Google Sheet-such as changing an account owner-instantly reflect on this map URL.
7. Assign geographic territories automatically. If you need to segment regions based on driving distance rather than state lines, use =CLOSEST_TO(A2, Rep_Locations!B2:B6) to assign the nearest rep from a list of 5 field reps. You can also use =TERRITORY(A2, F2:F50) to define boundaries based on regional data.
8. For reps doing manual daily routing on a subset of these accounts, InstaMaps provides navigation links. Use =ROUTE_LINK(B2, B3, B4) to generate a Google Maps link for a multi-stop journey (the official Google Maps URL scheme supports a maximum of 11 stops).
Save the =INSTAMAP() output URL. During your QBR, open the link, apply native Google Sheets filtering to your owner or stage columns, and screenshot the resulting view for your presentation deck.
Worked example: Balancing a 150-account load
Consider a 5-person field team managing 150 mid-market accounts across the Pacific Northwest. Historically, territories were split alphabetically, leaving one rep with 42 accounts in rural Oregon whilst another handles 60 in dense Seattle neighbourhoods. We need to balance the load by state boundaries, then use driving proximity to reassign the 42 orphaned accounts.
First, open the Google Sheet containing the 150 accounts (columns: A=Account, B=State, C=Address). To assign the base territories by state boundary, use the formula `=TERRITORY(B2:B151, {"WA";"OR";"ID"}, {"Rep A";"Rep B";"Rep C"})`. This automatically tags every account in column D with the correct state-based rep assignment, processing all 150 rows instantly.
However, raw state lines ignore physical driving time. 42 accounts previously assigned to Rep C in Idaho actually sit closer to Rep B's location in Eastern Oregon. To fix this geographic overlap, we must first geocode the 42 orphaned account addresses using `=GEOCODE(C2:C43)`. Then, geocode the 5 reps' home addresses in a separate tab named 'layer_Reps' using `=GEOCODE(C2:C6)`. This consumes 47 daily lookups, well within the free 100-lookup daily limit (or 1,000 with the free email unlock).
Next, use `=CLOSEST_TO(D2:D43, 'layer_Reps'!B2:B6, 'layer_Reps'!A2:A6)` in column E. This formula compares the exact coordinates of the 42 orphaned accounts against the coordinates of the 5 reps, returning the name of the physically closest rep based on straight-line distance. You can filter the sheet to see that 28 of these accounts actually belong to Rep B, dramatically reducing Rep C's rural windscreen time.
Finally, generate the live map to present at the quarterly business review. Click cell G2 and run `=INSTAMAP()`. The output is a live hosted shareable map URL that plots all 150 accounts, automatically colour-coded by the new rep assignments from column E. When leadership questions the redistribution, you can instantly filter the live map by the assigned rep name to show exactly why the 42 accounts moved.
What good territory data actually looks like
The primary benchmark most territory managers use is account load per rep. In mid-market B2B sales, a standard target is 80 to 120 accounts per field rep. This range assumes a standard transaction cycle, but geographic density alters these benchmarks drastically.
A rep with 100 accounts clustered tightly within a 20-mile radius in Central London has a fundamentally different daily workload compared to a rep managing 100 accounts scattered across the entirety of Scotland. Numeric account totals in a spreadsheet completely obscure this reality. Mapping the data exposes the actual workload.
When you move from a raw list to a visual layout, you immediately spot density pockets and coverage gaps. This visual alignment is not just an administrative exercise; it directly impacts revenue. Research from the Alexander Group puts productivity gains from proper territory coverage at 10 to 20 percent. By balancing account loads based on geographic reality rather than alphabet or raw numbers, you ensure reps spend their time selling rather than driving.
If you need to verify the physical coordinates of a dense cluster before making assignments, use `=GEOCODE(A2:A50)` on the address column. For broader regional planning without exact pins, `=COUNTY(B2:B50)` or `=REGION(C2:C50)` extracts the higher-level geographical identifiers, allowing you to build pivot tables that compare rep capacity against actual geographic distribution.
Limits and honest alternatives
InstaMaps handles territory visualisation and spatial formulas directly within Google Sheets, but it is not a native mobile application. It does not provide offline mobile access for reps driving through rural dead zones, nor does it automatically log visit details back into Salesforce or HubSpot. If your reps require constant GPS tracking and automated CRM logging, you need a dedicated mobile field tool.
The right time to evaluate paid territory mapping software is when daily routing becomes a bottleneck for individual reps. If a rep needs to sequence 10 to 15 stops a day, you can use `=ROUTE_LINK(A2:A12)` in InstaMaps. This generates a clickable Google Maps URL using the official URL scheme, optimising the path for up to 11 stops entirely for free.
However, if your team manages dense daily routes exceeding this limit and requires native mobile turn-by-turn navigation, a paid tool is justified. Evaluate these options only when the time saved on manual daily routing clearly outweighs the annual subscription cost.
SPOTIO: Starts around $25/user/month, designed specifically for field tracking.
Badger Maps: Costs $49/user/month, includes advanced routing algorithms.
Map your Salesforce accounts in under 5 minutes — no admin setup.
Common Questions
InstaMaps is the most direct free option for teams already tracking data in spreadsheets, offering up to 1,000 geocode lookups per day with a free email unlock. You export your Salesforce report into Google Sheets, use =GEOCODE(A2:A100) to fetch coordinates, and =INSTAMAP(B2:B100) generates a live web map. Unlike Google My Maps, the output updates automatically when your underlying sheet data changes and allows for standard filtering.
Formal territory reviews should happen quarterly alongside standard business review cycles, though high-growth teams adding new reps often review boundaries monthly. InstaMaps reduces the manual reporting time from over two hours to under fifteen minutes, making ad-hoc reviews viable whenever a coverage gap appears. Running =COUNTIF(Territory_Column, "West") alongside your map ensures your account distribution remains mathematically balanced.
InstaMaps relies on data-driven mapping rather than drawing formal polygon boundaries like zip codes or states. Instead, you use =STATE(A2:A50) or =COUNTY(A2:A50) to auto-tag locations based on their addresses, then filter the map view by those geographic regions. This zoom-based filtering approach shows exact account density without requiring complex polygon drawing tools.
Open your Salesforce report, click Export, and select Google Sheets to import your account data directly into a new tab. Add a new column and use =GEOCODE(C2:C100) to convert the billing addresses into latitude and longitude coordinates. Finally, type =INSTAMAP(D2:D100) to instantly generate a hosted, shareable map URL of all your accounts. The sidebar under Extensions > InstaMaps > Enable formulas can insert these chains automatically.
Paid sales territory mapping tools typically charge between $25 and $75 per user per month. For example, SPOTIO starts around $25 per user, Badger Maps costs $49 per user, and Salesforce Maps reaches $75 per user. For a 10-person team, this adds up to $3,600 to $9,000 annually, making free Google Sheets add-ons highly cost-effective for basic visualisation needs.
The =ROUTE_LINK() formula in InstaMaps can handle a maximum of 11 stops because it relies on Google Maps' official URL scheme, which caps URLs at 11 destinations. If you have a 47-stop route, you must break your data into smaller clusters or use =VISIT_ORDER() to optimise specific sequences. For reps requiring daily 20-stop routing, a dedicated paid tool like Badger Maps remains the better choice.
Stop paying $75 per user just to see your accounts on a map. Install the InstaMaps add-on to geocode rows and build shareable territory maps directly in Google Sheets.
Install InstaMaps free