
What's Inside:
Prepared by: Richard Butts
Founder, Groundbreakers Digital
Most contractors target "25-mile radius" or "our county" with no margin analysis, no booking rate tracking, no performance measurement. They spend the same budget on ZIP codes where they close 15% of estimates as ZIPs where they close 45%.
Note: Territory targeting improves efficiency, but your CPBE is still driven by creative + offer + intake speed. This toolkit fixes where you spend—not how fast you follow up.
This toolkit shows you how to identify your top-performing territories and focus 80% of your ad budget there.
Landscape, Snow, and Maintenance business owners who want to stop radius sprawl and focus their budget on the specific neighborhoods where they generate the highest profit.
If you want to build your Tier A/B/C lists TODAY, follow this process:
Pull your last 50 closed projects OR last 12 months of closed projects (whichever gives you more data).
Required fields:
Create a simple table with these columns:
For each ZIP, calculate:
Gross Margin %: (Total Gross Margin $ ÷ Total Revenue) × 100
Booking Rate % (if you have lead data): (Booked Estimates ÷ Total Leads from that ZIP) × 100
If you don't track leads by ZIP yet: Use close rate as proxy: (Closed Projects ÷ Total Estimates) × 100
Job Count: Number of closed projects in that ZIP
Drive Time: Google Maps: Your shop/yard address → ZIP code center point. Use realistic weekday mid-morning traffic conditions
FAST SCORING METHOD (Back-of-Napkin - Good Enough to Start):
If you're not using the spreadsheet, use this simplified formula:
Score = (0.4 × GM%) + (0.3 × Booking Rate %) + (0.2 × Job Count) - (0.1 × Drive Time in minutes)
Example: ZIP 75034 (example only):
RECOMMENDED: Use the Normalized Scoring Method (more accurate - see "Scoring Formula + Normalization" section below) in the spreadsheet for cleaner comparisons across different-sized datasets.
Sort ZIPs by score (highest to lowest).
Tier A: Top 10 ZIPs (ONLY if the ZIP has 5+ closed projects)
Tier B: Next 5-10 ZIPs (or any ZIP with 3–4 closed projects that you want to test)
Tier C: Everything else (including ZIPs with <3 closed projects)
Minimum sample rule: A ZIP cannot be Tier A unless it has 5+ closed projects in your window. ZIPs with 3-4 projects can be Tier B (testing only). ZIPs with <3 projects are Tier C (insufficient data).
Upload your Tier A allowlist to Meta and Google. Start running campaigns.
That's it. You now have data-driven territory targeting instead of radius sprawl.
Formula: (Revenue - Direct Costs) ÷ Revenue × 100
Direct Costs include:
Direct Costs DO NOT include:
Example:
Formula: (Booked Estimates ÷ Total Leads) × 100
Booked Estimate = Appointment scheduled on calendar with specific date/time
Lead = Someone who submitted form or called expressing interest in a project
Example:
If you don't track leads by ZIP yet:
Use close rate as proxy until you implement lead tracking:
Close Rate = (Closed Projects ÷ Total Estimates) × 100
This is less precise but directionally useful. Start capturing ZIP on every lead form going forward.
Definition: Number of closed projects (signed contract + deposit paid) in that ZIP during your time window
Why this matters:
Minimum threshold: ZIPs with fewer than 5 closed projects in your window cannot be Tier A (insufficient sample size). They can be Tier B for testing with 3-4 projects, or Tier C with <3 projects.
Definition: Minutes from your shop/yard to ZIP code center point during realistic working conditions
How to measure:
Why this matters:
Example (example ZIPs only):
ZIPs with 45+ minute drive times rarely make Tier A unless margins are exceptional (50%+).
Instructions on how to use the toolkit:
Columns:
Paste your 50+ projects here. Formulas will calculate totals.
Grouped by ZIP code:
This becomes your scoring input table.
RECOMMENDED SCORING METHOD (Use in Spreadsheet):
For each ZIP, calculate normalized scores on 0-100 scale to ensure fair comparison:
Normalized Scores (0-100 scale):
GM Score: (Your ZIP's GM% ÷ Highest GM% in dataset) × 100
Booking Score: (Your ZIP's Booking Rate ÷ Highest Booking Rate) × 100
Volume Score: (Your ZIP's Job Count ÷ Highest Job Count) × 100
Drive Score (inverted - shorter is better): MAX(0, 100 - (Drive Time ÷ 60 × 100))
Note: The MAX function prevents negative scores if drive time exceeds 60 minutes.
Weighted Total:
Total ZIP Score = (0.4 × GM Score) + (0.3 × Booking Score) + (0.2 × Volume Score) + (0.1 × Drive Score)
Example Calculation:
ZIP 75034 (example only):
This ZIP scores very high (Tier A candidate).
Sorted by Total Score (highest to lowest):
Note: All ZIPs shown are examples only.
Confidence Badges:
High: 10+ closed projects in window
Medium: 5-9 closed projects
Low: <5 closed projectsTier A Eligibility Rule: Requires 5+ closed projects (Medium or High confidence only). Low confidence ZIPs cannot be Tier A regardless of score - maximum Tier B for testing.
Tier A Allowlist (80% of budget):
75034
75022
75087
75024
75055
75011
75019
75035
75009
75021Note: Example ZIPs only. Use your actual data.
Tier B Test List (20% of budget):
75013
75078
75025
75056
75020Note: Example ZIPs only.
Tier C Exclusion List (0% budget):
75023
75125
75104
75002
[All other ZIPs in service area]Last Updated: [YYYY-MM-DD]
Next Review: [YYYY-MM-DD + 90 days]
Copy these lists directly into Meta and Google targeting settings.
Track decisions over time:
This prevents yo-yo decisions and creates institutional memory.
Raw metrics have different ranges:
Without normalization, Job Count (1-25) would dominate GM% (25-55) even though we want GM% weighted higher.
Normalization fixes this: Convert each metric to 0-100 score, then apply weights. Now a ZIP with 47% GM and 18 jobs competes fairly against a ZIP with 52% GM and 12 jobs.
Your ZIP's Score = (Your Value ÷ Best Value in Dataset) × 100
Example:
Repeat for Booking Rate and Volume. For Drive Time, invert it (shorter = better) and cap at 0 to prevent negative scores.
A ZIP cannot be Tier A if it has fewer than 5 closed projects in your time window.
Why: One to four projects don't prove consistent demand. You need volume to validate performance.
ZIP 75013 (example only):
ZIP 75034 (example only):
Tier A: Top 10 ZIPs by score (or top 15-20% of your service area)
Tier B: Next 5-10 ZIPs (or next 20-30%)
Tier C: Everything else
Additional requirement: Tier A ZIPs must have 5+ closed projects (Medium or High confidence).
Why this works:
Tier A: Score ≥70 AND 5+ closed projects
Tier B: Score 50-69 OR 3-4 closed projects
Tier C: Score <50 OR <3 closed projects
Why this works:
(your proven profit zones)
(testing ground for expansion)
(exclude completely)
Total monthly ad spend: $3,000
Campaign: [City] - Design Build - Tier A+B
Ad Set 1: Tier A
Ad Set 2: Tier B
Campaign: [City] - Design Build - Tier A+B
Ad Set 1: Tier A
Ad Set 2: Tier B
Review frequency: Monthly (at minimum). Weekly is better if volume allows.
Minimum data requirement: Don't promote/demote unless the ZIP has generated at least 10 leads OR 3 booked estimates in the last 60-90 days. Small sample sizes create false signals.
Example:
ZIP 75035 (example only - Currently Tier B):
Example:
ZIP 75013 (example only - Currently Tier A):
Example:
ZIP 75023 (example only - Currently Tier B):
Revisit in 6-12 months to see if market conditions have changed.
Run this every 90 days. Takes 30 minutes.
Log every change in Quarterly Review Log tab:
This prevents:
Why this matters: Google shows ads to people searching FROM those locations or people searching ABOUT those locations. Inclusion/exclusion lists prevent wasted spend.
Monthly:
[Your ZIP 1]
[Your ZIP 2]
[Your ZIP 3]
[Your ZIP 4]
[Your ZIP 5]
[Your ZIP 6]
[Your ZIP 7]
[Your ZIP 8]
[Your ZIP 9]
[Your ZIP 10]Budget Allocation: 80% ($/month of $ total)
Performance Targets (based on historical data):
Last Updated: [YYYY-MM-DD]
Next Review: [YYYY-MM-DD + 90 days]
[Your ZIP 1]
[Your ZIP 2]
[Your ZIP 3]
[Your ZIP 4]
[Your ZIP 5]Budget Allocation: 20% ($/month of $ total)
Testing Criteria:
Last Updated: [YYYY-MM-DD]
[List all other ZIPs in your service area]Budget Allocation: 0%
Status: Excluded from all targeting
Reason: Low margins, low booking rates, or insufficient data
Revisit: [YYYY-MM-DD + 6 months] (re-score if market conditions change)
A: Use this simplified formula until you build margin tracking:
Score = (0.5 × Close Rate %) + (0.3 × Job Count) - (0.2 × Drive Time)
Focus on close rate (estimates→signed contracts) and volume. Add margin data as you build it into your estimating system.
A: Make ZIP a required field on all forms and Voice AI scripts:
Form: Add dropdown or text field labeled "Project ZIP Code" (required)
Voice AI: Ask ZIP early in qualification: "What ZIP code is the property located in?"
CRM: Create standardized ZIP field (no mixed formats like "75034-1234" or "75034 TX")
Going forward, every lead gets tagged with ZIP. You'll have clean data for next quarter's review.
A: Yes, but use town/area clusters instead of ZIPs:
The principle is the same: Focus on proven territories, avoid sprawl.
A: No. If you have zero completed projects in that ZIP:
A: Market saturation is real. Options:
Option 1: Increase creative refresh rate
Option 2: Expand to Tier B
Option 3: Add second channel
Option 4: Test adjacent ZIPs
Don't keep throwing money at saturated ZIPs. Diversify intelligently.
A: Targeting is probably fine. Intake is broken.
Low booking rate (<30%) = intake problem, not targeting problem:
Fix intake before changing targeting. Tier A ZIPs are chosen because they've historically converted well. If they're not converting now, something in YOUR process changed.
For this ZIP scoring system to work long-term, you need clean data:
This data discipline makes quarterly reviews fast (30 minutes instead of 3 hours cleaning messy data).
This toolkit gives you the method: score your ZIPs, identify your profit zones, allocate 80/20 budget, and review quarterly.
If you want help implementing the complete demand generation system (ZIP targeting + Meta campaigns + Voice AI intake + CRM automation + performance tracking):
richard@groundbreakers.digital
Stop radius sprawl. Focus on your Tier A ZIPs. Let your data decide where you spend.
How to Choose Your Tier A/B/C Territories, Allocate 80/20 Budget, and Build Exact Targeting in Meta + Google