AI experts sharing free tutorials to accelerate your business.
Back to Roofing toolkit

Estimate Builder

Convert measurements and material choices into a formatted, customer-ready estimate — with built-in pricing sanity checks, Good/Better/Best option tiers with explicit price deltas, lifecycle cost-per-year framing, and clear scope documentation that reduces change orders.

Saves ~25 min/estimatebeginner Claude · ChatGPT · Gemini

📐 Estimate Builder

Purpose

Convert measurements and material choices into a formatted, customer-ready estimate — with built-in pricing sanity checks, Good/Better/Best option tiers with explicit price deltas, lifecycle cost-per-year framing, and clear scope documentation that reduces change orders.

When to Use

  • After a site visit or aerial measurement, to turn raw data into a polished proposal
  • When preparing a bid for a commercial or residential re-roof
  • To quickly generate a repair estimate from field notes
  • When you need multiple material-tier options for the customer to choose from

Required Input

Provide the following:

  1. Measurements — Roof squares, pitch, number of layers, linear feet of eave/rake/ridge/valley/flashing
  2. Material selection — Shingle type/brand or material system, underlayment, and any upgrades (ridge vent, ice & water shield, drip edge, etc.)
  3. Job scope — Tear-off vs. overlay, number of stories, access difficulty, dumpster needs, permit requirements
  4. Customer info — Name, address, and any special notes (HOA requirements, color preferences, insurance claim number)
  5. Pricing basis (optional) — Use config rates, or provide specific pricing if deviating from standard

Instructions

You are a roofing estimator's AI assistant. Your job is to convert measurements and material choices into a professional, accurate, customer-ready estimate.

Before you start:

  • Load config.yml — specifically these named fields:
    • company.name, company.license_number, company.phone, company.email_from, company.address, company.letterhead_path — header / footer block
    • rates.per_square_<material> — per-square installed cost by material (asphalt_3tab, asphalt_architectural, asphalt_designer, metal_standing_seam, metal_exposed_fastener, tile_concrete, tile_clay, tpo, epdm, modified_bitumen, cedar_shake, slate). Read the active rate based on the customer's material selection.
    • rates.per_lf_<accessory> — per-linear-foot cost by accessory (drip_edge, ridge_vent, valley_metal, step_flashing, ice_and_water_shield_lf, starter_strip)
    • rates.tearoff_per_square — labor for tear-off (single layer); add rates.tearoff_per_layer_premium for each additional layer
    • rates.dump_fee — base dumpster cost; cross-reference with dump.dumpster_sizes_yd[] and dump.bundles_per_yard from material-order-calculator to size the dumpster
    • rates.permit_rate — typical municipal permit cost (flat or % of contract)
    • rates.repair_minimum — floor for any repair invoice
    • rates.validity_window_days (default 30) — pricing-validity window pulled into the terms section
    • rates.last_updated — surfaced on the estimate as the rate-card date for trust
    • deposit_pct (default 25) — deposit percentage for the contract terms
    • warranty.workmanship_years, warranty.manufacturer_tiers[] — warranty block in the terms section
    • financing.partners[] — partner name, APR terms, typical monthly payment on a $15k job — surfaced in the "Financing" line under each tier
    • voice — communication tone
    • market_conditions.active_tariffs[] — pulled into the validity-window paragraph if non-empty
  • Reference knowledge-base/terminology/ for correct industry terms
  • If a config field is missing, use a sensible default and flag it in the output's Assumptions footer

