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

Subcontractor Crew Manager

Turn next week's sold jobs and your subcontract crew roster into four things a production manager can act on the same day: (1) a **compliance gate** that blocks any sub whose paperwork has lapsed before they touch a roof, (2) a **job-to-crew assignment** that fills in-house crews first and routes the rest to the best-qualified eligible sub, (3) a **work order + pay sheet** per subbed job with the per-square pay built up line by line (base + adders + holdback), and (4) a **sub performance scorecard** that turns completed-job results into a number you can use when the next storm surge forces you to choose who gets the work.

Saves ~40 min/weekintermediate Claude ยท ChatGPT ยท Gemini

๐Ÿงฐ Subcontractor Crew Manager

Purpose

Turn next week's sold jobs and your subcontract crew roster into four things a production manager can act on the same day: (1) a compliance gate that blocks any sub whose paperwork has lapsed before they touch a roof, (2) a job-to-crew assignment that fills in-house crews first and routes the rest to the best-qualified eligible sub, (3) a work order + pay sheet per subbed job with the per-square pay built up line by line (base + adders + holdback), and (4) a sub performance scorecard that turns completed-job results into a number you can use when the next storm surge forces you to choose who gets the work.

When to Use

  • Every week when production converts sold contracts into scheduled installs and some volume has to go to subs
  • After a hail event, when volume spikes past in-house capacity and new or rarely-used subs get called in (the moment compliance lapses slip through)
  • On pay day, to produce a pay sheet the office can reconcile against completion photos and actual decking counts instead of a sub's handwritten invoice
  • Monthly or quarterly, to rank subs before renegotiating per-square rates or deciding who gets first call next storm season

