KEY TAKEAWAYS
- The full exercise takes one afternoon, roughly 90 minutes to 3 hours depending on your data discipline.
- All tools required are free. Google My Maps, Google Sheets or Excel, and your existing job management software.
- The output is a single map and a single spreadsheet that change how you make every marketing and routing decision for the next quarter.
- Three zip codes will produce 50% or more of your last 50 jobs in nearly every case. Two to four zips will be revealed as money-losers.
- Run this exercise once per quarter. Each subsequent run takes half the time of the previous one.
ARTICLE NAVIGATION
This is the tactical companion to Law 1: Walk the Ground Before You Fight It. Law 1 explained why terrain mapping is the foundation of every other strategic decision a contractor makes. This article is the step-by-step walk-through of how to actually run the exercise. If you have not read Law 1, read it first. The principles will make the procedure make sense.
Why You Are Doing This
Most contractors at $2M to $10M operate on geographic assumptions they have never tested. They believe certain zip codes are profitable because the work feels familiar. They believe the slow zip codes are slow because of “market conditions.” They believe the spread is roughly even across their service area because nothing in their day-to-day operation tells them otherwise.
The data tells a different story. In nearly every case, three zip codes are carrying the operation, two to four zips are bleeding it, and the rest are performing close to break-even. The owner who knows which zips fall in which category is operating with a map. The owner who does not is operating on instinct.
This exercise produces the map. It takes one afternoon. The tools are free. The data is already in your existing software. The only thing missing is the discipline to do the work once, and then once a quarter after that.
Setup: What You Need Before You Start
Time required
90 minutes to 3 hours for the first run. Most owners land around 2 hours on their first attempt. Subsequent quarters drop to 45 to 60 minutes once the spreadsheet template is built and the data export process is familiar.
Tools required (all free)
Your job management software. Whatever you use to track jobs and invoices. ServiceTitan, Jobber, Housecall Pro, JobNimbus, BuilderTrend, QuickBooks, or even a manual spreadsheet if that is what you have. Any of these will work for the export step.
Google Sheets or Microsoft Excel. Either works. Google Sheets is free and accessible from anywhere. If you are already in the Microsoft ecosystem, Excel is fine.
Google My Maps. Free with any Google account. Found at google.com/mymaps. This is the mapping tool. It accepts spreadsheet uploads and plots them automatically.
A coffee, a Saturday or Sunday morning, and a closed office door. The exercise requires uninterrupted focus. Do not try to run it during the workday between phone calls. Owners who attempt this in five-minute pieces never finish.
Data fields you need
For each of your last 50 closed jobs, you need:
1. Customer street address with zip code. Full address is best. Zip code at minimum if full addresses are messy.
2. Job total in dollars. The full invoiced amount, not the deposit.
3. Close date. When the job was completed and final-billed.
4. Gross margin per job, if you track it. If you do not track margin per job, skip this and use revenue alone for the first pass. Mark it as a discipline to fix before the next quarterly run.
If your job management software does not export these fields cleanly, that is the actual problem worth solving before you go further. Clean job data is the prerequisite for terrain analysis. If your data is a mess, this exercise will reveal it, and that is useful information by itself.
Step 1: Pull Your Last 50 Jobs
Time: 20 to 40 minutes.
Open your job management software. Find the export function, which is usually under Reports, Jobs, or Settings depending on your platform. Filter for closed jobs and sort by close date, most recent first. Export the most recent 50 records to a CSV file.
If your software cannot export to CSV, you have two options. The first is to use the software’s reporting view and copy-paste the data into a spreadsheet manually. The second is to call your software’s customer support and ask them to walk you through the export. Most contractors who say “my software cannot export” actually have software that can export, but they have never been shown how.
One important note: the 50 jobs should all be from the same general time window. If you are a seasonal trade and your last 50 jobs span both summer and winter, that is fine. If they span multiple years because you only do 12 jobs a year, increase the sample to cover at least the last 12 to 18 months. The goal is a recent enough window to reflect current market conditions, but a long enough window to smooth out single-month anomalies.
Save the exported CSV somewhere you can find it. Name it something like jobs-last-50-2026-Q2.csv so future runs are organized.
Step 2: Build the Spreadsheet
Time: 15 to 25 minutes.
Open Google Sheets or Excel. Create a new spreadsheet. Import the CSV file you exported from Step 1 (in Google Sheets, use File → Import; in Excel, use Data → From Text/CSV).
You should now have a spreadsheet with at least four columns: Address, Zip Code, Job Total, Close Date. If your software exported additional fields (customer name, job type, technician, payment method), keep them. They will be useful in later quarters when you start cross-analyzing.
Add one new column called Margin if you tracked per-job margin in your software. If you did not track it, leave the column blank for now. We will work with revenue only for the first pass.
If the addresses came in as one combined field, split them into separate columns for street, city, state, and zip code. Both Google Sheets and Excel have a “Split Text to Columns” function under the Data menu that does this in 30 seconds.
Verify that every row has a zip code. If any rows are missing zip data, look up the address manually. A row without a zip code cannot be plotted on the map and will skew your numbers.
Step 3: Group and Calculate by Zip
Time: 20 to 30 minutes.
This is the analytical heart of the exercise. You are going to calculate, for each zip code that appears in your data, four numbers:
1. Job count (how many jobs from that zip)
2. Total revenue (sum of job totals from that zip)
3. Average revenue per job (total revenue divided by job count)
4. Total margin (sum of margins from that zip, if you tracked margin)
The fastest way to do this in either Google Sheets or Excel is with a Pivot Table.
Pivot Table walk-through (Google Sheets)
Highlight your data range, including headers. Go to Insert → Pivot Table. Choose to insert it on a new sheet.
In the Pivot Table editor:
• Drag Zip Code into the Rows area.
• Drag Job Total into the Values area twice. Set the first one to SUM. Set the second to COUNT.
• If you have margin data, drag Margin into Values and set it to SUM.
You should now see a table showing each zip code, the number of jobs from that zip, the total revenue, and (if applicable) the total margin. Sort the table by total revenue, descending.
Pivot Table walk-through (Excel)
The process is nearly identical. Highlight your data range. Go to Insert → PivotTable. Choose New Worksheet. In the PivotTable Fields panel, drag Zip Code to Rows and Job Total to Values (twice, one as SUM and one as COUNT). Add Margin to Values as SUM if you have it.
What you are looking for
The pivot table will reveal the Pareto pattern almost instantly. You will see a small number of zip codes producing a large share of total revenue, and a longer tail of zip codes contributing very little. This is normal. This is the data telling you the truth your operations have been hiding.
Add a percentage column showing each zip’s share of total revenue. In Google Sheets, this is done by dragging Job Total into Values a third time and changing “Show as” to “% of grand total.” Excel has the same option in the value field settings.
You should now see, at a glance, that 3 to 5 zip codes account for 50% to 70% of your total revenue.
If you reach Step 3 and realize your job data is too messy to pivot cleanly, that is itself a useful diagnosis. The Echelon Intelligence Report ($197) handles this work using public records, permit data, and competitor intelligence sources, which means it works even when your internal data is incomplete. Link at the bottom of this article. Keep going if you can. Falling back to the Echelon Report is fine if you cannot.
Step 4: Plot the Map
Time: 15 to 25 minutes.
Open Google My Maps at google.com/mymaps. Click “Create A New Map” in the upper left.
You will see a blank map with a tools panel on the left side. The panel has an “Untitled layer” by default. Click on the layer to expand it, then click Import.
Upload the CSV file you exported in Step 1. The tool will ask you which column to use for placement. Select the address column (or zip code column if street addresses are not available). It will ask which column to use for the marker title. Choose customer name or job number, whatever makes the marker readable when you hover over it.
Google My Maps will geocode each row and plot a pin on the map. This takes 30 to 60 seconds for 50 records.
Color-code the pins by revenue tier
Once the pins are plotted, click on the layer name and select “Style by data column.” Choose Job Total. The tool offers automatic color ranges. Choose three or four tiers. Green for the highest revenue tier, yellow for middle, red for the lowest.
Your map now shows, visually, where your high-value jobs are clustering versus where your low-value jobs are spreading out. This is the moment most owners realize what their map actually looks like for the first time.
Add zip code boundaries (optional but powerful)
Google My Maps does not display zip code boundaries by default. If you want them visible, you can search for “ZIP code shapefile [your county]” and import the boundary file as an additional layer. This takes 10 minutes and produces a map where you can see your zip code boundaries overlaid on your job pins. Most contractors skip this step on the first run and add it on subsequent quarters.
Save the map with a clear title (Service Area Terrain Map – Q2 2026) so you can come back to it next quarter and compare.
Step 5: Identify the Three That Pay and the Bleeders
Time: 15 to 30 minutes.
Go back to your pivot table from Step 3. Look at the top rows. The three (or sometimes four or five) zip codes producing the largest share of total revenue are your primary ground. Write them down on a physical piece of paper or in a separate document.
For each of those primary zips, note the following:
• Number of jobs in the last 50
• Total revenue
• Average revenue per job
• Total margin (if you tracked it)
This is your home territory. Every marketing decision, routing decision, hiring decision, and ad spend decision for the next quarter should be evaluated against the question: does this concentrate my force on these zips, or does it spread my force away from them?
Now identify the bleeders
Look at the bottom of your pivot table. The zips with one or two jobs that produced low revenue or low margin are the candidates for abandonment. Look at them carefully before you write them off, because some are simply outliers that happened to land in your data window.
The bleeders are the zips where you have evidence of repeat unprofitable activity. Multiple jobs over multiple months at low margin or zero margin. Long drives. Customers who haggled hard. Service callbacks that ate the original margin.
Write those zips down too. They are the ground you are abandoning. Stop running ads there. Stop chasing leads from there. If inbound work comes from those zips, you can take it on a case-by-case basis, but you stop investing marketing dollars or labor hours trying to generate more of it.
The middle ground
Most of the zip codes in your service area will fall between “pays well” and “bleeds.” This middle ground is your secondary territory. Worth maintaining, not worth investing extra marketing into. You service inbound work from these zips, but you do not chase them.
The clarity that emerges from this exercise is not “abandon 90% of your service area and concentrate on three zips.” The clarity is “concentrate marketing investment on the three zips that pay, abandon investment in the four zips that bleed, and operate normally in the middle.” Most owners find this much easier to execute than they expected, because once the zips are named, the decisions follow naturally.
Common Mistakes
Using too small a sample. 25 jobs is not enough to see the pattern reliably. 50 is the floor. 100 is better if you have the volume. The pattern needs enough data to be visible above the noise of a single big job or a single bad customer.
Using too large a window. Pulling 50 jobs from the last three years smooths out current market conditions and makes the data less actionable. Stick to the last 12 to 18 months for most trades, or whatever window contains 50 to 100 recent jobs.
Ignoring margin. Revenue tells you who is generating activity. Margin tells you who is generating profit. If you cannot calculate margin per job today, treat that as the second project to fix after this exercise. Build per-job margin tracking into your software workflow before next quarter’s run.
Acting on one quarter of data. One quarter is a snapshot. The patterns you should act on are the ones that hold across two or three consecutive quarterly runs. If a zip looks like a bleeder one quarter and a winner the next, hold the decision. If it looks like a bleeder for two quarters in a row, abandon it with confidence.
Confusing “no marketing spend” with “no service.” Abandoning marketing in a zip does not mean refusing every job that comes from there. It means redirecting your proactive investment elsewhere. Inbound calls still get answered. Inbound bids still get made. You stop spending money trying to generate more demand from ground that does not pay back.
What to Do Monday Morning
You have the map and the spreadsheet. Three actions for the first week:
Tell your sales lead and your dispatcher the three zip codes that pay. Not as a directive to refuse other work. As context for prioritization. Inbound calls from primary zips get the fastest response. Marketing leads in primary zips get followed up first. Dispatch decisions favor primary zips when there is a routing choice to make.
Pull your active marketing campaigns and check zip code targeting. If you are running Google Ads, Facebook Ads, or direct mail, look at the geographic targeting. Are you spending equally across all zips? Most contractors are. Adjust the next campaign cycle to weight 70% to 80% of spend on the three primary zips and pull spend from the bleeders entirely.
Schedule the next quarterly run. Open your calendar right now. Schedule a 90-minute block 90 days from this Sunday. Title it “Terrain Mapping – Q3.” This single calendar entry is what separates owners who run this once from owners who run it consistently. Quarterly compounding requires a calendar commitment.
That is the entire follow-through. Three actions. Maybe 90 minutes total. The compound effect over the next four quarters is the difference between operating with a map and operating without one.
Next in the Series
Thursday, April 30: Law 2, “Count What Your Competitors Will Not.” Sam Walton walking competitor stores at 4 AM with a yellow legal pad. John D. Rockefeller and the black notebook of competitor freight costs. The Intelligence domain opens.
Tuesday, May 5: The tactical companion to Law 2. The 23 data points every contractor should know about their top three competitors, and the 60-minute weekly habit that surfaces them all.
The Laws of the Contractor’s Campaign index page tracks every Law and tactical companion as it publishes. Bookmark it.
Three Ways to Apply the Laws
Echelon Intelligence Reports ($197). Your market mapped the way Walton and Rockefeller mapped theirs. Terrain, competitors, review velocity, permit activity, SEO position. The application of Law 1 and Law 2 delivered as a single classified-style document.
Competitor Intelligence Reports ($297). One competitor, taken apart in the detail Rockefeller kept in his black notebook.
Managed Contractor Websites ($149 to $698 per month, build $997 to $4,994). Constructed terrain. Fortified ground. Built the way Caesar built at Alesia.
The map was always there. This is just the first man drawing it for you.
FTC Disclosure: Kore Komfort Solutions is an educational publisher. Some links on our site are affiliate links through which we may earn a commission at no additional cost to you. Our recommendations are based on 30 years of trades experience and independent analysis.
Frequently Asked Questions
How do I map my contractor service area?
Pull your last 50 closed jobs from your job management software with customer address, job total, and close date. Drop the data into Google Sheets or Excel. Build a pivot table grouping by zip code with total revenue per zip. Plot the jobs on Google My Maps and color-code by revenue tier. The exercise takes 90 minutes to 3 hours and is repeatable once per quarter.
What tools do I need to map my service area?
Three free tools. Your existing job management software for the data export. Google Sheets or Microsoft Excel for the pivot table. Google My Maps for the geographic plotting. No paid tools are required for the basic exercise.
How many jobs do I need to map for the analysis to be reliable?
50 is the minimum for the pattern to be visible above noise. 100 is better if you have the volume. Less than 25 is not enough data. Use the last 12 to 18 months as your time window for most residential trades.
What is the Pareto pattern in contractor service areas?
The Pareto pattern is the 80/20 rule applied to geographic distribution of revenue. In nearly every contractor service area, 3 to 5 zip codes produce 50% to 70% of total revenue. The remaining zips produce a long tail of smaller contributions. Identifying which zips fall in which group is the foundation of every marketing and routing decision that follows.
Should I stop servicing zip codes that are unprofitable?
No, not in the absolute sense. Abandoning marketing investment in a zip is different from refusing every job that comes from there. Stop spending proactive marketing dollars and labor hours trying to generate demand from unprofitable zips. Continue answering inbound calls and bidding inbound work on a case-by-case basis. The shift is in where you invest, not in which work you accept.
How often should contractors run service area analysis?
Once per quarter. The first run takes 90 minutes to 3 hours. Subsequent runs take 45 to 60 minutes once the spreadsheet template and export process are familiar. Quarterly cadence catches market shifts within a single season and lets you reweight marketing spend before the next quarter begins.