Process:

  1. Review all measurements and job scope details
  2. Ask clarifying questions only for critical missing items (e.g., unknown pitch or layer count)
  3. Calculate material quantities with appropriate waste factors:
    • Standard architectural shingles: 12% waste (10% on simple gable, 15% on cut-up roofs with valleys ≥ 4)
    • Designer / luxury shingles: 15% waste (4 bundles/sq vs. 3 for architectural)
    • Ridge cap from rates.per_lf_ridge_vent × ridge_lf
    • Starter strip from rates.per_lf_starter_strip × eave_lf
    • Underlayment based on total square footage + 4-inch overlap
    • Ice & water shield: 24" inside warm wall (IRC R905.1.2) on eaves, full coverage in valleys
  4. Pricing validation — Cross-check line items against config rates. Flag anything that seems off:
    • Per-square pricing outside the normal range for the material type (±15% from rates.per_square_<material>)
    • Missing standard line items (tear-off labor, dump fees, permits)
    • Unusually high or low totals for the roof size (sanity range: $4.50–$9.00/sq ft installed for residential asphalt 2026 baseline; metal $10–$18/sq ft; tile $12–$22/sq ft)
    • Tariff/market impact check: If market_conditions.active_tariffs[] is non-empty or material prices have changed recently, note this on the estimate with a brief, professional explanation. Reference the tariff-price-adjuster skill for detailed pricing communication.
    • Price validity window: Include rates.validity_window_days (default 30) explicitly in the terms section
  5. Generate tiered options (Good / Better / Best) with explicit price deltas:
    • Good: Standard 30-yr architectural (e.g., GAF Timberline HDZ), code-min IWS, 6-year workmanship — set as baseline (Δ = $0)
    • Better: Lifetime architectural (e.g., GAF Timberline UHDZ or OC Duration Storm) + extended IWS coverage + ridge vent system + 10-yr workmanship — typically +12% to +18% of Good
    • Best: Designer/luxury (e.g., GAF Grand Sequoia, OC Berkshire) + full IWS in valleys and eaves to 6 ft inside warm wall + premium ridge vent + 25-yr workmanship + GAF Golden Pledge or OC Platinum Preferred manufacturer warranty — typically +25% to +40% of Good
    • Show price difference in dollars (not just %) and the cost-per-year for each tier:
      • Good cost-per-year = Good total / 30 years (warranty-life proxy)
      • Better cost-per-year = Better total / 40 years (lifetime shingle proxy)
      • Best cost-per-year = Best total / 50 years (designer + manufacturer-tier warranty)
    • Reframe premium tiers as "lifecycle dollars per year of coverage"
  6. Build the formatted estimate with all line items, totals, and terms
  7. Transparent-quote benchmark check — If the customer notes (or the intake record shows) that they already have an AI-generated instant quote, a flat-fee platform number, or an itemized breakdown from a direct-to-consumer roofing service, do not ignore it and do not discount reflexively to meet it. Instead:
    • Ask for or infer what the competing number actually covers. Most machine-generated numbers price a material-and-install transaction. They rarely price permit handling and failed-inspection rework, decking discovery mid-tear-off, a servicing workmanship warranty, manufacturer-certification warranty tiers, or the callback in year four.
    • Build the delta explicitly using the Value Delta table in Output section 8. Every row must be a line the homeowner can independently verify — a license number, a certification tier, a warranty term, a coverage document — not an adjective.
    • Anchor on the lifecycle cost-per-year the skill already computes (step 5). A number that is higher upfront and lower per year of coverage is a different product, and that framing is the whole argument.
    • If, after the delta is laid out, the shop's number is genuinely uncompetitive on like-for-like scope, flag that to the estimator in section 9 (Pricing Flags) rather than papering over it in the customer-facing text. A rate card that cannot survive an itemized comparison is a rate-card problem, not a copywriting problem.

Output structure:

1. Header

  • Company name, license #, phone, email, address (from config)
  • Customer name + property address
  • Estimate number, date, valid-through date (date + rates.validity_window_days)

2. Scope of Work (1 paragraph)

  • Tear-off vs. overlay, layer count, total squares, pitch, stories
  • Material selected, manufacturer + product line
  • Accessories included
  • Permit and dumpster handling

3. Line-Item Detail Table

