Calculator

Pricebook Starter Pack (Calculator + 3‑Tier Template)

A fill‑in‑the‑blanks calculator that anchors your pricebook to a target revenue per crew day, converts payroll into a loaded labor rate, and backsolves Good/Better/Best task prices with three standard adders — plus exact CRM paths for ServiceTitan, Housecall Pro, and Jobber with 7‑day expiration and deposit settings.

Backsolve flat‑rate task prices from your real numbers — not guesses. This one‑page calculator anchors every price to your target revenue per crew day (day‑rate), converts payroll into a loaded labor rate, and checks each tier against a required revenue per billable hour so you don’t undercut your board. Then it gives you ready paths to load Good/Better/Best into ServiceTitan, Housecall Pro, or Jobber with 7‑day expirations and deposits.

Input: [Target Revenue per Crew Day (TRD)]

Two ways to set it:

  • Method A (direct): Enter your target dollar amount for one truck/crew to bring in on a full day of work.
  • Method B (baseline + bump): TRD = (Revenue last 4 weeks ÷ Completed crew‑days) × (1 + improvement %). A common first bump is 5–15% to force schedule and pricing discipline. Defaults: [TRD DEFAULT = 2,800] (placeholder — replace). Valid range: 1,200–6,000+ depending on trade/market/crew mix.

Input: [Crew Setup — Size, Hours/Day, Utilization]

These three inputs define how many billable hours you actually have in a day.

  • [CREW_SIZE]: Number of people on the job. Default [2]. Valid 1–4.
  • [HOURS_PER_DAY]: Scheduled hours per tech. Default [8.0]. Valid 6–10.
  • [UTILIZATION_%]: Percent of the day that is billable (rest is drive, parts, callbacks). Default [75%]. Valid 60–90%. Calculator: BILLABLE_HOURS_PER_DAY = CREW_SIZE × HOURS_PER_DAY × UTILIZATION_%.

Input: [Base Wage and Labor Burden]

Convert payroll into your true hourly cost to employ a tech. Use either % over wage or a $/hr override — not both. Required fields:

  • [BASE_WAGE_$HR]: e.g., [30.00]. Valid 18–60.
  • [BURDEN_%OVER_WAGE]: Employer costs as % of wage (payroll taxes, workers’ comp, health, PTO, uniforms, etc.). Placeholder default [35%] — replace with your number from payroll. Optional override (use instead of BURDEN% if you know it):
  • [BURDEN_$_PER_HR_OVERRIDE]: e.g., [10.50]. Valid 0–25.

Output: [Loaded Labor Rate (LLR $/hr)]

Two‑path formula:

  • If [BURDEN_$_PER_HR_OVERRIDE] > 0: LLR = BASE_WAGE_$HR + BURDEN_$_PER_HR_OVERRIDE.
  • Else: LLR = BASE_WAGE_$HR × (1 + BURDEN_%_OVER_WAGE). Output shows: LOADED_LABOR_RATE_$HR (LLR). Example: LLR = 30.00 × (1 + 0.35) = 40.50 $/hr.

Output: [Billable Hours/Day and Required Revenue per Hour (RBH)]

How much revenue per billable hour you must average across the day to protect your day‑rate.

  • BILLABLE_HOURS_PER_DAY = CREW_SIZE × HOURS_PER_DAY × UTILIZATION_%.
  • RBH = TRD ÷ BILLABLE_HOURS_PER_DAY (Required Revenue per Billable Hour). Guardrail logic: The calculator compares each tier’s labor+margin per hour (sell price minus pass‑through costs) to RBH so materials don’t hide weak pricing.

Input: [Target Gross Margin %]

Pick the gross margin you want on combined labor + materials for a task.

  • [TARGET_MARGIN_%]: Default [55%]. Valid 40–70%. If you prefer markup, the converter keeps both in sync.

Output: [Markup ↔ Margin Converter]

Keep markup and margin straight:

  • Given markup k on cost: margin m = k ÷ (1 + k).
  • Given margin m: markup k = m ÷ (1 − m). Link this to [TARGET_MARGIN_%] so editing one updates the other. Example: m = 55% → k ≈ 122.22%.

Input: [Task/Tier Assumptions — Hours and Materials]

For each task/tier row, enter:

  • [TASK_NAME]
  • [EST_HOURS]: Billable hours under standard conditions (include setup/cleanup/haul‑away). Valid 0.25–16+.
  • [MATERIALS_COST_$]: Parts/equipment at your cost (include fittings, pan, valves, misc). Valid $0–$15,000+.
  • Optional [OTHER_DIRECT_COSTS_$]: Rentals/permits you choose to margin here (toggle below).

