How safety managers in subcontracting firms track crew productivity, per diem costs, and labor hours to staff safely and control compliance expenses.
Andrew Grosser
June 9, 2026 • 11 min read
How safety managers in subcontracting firms track crew productivity, per diem costs, and labor hours to staff safely and control compliance expenses.
You're managing a five-person crew on a highway resurfacing job 180 miles from the shop. OSHA requires daily documentation of labor hours, safety training compliance, and equipment inspections. Meanwhile, your controller wants precise per diem tracking because hotel and meal costs are eating 22% of the labor budget. You need accurate labor hour estimates before the crew leaves — too few workers and you're non-compliant on coverage ratios; too many and the per diem costs kill profitability. The spreadsheet you built last year has 47 tabs and breaks every time county wage rates change.
Sourcetable's AI data analyst is free to try. Sign up here.
Safety managers at subcontracting firms don't just track incidents — they control crew productivity data, staffing levels, and compliance costs. When a road construction project requires 12-hour shifts in a different county, you're responsible for three simultaneous calculations: minimum crew size to meet OSHA coverage requirements, total labor hours for the estimate, and per diem costs for out-of-town assignments.
Here's the manual process most safety managers follow for a typical bridge deck repair project:
The math looks like this for labor cost alone:
| Component | Calculation | Cost |
|---|---|---|
| Regular hours (636 hours × $41.75) | 636 × $41.75 | $26,553 |
| Overtime hours (112 hours × $62.63) | 112 × $62.63 | $7,015 |
| Travel time (14 workers × 7 hours × $41.75) | 98 × $41.75 | $4,092 |
| Per diem (lodging + meals) | — | $16,912 |
| Total Labor + Per Diem | — | $54,572 |
This calculation takes 90 minutes in Excel when you account for looking up current county wage rates, checking the Davis-Bacon prevailing wage database, and verifying OSHA staffing minimums. If the project manager changes the crew size from 14 to 16 workers, you rebuild the entire estimate. When the estimator asks for a scenario with 10-hour shifts instead of 12-hour shifts, you start over.
Per diem costs are the silent profit killer on out-of-town jobs. A $450,000 concrete foundation project with a 12-person crew working 15 days away from home base generates $27,000 in per diem expenses at $150/day per worker. That's 6% of the contract value before accounting for labor, materials, or equipment.
Safety managers track per diem for two reasons: OSHA compliance documentation (proving workers had adequate rest facilities) and cost control (preventing budget overruns). The problem is that per diem rates vary by location, contract terms, and union agreements. The federal GSA per diem rate for Tulsa, Oklahoma in 2026 is $144/day ($89 lodging + $55 meals), but a union contract might specify $175/day regardless of location.
Here's what happens when per diem estimates are wrong:
| Scenario | Estimated Cost | Actual Cost | Variance |
|---|---|---|---|
| Used wrong GSA rate ($96 instead of $144) | $17,280 | $25,920 | -$8,640 |
| Forgot weekend days (2 extra days) | $21,600 | $25,056 | -$3,456 |
| Didn't account for crew size increase (12 to 14) | $25,920 | $30,240 | -$4,320 |
A 15% error in per diem estimates on a $600,000 project costs $4,050 in unbudgeted expenses. Across 12 projects per year, that's $48,600 in lost margin — enough to fund a full-time safety coordinator position.
Safety managers need a template that handles four variables simultaneously: crew size, labor hours by task, county wage rates, and per diem costs. Here's a step-by-step method for building one in a traditional spreadsheet:
Step 1: Create a county wage rate lookup table
Build a table with columns for County Name, Base Hourly Rate, Overtime Multiplier, and Effective Date. Link each estimate to this table using a VLOOKUP or INDEX-MATCH formula. Update the table when Davis-Bacon rates change (typically January 1 each year).
Step 2: Define task-based labor hour estimates
List each work task (excavation, forming, rebar placement, concrete pour, finishing) with estimated hours per unit. For example: "Place rebar: 0.18 hours per square foot." Multiply by project square footage to get total hours per task.
Step 3: Calculate crew size from OSHA requirements
Use a formula: =CEILING(Total_Workers/20, 1) to determine minimum safety monitors. Add confined space attendants, flaggers, and competent persons as needed. Total crew size = production workers + safety/compliance positions.
Step 4: Build per diem calculator
Create inputs for: crew size, project duration (days), distance from shop (miles), GSA per diem rate for location. Formula: =(Crew_Size × Project_Days × Per_Diem_Rate). Add travel days if distance exceeds 100 miles.
Step 5: Apply productivity factors
Out-of-town crews: 0.87 productivity multiplier. Overtime work: 0.92 productivity after 10 hours. Weather delays: add 8% to total hours for outdoor projects. Formula: =Base_Hours / Productivity_Factor.
This template works, but it requires manual updates every time wage rates change, GSA per diem rates adjust, or OSHA staffing requirements get revised. A typical safety manager maintains 6-8 different versions of this template for different project types (road work, bridge repair, utility installation, site grading).
Sourcetable's AI understands construction labor terminology, OSHA staffing requirements, and per diem calculations without requiring pre-built templates. Instead of maintaining multiple spreadsheet versions, you describe what you need in plain English and the AI builds the estimate.
For the bridge deck repair example, you'd type: "Build a labor estimate for a 14-person crew working 8 days in County B. Base wage $41.75/hour, overtime after 8 hours. Include per diem at $89/night lodging and $62/day meals. Add 7 hours travel time round-trip."
The AI generates a complete estimate table with regular hours, overtime hours, travel time, per diem costs, and total labor cost — in about 12 seconds. When the project manager asks for a version with 16 workers instead of 14, you type: "Recalculate with 16 workers." The entire estimate updates instantly.
Here's the time comparison for a typical estimate revision cycle:
| Task | Excel Time | Sourcetable Time |
|---|---|---|
| Initial estimate (14 workers, 8 days) | 90 minutes | 12 seconds |
| Revision 1: Change crew to 16 workers | 25 minutes | 4 seconds |
| Revision 2: Switch to 10-hour shifts | 30 minutes | 5 seconds |
| Revision 3: Update County B wage to $43.20 | 15 minutes | 3 seconds |
| Total time | 160 minutes | 24 seconds |
That's 2 hours 40 minutes reduced to 24 seconds — a 400x speed improvement. For a safety manager handling 15 estimates per month, that's 40 hours saved monthly, or one full work week.
OSHA compliance requires documentation of actual labor hours worked, not just estimates. Safety managers need to compare estimated hours against actual hours to identify productivity variances, prove adequate staffing levels, and justify per diem expenses during audits.
The traditional method involves three separate spreadsheets: the original estimate, daily timecards, and a variance analysis report. You manually transfer data from timecard exports into the variance report, then calculate percentage differences for each task. For a 12-day project with 14 workers and 8 distinct tasks, that's 1,344 individual timecard entries to reconcile (12 days × 14 workers × 8 tasks).
With Sourcetable, you upload the timecard export (CSV or Excel file) and type: "Compare actual hours to estimated hours by task. Show variance percentage and flag any tasks over 15% variance." The AI joins the two datasets, calculates variances, and highlights problem areas automatically.
Here's what a typical variance analysis looks like:
| Task | Estimated Hours | Actual Hours | Variance % | Status |
|---|---|---|---|---|
| Deck removal | 240 | 268 | +11.7% | Within tolerance |
| Rebar placement | 180 | 224 | +24.4% | Over variance |
| Concrete pour | 96 | 89 | -7.3% | Under budget |
| Curing and finishing | 120 | 134 | +11.7% | Within tolerance |
The rebar placement task shows a 24.4% variance — 44 hours over estimate. At $41.75/hour, that's $1,837 in unbudgeted labor cost. This variance might indicate a problem with the original productivity assumption (0.18 hours per square foot), or it could reveal a site condition issue (corroded existing rebar requiring extra removal time). Either way, you've identified the cost driver in 8 seconds instead of spending 45 minutes building a variance report manually.
Labor estimates don't exist in isolation — they're part of a complete project cost model that includes materials, equipment, and subcontractor costs. Safety managers often discover that a perfectly accurate labor estimate becomes useless when concrete prices jump 18% between bid date and project start.
Here's a real scenario from a utility installation subcontractor in 2025: The estimate assumed $145/cubic yard for ready-mix concrete based on March pricing. The project started in June, and concrete had increased to $171/cubic yard due to regional cement shortages. The 340-cubic-yard project went from $49,300 in concrete costs to $58,140 — an $8,840 increase that consumed the entire safety equipment budget and half the per diem allowance.
Safety managers need to track material price changes because they directly affect staffing decisions. When material costs spike, the project manager might reduce crew size to preserve margin — but that creates compliance problems if the reduced crew falls below OSHA minimum staffing ratios.
The manual approach is to maintain a material price tracking spreadsheet with weekly updates from suppliers. You check concrete prices, rebar prices, asphalt prices, and aggregate prices every Monday, then recalculate total project costs to see if the labor budget needs adjustment. This takes 60-90 minutes per week.
Sourcetable can pull live material pricing data from supplier databases or web sources, then automatically recalculate project costs when prices change. You set up a workflow that runs every Monday morning: "Update concrete, rebar, and asphalt prices from supplier database. Recalculate total project cost. If material cost increase exceeds 10%, flag for review."
The AI executes this workflow automatically, delivering an updated cost summary to your inbox every Monday at 8:00 AM. No manual data entry, no copy-paste errors, no forgotten updates.
Davis-Bacon prevailing wage rates change annually, and some states adjust county-specific rates quarterly. A labor estimate built in December 2025 using $38.50/hour for County C becomes instantly wrong on January 1, 2026 when the new rate takes effect at $41.25/hour. That's a 7.1% labor cost increase overnight.
For a $280,000 labor estimate, a 7.1% wage increase adds $19,880 to the project cost. If your bid was based on the old rate and you didn't include an escalation clause, you're absorbing that cost as lost margin.
Safety managers typically handle this by maintaining a wage rate reference table that gets updated manually when new rates publish. You download the Davis-Bacon wage determination from the Department of Labor website, copy the relevant county rates into your spreadsheet, and update all active estimates. For a subcontractor working in 8 different counties, this means updating 8 different wage rates across 15-20 active project estimates.
The process takes 2-3 hours quarterly, and there's always a risk of missing a county or using the wrong effective date. I've seen estimates that used the old rate for County D because the safety manager didn't realize the state had split County D into County D-North and County D-South with different wage schedules.
With Sourcetable, you build the wage rate table once, then update it by typing: "Update all county wage rates from the latest Davis-Bacon determination effective January 1, 2026." The AI can parse the PDF wage determination document, extract county-specific rates, and update your reference table automatically. Then you type: "Recalculate all active estimates using updated wage rates." Every estimate updates in seconds.
A highway widening project runs 11 weeks with a rotating crew schedule: 18 workers for weeks 1-4, 22 workers for weeks 5-8, and 14 workers for weeks 9-11. Workers rotate home every 14 days for a 3-day break, then return to the job site. Calculate total per diem costs.
The manual calculation requires tracking: work days per rotation (14 days on, 3 days off), crew size changes at specific week boundaries, and per diem rates that might differ for hotel vs company-provided housing. Here's the breakdown:
| Period | Crew Size | Work Days | Per Diem Rate | Total Cost |
|---|---|---|---|---|
| Weeks 1-4 (28 days) | 18 | 22 | $144 | $57,024 |
| Weeks 5-8 (28 days) | 22 | 22 | $144 | $69,696 |
| Weeks 9-11 (21 days) | 14 | 17 | $144 | $34,272 |
| Total Per Diem Cost (11 weeks) | $160,992 | |||
That's $160,992 in per diem costs alone — 26% of a $620,000 labor budget. A 10% error in this calculation ($16,099) wipes out the profit margin on many subcontracting jobs.
The complexity comes from the rotation schedule. Workers aren't on-site continuously for 11 weeks; they rotate home every 14 days. So weeks 1-4 actually have 28 calendar days but only 22 paid work days (accounting for the 3-day home rotation and weekends). Building this calculation in Excel requires careful date arithmetic and multiple IF statements to handle the crew size changes.
In Sourcetable, you describe the scenario: "Calculate per diem for an 11-week project. Crew size: 18 workers weeks 1-4, 22 workers weeks 5-8, 14 workers weeks 9-11. Workers rotate home every 14 days for 3 days. Per diem rate $144/day." The AI builds the calculation table, accounts for rotation schedules, and delivers the $160,992 total in seconds.
AI-generated labor estimates are fast and accurate for standard scenarios, but they require human oversight in three situations:
1. Unusual site conditions
If a bridge repair project requires night work only (to avoid traffic disruption), productivity drops by 15-20% due to lighting constraints and crew fatigue. The AI won't know about night-work productivity penalties unless you specify them explicitly. Always add: "Apply 0.82 productivity factor for night work" when describing the project.
2. Union contract variations
Some union agreements specify per diem rates that differ from GSA standards, or they require premium pay for work beyond 50 miles from the union hall. The AI uses standard GSA rates unless you provide the specific union contract terms. Keep a reference sheet with union-specific rates and include them in your estimate request.
3. Multi-trade coordination
When your concrete crew works alongside an electrical subcontractor and a steel erection crew, labor productivity can drop 8-12% due to coordination delays and shared work areas. The AI calculates single-trade productivity accurately but won't account for multi-trade interference unless you specify it.
The accuracy rate for AI-generated labor estimates on standard projects (single trade, normal hours, standard site conditions) is approximately 94-97% compared to manually built estimates. For complex projects with multiple special conditions, accuracy drops to 85-90% without human adjustments. Always review AI estimates for site-specific factors that affect productivity.
A civil grading subcontractor in Texas handles 8-12 active bids simultaneously, each requiring labor estimates for earthwork, compaction, and utility trenching. The safety manager is responsible for ensuring adequate crew sizes for trench safety compliance (OSHA 1926 Subpart P requires a competent person on-site whenever workers enter excavations 5 feet or deeper).
Here's the old workflow: The estimator sends a project scope (45,000 cubic yards of cut, 38,000 cubic yards of fill, 2,200 linear feet of storm drain trench). The safety manager looks up the county wage rate ($36.80/hour), calculates crew size (12 operators + 2 laborers + 1 competent person = 15 total), estimates hours (cut: 180 hours, fill: 150 hours, trenching: 95 hours), applies overtime (all work over 8 hours/day at 1.5x), and calculates per diem (project is 140 miles away, 9 days duration, $138/day rate). Total time: 75 minutes per estimate. With 10 active bids, that's 12.5 hours per week on labor estimates alone.
New workflow with Sourcetable: The estimator sends the same project scope via email. The safety manager pastes it into Sourcetable and types: "Build labor estimate for this grading project. Use County wage rate $36.80/hour, overtime after 8 hours. Crew: 12 operators, 2 laborers, 1 competent person. Project location is 140 miles from shop, 9 days duration, per diem $138/day. Show total labor cost and per diem separately."
The AI generates the complete estimate in 15 seconds. The safety manager reviews it for accuracy (verifying crew size meets OSHA requirements and per diem rate matches company policy), then sends it back to the estimator. Total time: 3 minutes per estimate. With 10 active bids, that's 30 minutes per week — a 96% time reduction.
Over a year, that's 600 hours saved (12.5 hours/week - 0.5 hours/week × 50 weeks). At a safety manager's loaded labor rate of $68/hour, that's $40,800 in annual labor cost savings — enough to fund comprehensive safety training programs for the entire crew.
Try Sourcetable's AI for free
References and data sources used in this article