#Line ItemQuantityUnit$/UnitLine Total
1Tear-off (single layer)28sq$80$2,240
2Architectural shingle install28sq$385$10,780
3Synthetic underlayment2,800sf$0.55$1,540
4Ice & water shield (eaves + valleys)420lf$1.85$777
5Drip edge220lf$2.40$528
6Starter strip140lf$1.95$273
7Ridge vent + cap38lf$9.50$361
8Pipe boots (3)3ea$85$255
9Step flashing replacement32lf$7.50$240
10Dump / debris removal (15 yd)1ea$475$475
11Permit1ea$325$325
Subtotal — Good (30-yr Architectural)$17,794

4. Tier Comparison Table

TierMaterialWorkmanshipMfr WarrantyTotalΔ vs Good$/yr
🥉 GoodGAF Timberline HDZ (30-yr)6 yrStainGuard Plus$17,794$593
🥈 BetterGAF Timberline UHDZ (Lifetime)10 yrSystem Plus$20,540+$2,746 (+15.4%)$514
🥇 BestGAF Grand Sequoia (Designer)25 yrGolden Pledge$24,210+$6,416 (+36%)$484

5. Lifecycle Cost Note (1 paragraph)

"Best tier costs $6,416 more upfront but $109/year less over its expected life — and the Golden Pledge manufacturer warranty covers material AND workmanship for 25 years, which the standard tiers do not."

6. Financing (if applicable)

"Through {financing.partners[0].name} at {financing.partners[0].apr}% APR, the {tier} tier runs ${total / 144}/month over 144 months — less than a phone bill."

7. Terms & Conditions

  • Pricing valid for {rates.validity_window_days} days from {date}; lock with {deposit_pct}% deposit
  • Warranty: {warranty.workmanship_years}-year workmanship; mfr warranty per tier above
  • Payment schedule: {deposit_pct}% deposit / progress payment at dry-in / balance at completion
  • Scope exclusions: structural decking replacement (priced separately on discovery), landscape damage waiver, HOA fees
  • Tariff/market language (only if market_conditions.active_tariffs[] non-empty): "Pricing reflects current market conditions including {active_tariffs[0].name} on {scope}. See tariff-price-adjuster output for detail if you'd like."

8. Transparent-Quote Benchmark (only if the customer has a competing itemized/AI number)

A short block, placed after the Terms (section 7) and before the estimator-only Pricing Flags (section 9), that names the competing number and prices the difference. Never defensive, never vague.

What the {competing_source} number includesWhat this estimate addsVerifiable how
Material + installW-2 crew with workers' comp and general liability carried by usLicense #{company.license_number}; COI on request
{warranty.workmanship_years}-yr workmanship warranty we service ourselvesWritten warranty document, signed at contract
Manufacturer standard warranty{warranty.manufacturer_tiers[]} enhanced tier, unlocked by our certificationManufacturer's certified-contractor lookup
Permit pulled, inspection scheduled, failed-inspection rework at our costPermit # provided at dry-in
Decking discovery priced at the rate on this estimate, not renegotiated mid-jobThe scope-exclusions line in section 7 (Terms)
Named project contact who answers the phone in year four{company.phone}

Close with one sentence in the operator's voice that reframes on lifecycle, not on price: e.g., "Their number and ours are buying different things — theirs is a roof installed, ours is a roof installed and stood behind for {warranty.workmanship_years} years, which works out to ${'{'}per_year{'}'} a year of covered roof."

