📐 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:
- Measurements — Roof squares, pitch, number of layers, linear feet of eave/rake/ridge/valley/flashing
- Material selection — Shingle type/brand or material system, underlayment, and any upgrades (ridge vent, ice & water shield, drip edge, etc.)
- Job scope — Tear-off vs. overlay, number of stories, access difficulty, dumpster needs, permit requirements
- Customer info — Name, address, and any special notes (HOA requirements, color preferences, insurance claim number)
- 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 blockrates.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); addrates.tearoff_per_layer_premiumfor each additional layerrates.dump_fee— base dumpster cost; cross-reference withdump.dumpster_sizes_yd[]anddump.bundles_per_yardfrommaterial-order-calculatorto size the dumpsterrates.permit_rate— typical municipal permit cost (flat or % of contract)rates.repair_minimum— floor for any repair invoicerates.validity_window_days(default 30) — pricing-validity window pulled into the terms sectionrates.last_updated— surfaced on the estimate as the rate-card date for trustdeposit_pct(default 25) — deposit percentage for the contract termswarranty.workmanship_years,warranty.manufacturer_tiers[]— warranty block in the terms sectionfinancing.partners[]— partner name, APR terms, typical monthly payment on a $15k job — surfaced in the "Financing" line under each tiervoice— communication tonemarket_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:
- Review all measurements and job scope details
- Ask clarifying questions only for critical missing items (e.g., unknown pitch or layer count)
- 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
- 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 thetariff-price-adjusterskill for detailed pricing communication. - Price validity window: Include
rates.validity_window_days(default 30) explicitly in the terms section
- Per-square pricing outside the normal range for the material type (±15% from
- 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"
- Build the formatted estimate with all line items, totals, and terms
- 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 Item | Quantity | Unit | $/Unit | Line Total |
|---|---|---|---|---|---|
| 1 | Tear-off (single layer) | 28 | sq | $80 | $2,240 |
| 2 | Architectural shingle install | 28 | sq | $385 | $10,780 |
| 3 | Synthetic underlayment | 2,800 | sf | $0.55 | $1,540 |
| 4 | Ice & water shield (eaves + valleys) | 420 | lf | $1.85 | $777 |
| 5 | Drip edge | 220 | lf | $2.40 | $528 |
| 6 | Starter strip | 140 | lf | $1.95 | $273 |
| 7 | Ridge vent + cap | 38 | lf | $9.50 | $361 |
| 8 | Pipe boots (3) | 3 | ea | $85 | $255 |
| 9 | Step flashing replacement | 32 | lf | $7.50 | $240 |
| 10 | Dump / debris removal (15 yd) | 1 | ea | $475 | $475 |
| 11 | Permit | 1 | ea | $325 | $325 |
| Subtotal — Good (30-yr Architectural) | $17,794 |
4. Tier Comparison Table
| Tier | Material | Workmanship | Mfr Warranty | Total | Δ vs Good | $/yr |
|---|---|---|---|---|---|---|
| 🥉 Good | GAF Timberline HDZ (30-yr) | 6 yr | StainGuard Plus | $17,794 | — | $593 |
| 🥈 Better | GAF Timberline UHDZ (Lifetime) | 10 yr | System Plus | $20,540 | +$2,746 (+15.4%) | $514 |
| 🥇 Best | GAF Grand Sequoia (Designer) | 25 yr | Golden 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 includes | What this estimate adds | Verifiable how |
|---|---|---|
| Material + install | W-2 crew with workers' comp and general liability carried by us | License #{company.license_number}; COI on request |
| — | {warranty.workmanship_years}-yr workmanship warranty we service ourselves | Written warranty document, signed at contract |
| Manufacturer standard warranty | {warranty.manufacturer_tiers[]} enhanced tier, unlocked by our certification | Manufacturer's certified-contractor lookup |
| — | Permit pulled, inspection scheduled, failed-inspection rework at our cost | Permit # provided at dry-in |
| — | Decking discovery priced at the rate on this estimate, not renegotiated mid-job | The 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.mdif 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 Item Qty Unit $/Unit Total 1 Tear-off, single layer 28 sq $80 $2,240 2 GAF Timberline HDZ install 28 sq $385 $10,780 3 Synthetic underlayment 2,800 sf $0.55 $1,540 4 Ice & water shield 420 lf $1.85 $777 5 Drip edge 220 lf $2.40 $528 6 Starter strip 140 lf $1.95 $273 7 Ridge vent + cap 38 lf $9.50 $361 8 Pipe boots (3) 3 ea $85 $255 9 Step flashing 32 lf $7.50 $240 10 Dump (15 yd) 1 ea $475 $475 11 Frisco permit 1 ea $325 $325 Subtotal — Good $17,794 Tier Comparison
Tier Material Workmanship Mfr Warranty Total Δ vs Good $/yr 🥉 Good GAF Timberline HDZ (30-yr) 6 yr StainGuard Plus $17,794 — $593 🥈 Better GAF Timberline UHDZ (Lifetime) 10 yr System Plus $20,540 +$2,746 (+15.4%) $514 🥇 Best GAF Grand Sequoia (Designer) 25 yr Golden 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)
Tier Total 0% APR / 24 mo 9.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 includes What this estimate adds Verifiable how Material + install W-2 crew, workers' comp + $2M general liability carried by us — not a 1099 crew sourced per job TX license #RC-0481234; COI emailed on request — 6-yr workmanship warranty we service — same phone number, same crew Written warranty document, signed at contract GAF standard shingle warranty GAF System Plus / Golden Pledge tiers, unlocked only by our Master Elite certification GAF certified-contractor lookup, by name — Frisco permit pulled ($325, line 11) and inspection scheduled; failed-inspection rework at our cost Permit # provided at dry-in — Decking replacement priced on this estimate at $/sheet, not renegotiated mid-tear-off Exclusions line above — A named project contact who answers in year four 469-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 Item Qty Unit $/Unit Total 1 Tear-off, single layer asphalt 32 sq $90 $2,880 2 24-ga PVDF standing-seam install (16" panel) 32 sq $1,180 $37,760 3 High-temp synthetic underlayment (metal-rated) 3,200 sf $0.78 $2,496 4 High-temp ice & water shield 480 lf $2.35 $1,128 5 Drip edge (matching PVDF, custom bent) 260 lf $3.80 $988 6 Vented ridge cap (matching profile) 44 lf $24.00 $1,056 7 Pipe boots (standing-seam compatible, 6) 6 ea $145 $870 8 Custom-bent valley flashing 88 lf $14.50 $1,276 9 Snow guards (38 lf custom run, N elevation) 38 lf $32.00 $1,216 10 Dump (20 yd — metal + asphalt mixed) 1 ea $625 $625 11 Frisco permit + steep-pitch inspection 1 ea $475 $475 Subtotal — Good $50,770 Tier Comparison
Tier Material Finish Workmanship Mfr Warranty Total Δ vs Good $/yr (40-yr proxy) 🥉 Good 24-ga PVDF painted steel (Sheffield) Kynar 500 PVDF, 30-yr finish 10 yr 30-yr finish + 50-yr panel $50,770 — $1,269 🥈 Better 24-ga Galvalume Plus (AK Steel) Galvalume Plus mill finish, 40-yr 15 yr 40-yr substrate $54,910 +$4,140 (+8.2%) $1,098 🥇 Best 16-oz copper, hand-soldered seams Natural patina 25 yr Lifetime 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 fromdump.bundles_per_yardadjustment 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).