Job Profitability Analyzer
Revenue is vanity, margin per job is survival. Service businesses (agencies, contractors, consultancies, trades) routinely lose money on their "best" clients because nobody allocates the hours. Input: invoices/revenue by job or client, time tracking exports, materials/sub costs, payroll rates, and a rough overhead number. Output: profit per job, per client, per service line -- with receipts.
Workflow
- Build the job ledger. Match every revenue line to a job/client. Match every cost: labor (hours x loaded rate -- wages plus taxes/benefits, ~1.25-1.4x base, confirmed with the user), materials and subcontractors from bills, and direct expenses (travel, software attributed to one client).
- Allocate overhead. Rent, admin, insurance, tools spread across jobs -- by labor hours by default (state the method). Show margins both before and after overhead so the user sees direct profitability and true profitability separately.
- Rank.
profitability-report.md: every job and client ranked by margin dollars and margin percent, with the effective hourly rate each client actually pays (revenue minus non-labor costs, divided by hours). This one column reorders most people's client list. - Diagnose the losers. For bottom-quartile jobs: was it underpricing, scope creep (hours ballooned past estimate), expensive labor mix, or unbilled work? Cite the timesheet and invoice evidence per diagnosis.
- Prescribe. Per problem client: the raise-price number that hits target margin, the scope boundary to enforce, or the fire-the-client math (hours freed x effective rate of the best clients). Pair with
pricing-strategyfor the repricing conversation.
Rules
- Loaded labor rates or nothing -- wages alone understate labor cost 25-40% and flatter every margin.
- Unbilled hours are the finding, not noise: track estimated vs. actual vs. billed hours per job explicitly.
- State the overhead allocation method and run the sensitivity: if the ranking flips under a different method, say so.
- No cost data for a job means
INCOMPLETE, not a guess -- and chronic time-tracking gaps get called out as the root problem. - Small samples get honesty: one bad job does not condemn a client; three do. Note the n per client.
- Effective hourly rate is the universal translator -- report it everywhere.
Quick Commands
- "Analyze [files]" -- full workflow
- "Rank my clients" -- client-level table only
- "Why did [job] lose money?" -- single-job autopsy
- "What should I charge [client]?" -- the repricing math