Output: [Task Price — Backsolved from LLR and Margin]

Cost basis: TASK_COST = (LLR × EST_HOURS_ADJUSTED) + MATERIALS_COST_$ + OTHER_DIRECT_COSTS_$. Price two equivalent ways; use margin or markup — not both:

  • By margin: SELL_PRICE = TASK_COST ÷ (1 − TARGET_MARGIN_%).
  • By markup: SELL_PRICE = TASK_COST × (1 + TARGET_MARKUP_%). Day‑rate cross‑check per row:
  • ACHIEVED_REV_PER_HR = (SELL_PRICE − MATERIALS_COST_$ − OTHER_DIRECT_COSTS_$) ÷ EST_HOURS_ADJUSTED.
  • Flag if ACHIEVED_REV_PER_HR < RBH (you’re under your day target).

Input: [Standard Adders — Config + Toggles]

Pre‑configure three adders with toggles so office and field don’t invent one‑offs.

  • Adder A — After‑Hours/Weekend: [AFTER_HOURS_% = 20%] applied to labor portion only. Toggle: APPLY_TO_MATERIALS? [Yes/No] default No.
  • Adder B — Permit/Admin: [PERMIT_FEE_$ = 0] pass‑through by default. Toggle: MARGIN_PERMIT? [Yes/No] default No.
  • Adder C — Difficult Access (attic/crawl/tight chase): [ACCESS_EXTRA_HOURS = 1.0] added to [EST_HOURS]. Notes:
  • Labor‑based adders adjust hours or apply a surcharge to the labor component before margin.
  • Pass‑through items (like permits) add after pricing or enter as cost with MARGIN_PERMIT = No.

Output: [Adder Application Order — How Price Rebuilds]

Apply adders in this order for clarity and auditability:

  1. Hours adders first: EST_HOURS_ADJUSTED = EST_HOURS + ACCESS_EXTRA_HOURS.
  2. Recompute labor: LABOR_COST = LLR × EST_HOURS_ADJUSTED.
  3. After‑hours surcharge to labor only (pre‑margin): LABOR_COST_ADJ = LABOR_COST × (1 + AFTER_HOURS_%).
  4. Rebuild TASK_COST = LABOR_COST_ADJ + MATERIALS_COST_$ + OTHER_DIRECT_COSTS_$ (respect permit margin toggle).
  5. Convert cost to price using [TARGET_MARGIN_%] (or markup).

Output: [Suggested Minimum Job Charge]

Protect the board from 5‑minute freebies.

  • Input: [MIN_CHARGE_HOURS] default [1.0].
  • Output formula: MIN_JOB_CHARGE = max( RBH × MIN_CHARGE_HOURS, (LLR ÷ (1 − TARGET_MARGIN_%)) × MIN_CHARGE_HOURS ). Tip: Show this as a separate line (Dispatch/Diagnostic) credited to approved work if that’s your policy.

Output: [Quick QA — Red/Green Checks]

Before you publish, confirm:

  • Each tier’s ACHIEVED_REV_PER_HR ≥ RBH.
  • Good/Better/Best reflect real scope jumps (not cosmetic upsells).
  • Travel/haul‑away/diagnostic time is baked into hours.
  • Adders are limited to three defaults and documented.
  • Estimate expirations and deposits are set in your CRM (7‑day + small deposit).

Output: [Worked Example — Put It All Together]

Round‑number example to sanity‑check your sheet. Inputs:

  • TRD = $2,800
  • CREW_SIZE = 2, HOURS_PER_DAY = 8, UTILIZATION = 75%BILLABLE_HOURS_PER_DAY = 12
  • RBH = 2,800 ÷ 12 = $233.33/hr
  • BASE_WAGE = $30.00, BURDEN% = 35%LLR = $40.50/hr
  • TARGET_MARGIN = 55% (equiv. markup ≈ 122.22%) Tiers (example materials only — replace with your costs):
  • Good: EST_HOURS = 4.0, MATERIALS = $700
    • TASK_COST = (40.5×4) + 700 = $862
    • SELL_PRICE = 862 ÷ 0.45 = $1,915.56
    • ACHIEVED_REV/HR = (1,915.56 − 700) ÷ 4 = $303.89RBH
  • Better: EST_HOURS = 4.5, MATERIALS = $850SELL_PRICE ≈ $2,293.89, ACHIEVED_REV/HR ≈ $321.98
  • Best: EST_HOURS = 5.0, MATERIALS = $1,200SELL_PRICE ≈ $3,116.67, ACHIEVED_REV/HR ≈ $383.33 ✅ Adders (if applied):
  • After‑hours 20% on labor only (Good example): Labor = 40.5×4 = 162×1.20 = 194.40; new TASK_COST = 194.40 + 700 = 894.40; SELL_PRICE = 894.40 ÷ 0.45 = $1,987.56.
  • Difficult access +1.0 hr (Good): EST_HOURS_ADJ = 5.0; recompute with same steps above.