Required Input

  1. Jobs to place [blocking] โ€” for each: job ID, ZIP, squares, pitch (and how many squares are at the steep pitch if the roof is mixed), layers to tear off, stories, estimated decking sheets, target start date, and shingle line if different from your default
  2. Sub roster [blocking the first time; reuse after] โ€” for each sub crew: business name, crew size, per-square base rate and adders, holdback %, COI expiry dates (general liability and workers' comp or occupational-accident policy), whether a W-9 and signed subcontract are on file, and any manufacturer installer training the crew has completed. Paste it once and keep it with your notes; this skill does not assume a subcontractors[] block exists in config.yml.
  3. Completed-job results [optional โ€” only for the scorecard] โ€” per finished subbed job: start date vs scheduled, days on site vs planned, callbacks/leaks within 30 days, photo set complete (yes/no), any safety observation, homeowner complaint or review, actual decking sheets
  4. Margin guard [optional] โ€” the maximum sub labor you will pay as a % of the job's tear-off + install revenue. Default 30% if not given; flagged in the Assumptions footer.

Instructions

You are a production manager at {company.name} who has run sub crews for 15 years and has been burned by an uninsured crew at least once. Work through these steps in order and show your math.

Step 1 โ€” Compliance gate (runs before anything is assigned)

For every sub on the roster, check each item against the first install date of any job you might give them โ€” not today's date:

Gate itemPass rule
General liability COIExpiry date is after the last day the sub would be on site; {company.name} named as additional insured
Workers' comp / occupational accidentExpiry date is after the last day on site. A lapsed policy is an automatic block โ€” in many states statutory-employer rules make an uninsured sub's injured worker your comp claim, and in Texas (where comp is optional) it tends to arrive as a negligence suit against you instead
W-9 on fileYes
Signed subcontractYes, and it states the sub warrants workmanship for at least warranty.workmanship_years (your homeowner-facing warranty) with callback chargeback
Manufacturer install trainingRequired only when the job carries an enhanced manufacturer warranty from warranty.manufacturer_tiers[] โ€” confirm the crew installs to that manufacturer's spec; mark "confirm with rep" if the roster doesn't say

Output: one row per sub with ELIGIBLE / BLOCKED / ELIGIBLE-WITH-WARNING (warning = something expires within 14 days of the job). A BLOCKED sub gets nothing assigned, no matter how short-handed you are, and the output names exactly which document fixes it.

Step 2 โ€” Assign jobs

  1. In-house first. Fill crew_leads[] before using subs โ€” idle in-house crews cost you payroll whether they work or not. Use crew_size to judge which crew can take the larger or steeper job.
  2. Then eligible subs, matching: steep (8/12 and up) or two-story jobs โ†’ the sub whose roster shows that experience and the larger crew; enhanced-manufacturer-warranty jobs โ†’ only subs with confirmed manufacturer training.
  3. Stay inside service_area.zip_codes. A job outside it is flagged, not silently assigned.
  4. Never stack more squares on one sub in a day than their crew size can realistically tear off and dry-in (rule of thumb: ~5-6 squares per installer per day on a single-layer walkable roof; reduce for steep or two-layer). State the assumption if you use it.

Step 3 โ€” Work order + pay sheet for each subbed job

Work order (what the sub crew lead gets):

  • Job ID, address/ZIP, start date, homeowner contact only if your policy allows subs to contact homeowners (default: no โ€” all homeowner contact through {company.phone})
  • Scope: squares, pitch breakdown, layers, stories, est. decking
  • Materials (resolve from material_brands.*): shingle, underlayment, ice & water, starter, ridge cap, drip edge finish, nails; delivery per suppliers.delivery_window_default
  • Dumpster: debris bundles = squares ร— 3 (architectural) ร— layers; yards = bundles รท dump.bundles_per_yard; pick from dump.dumpster_sizes_yd[] (if the load exceeds the largest size, schedule two)
  • Site rules: muster point safety.muster_point; nearest hospital safety.nearest_hospital; fall protection required on every roof; photo set required (before / tear-off deck / dry-in / flashing details / finished / magnet-sweep) โ€” no photos, no pay release
  • Hand-off note: point the crew lead to ai-jobsite-hazard-planner output if one was generated for this job

Pay sheet โ€” build pay line by line, never as a lump sum:

LineBasis
Base install (incl. 1-layer tear-off)squares ร— base rate
Steep addersteep squares ร— adder for that pitch band
Extra layer tear-offsquares ร— extra-layer rate ร— (layers โˆ’ 1)
Two-story addersquares ร— adder
Decking laborestimated sheets ร— rate now; trued up to the photo-documented count at completion
Grosssum
Holdbackgross ร— holdback % โ€” released 30 days after completion if no callback
Payable at completiongross โˆ’ holdback

Then the margin guard: sub labor รท (squares ร— (rates.tearoff_per_square + the install rate for the shingle line, e.g. rates.install_per_square_architectural)). If above the guard %, flag it with the number โ€” do not quietly accept it.

Lien waiver: pay only against a signed waiver. In Texas, use the statutory conditional waiver form for the progress/final payment and collect the unconditional form once funds clear (Tex. Prop. Code ch. 53, subch. L). In other service_area.licensed_states, say "use your state's required lien-waiver form" rather than guessing a form.

Step 4 โ€” Sub performance scorecard (when completed-job results are supplied)

Score each sub 0-100 across their completed jobs in the period:

FactorWeightScoring
Callbacks / leaks within 30 days3030 if zero; โˆ’15 per callback; floor 0
On-time start15share of jobs started on the scheduled day ร— 15
Days on site vs plan1515 if at/under plan on all jobs; โˆ’5 per job that ran a day+ over
Photo set complete15share of jobs with full photo set ร— 15
Safety observations1515 if none; 0 if any fall-protection observation
Homeowner experience1010 if no complaint; 5 if a complaint resolved; 0 if unresolved or a public negative review tied to crew conduct

Bands: 85-100 First call ยท 70-84 Standard ยท 50-69 Probation (fewer, simpler jobs; review in 30 days) ยท <50 Do not assign. Any fall-protection observation also triggers a written corrective conversation regardless of score. Show each sub's factor points, not just the total.

Output rules

  • Tables first, then a 3-5 line "Production manager actions" list (who to call, what document to chase, what to re-check Friday)
  • Write in voice โ€” plain, direct, no hedging
  • End with an Assumptions footer listing every value that came from the user's input or a default rather than from config.yml
  • If a blocking input is missing, ask once for exactly that item โ€” don't stall the rest of the plan

Example Output โ€” week of Oct 19, 2026, four sold jobs, two in-house crews, two subs

Inputs (illustrative): Jobs J-1041 (75034, 32 sq, 6/12, 1 layer, 1-story, est. 4 sheets, start Mon 10/19), J-1042 (75093, 41 sq, 18 sq at 9/12 + 23 sq at 6/12, 2 layers, 2-story, est. 6 sheets, start Tue 10/20), J-1043 (75070, 26 sq, 7/12, 1 layer, start Mon 10/19), J-1044 (75002, 24 sq, 6/12, 1 layer, start Tue 10/20). All GAF Timberline HDZ; none carry an enhanced manufacturer warranty. Subs: Lone Star Install Co. (crew 7; $78/sq base incl. 1-layer tear-off; steep 8/12-9/12 +$10/sq, 10/12+ +$20/sq; extra layer +$15/sq; two-story +$5/sq; decking $25/sheet; 10% holdback; GL exp 2026-12-31; WC exp 2027-02-28; W-9 + subcontract on file) and Rios Roofing Services (crew 5; similar rates; GL exp 2026-11-30; WC expired 2026-10-01).

1. Compliance gate

SubGL COIWorkers' compW-9SubcontractStatus
Lone Star Install Co.โœ… to 12/31/26โœ… to 2/28/27โœ…โœ… (6-yr workmanship warranty clause)ELIGIBLE
Rios Roofing Servicesโœ… to 11/30/26โŒ expired 10/1/26โœ…โœ…BLOCKED โ€” needs a current workers' comp or occupational-accident certificate naming Acme Roofing & Restoration LLC before any assignment

2. Assignments

JobZIPSquares / pitch / layers / storiesAssigned toWhy
J-10437507026 sq ยท 7/12 ยท 1 ยท 1-storyDale Whitmore (in-house, crew 5)In-house first; simple walkable roof
J-10447500224 sq ยท 6/12 ยท 1 ยท 1-storyHector Ramirez (in-house, crew 6)In-house first
J-10417503432 sq ยท 6/12 ยท 1 ยท 1-storyLone Star Install Co.Only eligible sub; Mon start
J-10427509341 sq ยท 18 sq @ 9/12 ยท 2 ยท 2-storyLone Star Install Co.Steep + 2-layer + 2-story โ†’ larger crew; starts Tue after J-1041 is dried in. Plan 2 days (41 sq ร— 2 layers is beyond one day for a 7-person crew)

All four ZIPs are inside the service area. Rios gets nothing this week.

3. Work order + pay sheet โ€” J-1042 (Lone Star Install Co.)

Work order: 41 sq (18 sq at 9/12, 23 sq at 6/12), 2-layer tear-off, 2-story. Materials: GAF Timberline HDZ, GAF Tiger Paw underlayment, GAF StormGuard ice & water, GAF Pro-Start starter, GAF TimberTex ridge cap, aluminum brown drip edge, 1-1/4" electro-galvanized coil nails โ€” delivered next-day before 7 AM curbside. Dumpster: 41 ร— 3 ร— 2 = 246 debris bundles รท 4 = 61.5 yd โ†’ exceeds the 40-yd max, so one 40-yd + one 30-yd (70 yd). Muster point: northeast corner of the driveway, at the mailbox. Nearest hospital: Baylor Scott & White Medical Center โ€“ Frisco, 5601 Warren Pkwy. Fall protection on every elevation; full photo set required. No direct homeowner contact โ€” refer questions to 469-555-0142.

LineMathAmount
Base install (incl. 1-layer tear-off)41 ร— $78$3,198.00
Steep adder (9/12)18 ร— $10$180.00
Extra layer tear-off41 ร— $15 ร— (2 โˆ’ 1)$615.00
Two-story adder41 ร— $5$205.00
Decking labor (estimate)6 ร— $25$150.00
Gross$4,348.00
Holdback 10% (release ~30 days after completion if no callback)$4,348 ร— 0.10โˆ’$434.80
Payable at completion$3,913.20

Margin guard: tear-off + install revenue = 41 ร— ($80 + $385) = $19,065 โ†’ sub labor $4,348 รท $19,065 = 22.8% โœ… under 30%.

J-1041 (Lone Star) pay sheet, short form: base 32 ร— $78 = $2,496.00 + decking 4 ร— $25 = $100.00 โ†’ gross $2,596.00; holdback $259.60; payable $2,336.40. Margin: $2,596 รท (32 ร— $465 = $14,880) = 17.4% โœ…. Dumpster: 32 ร— 3 ร— 1 = 96 bundles รท 4 = 24 yd โ†’ 30-yd.

Decking is paid on the photo-documented count: if J-1042's tear-off-deck photos show 9 sheets replaced, the line trues up to 9 ร— $25 = $225 and gross becomes $4,423.00. Pay against a signed Texas statutory conditional waiver; collect the unconditional waiver after the payment clears.

4. Sub scorecard โ€” Q3 2026 (completed jobs)

SubCallbacks (30)On-time (15)Days vs plan (15)Photos (15)Safety (15)Homeowner (10)TotalBand
Lone Star Install Co. (9 jobs)0 callbacks โ†’ 308/9 โ†’ 13.31 job over โ†’ 109/9 โ†’ 15none โ†’ 15none โ†’ 1093.3First call
Rios Roofing Services (6 jobs)1 callback โ†’ 156/6 โ†’ 150 over โ†’ 154/6 โ†’ 10none โ†’ 151 resolved โ†’ 575.0Standard

Rios is a solid Standard sub whose only problem this week is paperwork โ€” fix the certificate and they're back in the rotation.

Production manager actions

  1. Call Rios today: send the current workers' comp / occupational-accident certificate naming Acme Roofing & Restoration LLC. Until it arrives, Rios stays blocked โ€” even if the storm calendar fills up.
  2. Confirm Lone Star can run J-1041 Monday and J-1042 Tueโ€“Wed with all 7 on site; J-1042 is steep, two-layer, and two-story.
  3. Book the 40-yd + 30-yd for J-1042 and the 30-yd for J-1041.
  4. Friday: check the J-1041 photo set and decking count before releasing $2,336.40.
  5. Put the Lone Star holdbacks ($259.60 + $434.80) on the calendar for release ~30 days after each job completes.

Assumptions footer for this run

  • Sub roster, rates, COI dates, and job details came from the user's input โ€” no subcontractors[] block exists in config.yml and none was invented.
  • Margin guard 30% is the skill default (not supplied).
  • Q3 scorecard inputs (job counts, callbacks, photo completion) are illustrative.
  • Crew-day capacity (~5-6 sq per installer per day, single layer, walkable) is a planning rule of thumb, not a config value.
  • From config: company name and phone, crew_leads[] (Hector Ramirez crew 6, Dale Whitmore crew 5), service_area.zip_codes, rates.tearoff_per_square ($80) and rates.install_per_square_architectural ($385), material_brands.*, suppliers.delivery_window_default, dump.*, safety.*, warranty.workmanship_years (6).

Related Skills

  • operations/crew-schedule-optimizer โ€” plans the in-house crews' week; run it first, then use this skill for the overflow
  • operations/ai-jobsite-hazard-planner โ€” pre-job hazard plan to attach to a sub's work order
  • operations/material-order-calculator โ€” the material quantities behind the work order
  • admin/insurance-supplement-writer โ€” if a sub's tear-off photos show more decking than the carrier scoped, the photo-documented count is supplement evidence

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