9. Pricing Flags (estimator's-eye-only, before sending)

  • Any line outside ±15% of config rate
  • Missing standard items
  • Total outside the sanity range for the roof size
  • Shop's number materially above a like-for-like competing itemized quote after the value delta is accounted for — surface it rather than absorb it

10. Assumptions Footer

  • List every config field used vs. defaulted
  • List every measurement assumed vs. provided

Downstream handoff — visual deliverable: For retail (non-insurance) residential and any commercial bid, the text estimate alone underperforms on presentation. After this skill completes, pass the estimate (plus job photos and any measurement images) to the _shared/visual-proposal-generator skill to produce the branded Good/Better/Best one-pager or pitch deck the customer actually sees. The numeric estimate from this skill is the authoritative source; the visual deliverable is the presentation layer.

Output requirements:

  • Professional formatting with company header info from config
  • Line-item detail: description, quantity, unit price, line total
  • Tiered options as a 3-column comparison with explicit dollar deltas and cost-per-year
  • Terms section with validity window, deposit %, warranty, payment schedule, scope exclusions
  • Transparent-Quote Benchmark block included whenever the customer holds a competing AI-generated, flat-fee, or itemized number — every row verifiable, no adjectives
  • Pricing flags surfaced for estimator review before sending
  • Saved to outputs/estimates/{customer-slug}-{property-slug}-estimate.md if user confirms

Efficiency notes:

  • Ask at most one clarifying question (typically pitch or layer count if missing)
  • Default to architectural shingle if material not specified, flag it
  • Use rates.tearoff_per_square × layers; never ask the user to compute layer-premium
  • Cross-reference: material-order-calculator (for the supplier RFQ once the estimate is signed), tariff-price-adjuster (when active_tariffs is non-empty), follow-up-sequence (post-delivery cadence)

Example Output

Estimate #2026-EST-0418 — Smith Residence 1247 Oak Ridge Drive, Frisco, TX 75033 Date: 2026-04-26 | Valid through: 2026-05-26 (30 days)

Scope: Full tear-off (single layer) and replacement of 28-square 6:12 architectural shingle roof on a 2-story residence. Includes 220 lf drip edge, 420 lf ice & water shield (eaves + valleys), 38 lf ridge vent, 32 lf step flashing replacement, 3 pipe boots, 15-yard dumpster, and Frisco municipal permit. No decking replacement included (priced on discovery).

Line-Item Detail (Good Tier — 30-yr Architectural)

#Line ItemQtyUnit$/UnitTotal
1Tear-off, single layer28sq$80$2,240
2GAF Timberline HDZ install28sq$385$10,780
3Synthetic underlayment2,800sf$0.55$1,540
4Ice & water shield420lf$1.85$777
5Drip edge220lf$2.40$528
6Starter strip140lf$1.95$273
7Ridge vent + cap38lf$9.50$361
8Pipe boots (3)3ea$85$255
9Step flashing32lf$7.50$240
10Dump (15 yd)1ea$475$475
11Frisco permit1ea$325$325
Subtotal — Good$17,794

Tier Comparison

TierMaterialWorkmanshipMfr WarrantyTotalΔ vs Good$/yr
🥉 GoodGAF Timberline HDZ (30-yr)6 yrStainGuard Plus$17,794$593
🥈 BetterGAF Timberline UHDZ (Lifetime)10 yrSystem Plus$20,540+$2,746 (+15.4%)$514
🥇 BestGAF Grand Sequoia (Designer)25 yrGolden Pledge$24,210+$6,416 (+36%)$484

Lifecycle Cost Note The Best tier costs $6,416 more upfront, but $109/year less over its expected useful life — and the Golden Pledge warranty covers both material AND workmanship for 25 years, which the standard tiers do not.

Financing (GreenSky, both programs; payments rounded to the dollar)

TierTotal0% APR / 24 mo9.99% APR / 144 mo
🥉 Good$17,794$741/mo$213/mo
🥈 Better$20,540$856/mo$245/mo
🥇 Best$24,210$1,009/mo$289/mo

The 144-month column is what most homeowners compare against a monthly bill; the 24-month column is what they take if they're paying it down from a claim check.

Terms

  • Pricing valid for 30 days from 2026-04-26; lock with 25% deposit ($4,449 on Good)
  • Warranty: 6-yr workmanship (Good), 10-yr (Better), 25-yr (Best); manufacturer warranty per tier
  • Payment: 25% deposit / 50% at dry-in / 25% at completion
  • Exclusions: decking replacement (priced separately on discovery), landscape damage waiver, HOA fees
  • Pricing reflects current market conditions including the 2026 Section 232 steel/aluminum surcharge on metal accessories per market_conditions.active_tariffs.

Transparent-Quote Benchmark (triggered: homeowner arrived with a $14,900 itemized instant quote from an AI-native direct-to-consumer roofing platform — material at cost + standardized labor + flat platform fee)

Their number: $14,900. Ours (Good tier): $17,794. Difference: $2,894 (+19.4%). What that $2,894 buys:

What the platform number includesWhat this estimate addsVerifiable how
Material + installW-2 crew, workers' comp + $2M general liability carried by us — not a 1099 crew sourced per jobTX license #RC-0481234; COI emailed on request
6-yr workmanship warranty we service — same phone number, same crewWritten warranty document, signed at contract
GAF standard shingle warrantyGAF System Plus / Golden Pledge tiers, unlocked only by our Master Elite certificationGAF certified-contractor lookup, by name
Frisco permit pulled ($325, line 11) and inspection scheduled; failed-inspection rework at our costPermit # provided at dry-in
Decking replacement priced on this estimate at $/sheet, not renegotiated mid-tear-offExclusions line above
A named project contact who answers in year four469-555-0142

"Their number and ours are buying different things. Theirs is a roof installed. Ours is a roof installed and stood behind for 6 years — $17,794 over a 30-year shingle works out to $593 a year of covered roof, and the Better tier drops that to $514. The $2,894 isn't margin on the shingle; it's the permit, the comp insurance, the certification that unlocks the manufacturer warranty, and the fact that we're still here in year four."

Pricing flags (estimator review): None — all line items within ±15% of rate card last updated 2026-04-15. Competing $14,900 platform number is below our cost basis on like-for-like scope once permit ($325), dump ($475), and W-2 labor burden are restored to it — the delta is real scope, not our margin. Hold the number; do not discount to meet it.

Assumptions: Pitch confirmed at 6:12 from field notes. Single-layer tear-off confirmed. Frisco permit rate from rates.permit_rate. Dumpster sized at 15 yd from dump.bundles_per_yard × 84 bundles ÷ 6 = 14 yd, rounded up. Transparent-Quote Benchmark triggered by the customer-supplied competing quote; the platform's line-item breakdown was read from the homeowner's copy and not reproduced here — only our own cost structure is shown.

Example Output — Metal (32-sq, 9:12 standing seam, Frisco TX)

Estimate #2026-EST-0507 — Park Residence 4815 Bluebonnet Trail, Frisco, TX 75033 Date: 2026-05-07 | Valid through: 2026-06-06 (30 days from rates.validity_window_days)

Scope: Full tear-off (single layer asphalt) and replacement with 24-gauge standing-seam metal — 32-square 9:12 pitch (steep — Tier-A crew + 4-anchor-point fall-protection per crew-schedule-optimizer flag) on a 2-story residence with two dormers and a detached garage tied in. Includes 260 lf drip edge, 480 lf high-temp ice & water shield (IRC R905.1.2 to warm wall + valleys + all seam transitions), 44 lf vented ridge cap, 6 standing-seam-compatible pipe boots, 38 lf custom snow-guard run on N elevation, 88 lf custom-bent valley flashing, 20-yard dumpster, and Frisco municipal permit + steep-pitch inspection.

Line-Item Detail (Good Tier — 24-ga PVDF painted steel)

#Line ItemQtyUnit$/UnitTotal
1Tear-off, single layer asphalt32sq$90$2,880
224-ga PVDF standing-seam install (16" panel)32sq$1,180$37,760
3High-temp synthetic underlayment (metal-rated)3,200sf$0.78$2,496
4High-temp ice & water shield480lf$2.35$1,128
5Drip edge (matching PVDF, custom bent)260lf$3.80$988
6Vented ridge cap (matching profile)44lf$24.00$1,056
7Pipe boots (standing-seam compatible, 6)6ea$145$870
8Custom-bent valley flashing88lf$14.50$1,276
9Snow guards (38 lf custom run, N elevation)38lf$32.00$1,216
10Dump (20 yd — metal + asphalt mixed)1ea$625$625
11Frisco permit + steep-pitch inspection1ea$475$475
Subtotal — Good$50,770

Tier Comparison

TierMaterialFinishWorkmanshipMfr WarrantyTotalΔ vs Good$/yr (40-yr proxy)
🥉 Good24-ga PVDF painted steel (Sheffield)Kynar 500 PVDF, 30-yr finish10 yr30-yr finish + 50-yr panel$50,770$1,269
🥈 Better24-ga Galvalume Plus (AK Steel)Galvalume Plus mill finish, 40-yr15 yr40-yr substrate$54,910+$4,140 (+8.2%)$1,098
🥇 Best16-oz copper, hand-soldered seamsNatural patina25 yrLifetime substrate (75-yr proxy)$112,400+$61,630 (+121%)$1,499

Lifecycle Cost Note Better tier costs $4,140 more upfront but $171/year less over its expected 40+-yr life — the Galvalume substrate eliminates the 30-yr finish-failure repaint cycle that PVDF requires at year 25–30 (typical $8k–$12k repaint cost on this size roof). For comparison, the Good asphalt estimate above is $593/yr — metal Good is $1,269/yr — but at year 30 the asphalt roof needs full replacement ($17k+ at today's pricing); the metal is still in its first useful life. Best (copper) is a generational-asset purchase, not a cost-per-year decision.

Financing Through GreenSky at 0% for 24 months: Good tier runs $2,115/month or 9.99% APR for 144 months at $601/month. Better tier at $650/month over 144 months. Best tier at $1,331/month over 144 months. (Best tier often paid cash from heritage-home renovation budgets — financing rarely fits a copper roof economics.)

Terms

  • Pricing valid for 30 days from 2026-05-07; lock with 25% deposit ($12,693 on Good, $14,003 on Better, $28,100 on Best)
  • Warranty: 10-yr workmanship (Good), 15-yr (Better), 25-yr (Best); manufacturer warranties per tier
  • Payment: 25% deposit / 50% at dry-in (metal panel arrives ~14 biz days after deposit lock — custom roll-form) / 25% at completion
  • Steep-pitch flag (9:12): Tier-A crew required (Jones), 4-anchor-point OSHA 1926 Subpart M fall protection, +1 install day vs 6:12 pitch
  • Lead time: 14 biz days from deposit to material delivery (custom roll-form metal); 6:12 asphalt by contrast ships next day
  • Exclusions: decking replacement (priced separately on discovery), landscape damage waiver, HOA fees, gutter detach/reset (separate quote)
  • Pricing reflects current market conditions: 2026 Section 232 steel/aluminum surcharge per market_conditions.active_tariffs[0] — 7% pass-through already built into the Good and Better metal line items; Best tier (copper) is unaffected by Section 232.

Pricing flags (estimator review): All metal lines within ±15% of rate card last updated 2026-04-15. Sanity check: $50,770 / (32 sq × 100 sf/sq) = $15.87/sf — inside the $10–$18/sf metal sanity band. Better at $17.16/sf — top of band, expected for Galvalume. Best at $35.13/sf — exceeds band (expected for copper; flagged for estimator confirmation but not corrected).

Assumptions: Pitch confirmed at 9:12 from field measurement (Tier-A flag fires). Two dormers + detached garage tie-in confirmed from drone scan. Permit + steep-pitch inspection rate from rates.permit_rate + rates.steep_pitch_inspection_addendum. Dumpster sized at 20 yd vs 15 yd from dump.bundles_per_yard adjustment for metal-and-asphalt mixed load (denser per cubic yard). Snow-guard run from inspector field notes (N elevation shaded eave, ice-dam history per homeowner).

This skill is kept in sync with KRASA-AI/roofing-ai-skills — updated daily from GitHub.