Output: [CRM Path — ServiceTitan]

Pricebook import + proposals + expirations.

  • Pricebook import: Settings > Pricebook > Import/Export (use the Excel template). While standardizing, review Settings > Pricebook > Dynamic Pricing and turn off automation that would move prices.
  • G‑B‑B presentation: Settings > Pricebook > Estimate Templates (create 3 named estimates), then Settings > Pricebook > Proposal Templates (group them so Good/Better/Best show side‑by‑side on mobile).
  • Online estimate expiration: Settings > Invoicing/Estimates > Online Estimates (set default link expiration to 7 days).
  • Deposits: Enable collecting deposits on approved proposals/estimates; set a default [DEPOSIT_% or $] in your sales workflow notes for CSRs.
  • Gotchas: Map every item to a GL account before syncing to accounting; keep QuickBooks item codes ≤31 characters for clean sync.

Output: [CRM Path — Housecall Pro]

Flat rate on + price book + expirations + deposits.

  • Turn on Flat Rate Pricing: Apps > Flat Rate Pricing (enable), then manage in Settings > Price Book on web.
  • Organize tiers/adders: Use Collections/Categories; keep the three options adjacent.
  • Estimate expiration default: Settings > Estimates > Default Expiration (set 7 days).
  • Deposits on estimates: Enable deposits so customers can pay online on approval.
  • Tip: Create an additional labor rate for after‑hours instead of ad‑hoc edits.

Output: [CRM Path — Jobber]

CSV updates + deposits + presentation.

  • Bulk update: Settings > Products & Services (export CSV, edit, re‑import — check overwrite for fields you’re updating).
  • Organize tiers: Use product/service groups or a naming convention so Good/Better/Best list together.
  • Deposits on quotes: Enable deposits; if using Jobber Payments, require method on file.
  • Quote expirations: Set default validity window (match 7‑day policy).
  • Tip: Use optional line items and a ‘Recommended’ flag to present the middle tier cleanly.

Output: [CSR/Tech Talk Tracks]

Give your team the words.

  • Presenting three options (CSR or tech): “We give you three paths so scope is clear, not padded. Good is the code‑compliant fix, Better adds reliability upgrades most homeowners choose, and Best is the premium efficiency package. Which fits your situation?”
  • “Cheapest only” objection: “Totally understand. Good gets you code‑compliant at the lowest price. If you’d like the longer warranty and fewer callbacks, Better is our most chosen — but we can proceed with Good and you can add the upgrades later if you want.”

Output: [Gotchas — Accounting and Rules]

Avoid common leaks:

  • Accounting mapping: Map items to GL accounts before first export; missing mappings block syncs and create cleanup work.
  • Membership/discounts precedence: In ServiceTitan, the highest eligible discount applies; verify member pricing doesn’t stack in ways you don’t intend.
  • After‑hours logic: Centralize surcharges in rules (Dynamic Pricing in ServiceTitan; separate labor rate or defined adder in HCP/Jobber). Don’t let techs freestyle.
  • Supplier catalogs: If you subscribe to vendor catalogs, set a monthly review cadence so materials costs in your tasks stay current before margin is applied.

Output: [Sample 3‑Tier Template — Water Heater Swap]

Copy these three rows into your sheet and replace placeholders with your shop’s numbers.

  • Good — [Water Heater Swap, Standard 40/50‑gal]
    • [SCOPE_NOTES]: Replace tank, reuse existing venting if code‑compliant; new flex connectors; haul‑away old; 1‑yr labor warranty.
  • Better — [Water Heater Swap + Valve/Pan/Expansion]
    • [SCOPE_NOTES]: Everything in Good + new ball valve, drain pan w/ drain line, expansion tank; 3‑yr labor warranty.
  • Best — [Premium/High‑Efficiency Tank; verify venting]
    • [SCOPE_NOTES]: Everything in Better + premium/high‑recovery tank; confirm gas/electrical/venting; 3‑yr labor warranty.
    • Outputs per row: SELL_PRICE, ACHIEVED_REV_PER_HR, FLAG_BELOW_RBH?.

Output: [Guardrails — How to Keep It Trusted]

Keep it trusted:

  • Three options max. Real scope differences. No junk add‑ons.
  • Review your top 20 services quarterly against material costs and win/loss notes.
  • Train the close: “Estimate expires in 7 days; a small deposit locks your spot and parts.”