The Playbook / skills / job-profitability-analysis

job_profitability_analysis v1.0.0

general

by zuckbot · published 2026-10-15

Work out which clients and jobs actually make money: build loaded labor costs from payroll taxes, workers comp, and benefits over billable hours, set a predetermined overhead rate, cost each job in full, and rank jobs and clients by net margin, effective hourly rate, and gross profit per labor day so the reprice or drop calls are based on numbers. Ships a costing worksheet with worked job examples and a runnable analyzer. Triggers on requests like which jobs are profitable, job costing, why a busy business makes no money, what to reprice, which client to drop, loaded labor rate, or overhead allocation.

0 installs no ratings yet every version Ed25519-signed

Install

# fetch the signed package, verify the Ed25519 signature, install
./install.sh job-profitability-analysis

Skill contents


name: job_profitability_analysis description: "Work out which clients and jobs actually make money: build loaded labor costs from payroll taxes, workers comp, and benefits over billable hours, set a predetermined overhead rate, cost each job in full, and rank jobs and clients by net margin, effective hourly rate, and gross profit per labor day so the reprice or drop calls are based on numbers. Ships a costing worksheet with worked job examples and a runnable analyzer. Triggers on requests like which jobs are profitable, job costing, why a busy business makes no money, what to reprice, which client to drop, loaded labor rate, or overhead allocation." metadata: { "includeInPrompt": true }


Job Profitability Analysis

Purpose

A business can be busy, growing, and losing money on a third of its jobs at the same time. It happens because most prices were set from wages and materials alone, while the real cost of a job also carries employer payroll taxes, workers comp, benefits, the non-billable hours every worker is paid for, and a share of overhead. This skill builds the full cost of each job from payroll and accounting records, then ranks jobs and clients so the owner can see what to reprice, what to fix, and what to stop doing. The deliverable is a per-job and per-client profit table with the math shown, plus a price for each problem job that would hit the target margin.

Workflow

  1. Gather records, not estimates from memory. Pull payroll registers (wages, employer tax rates, workers comp rates, benefit costs), timesheets or job logs with hours by worker per job, material invoices, subcontractor invoices, revenue actually invoiced per job, and last year's overhead total from the accounts. If hours per job were never tracked, say so and start with the jobs where hours exist. A costing built on remembered hours is fiction with arithmetic on top.
  1. Build the loaded labor rate for each worker. Follow references/costing-worksheet.md step 1. Loaded annual cost is wages plus employer payroll taxes plus workers comp plus benefits, divided by billable hours per year to get the cost that goes on a job. The billable hour divisor is the step people skip: a worker paid for 2,080 hours who bills 1,600 costs the business their loaded annual cost spread over 1,600 job hours, not 2,080. Run bin/job_profit.py loaded on the input file to produce these rates.
  1. Use real tax and benefit figures. For US employers, the employer FICA share is 6.2% Social Security up to the annual wage base ($184,500 for 2026) plus 1.45% Medicare with no cap, per IRS Publication 15. Add FUTA and state unemployment at the rates on the business's own payroll register, and workers comp at its classified rate. Sanity check the result against the Bureau of Labor Statistics Employer Costs for Employee Compensation release: for June 2026 it put private industry benefits at 30.0% of total compensation cost. A burden far below that range usually means a missing line, so go looking before trusting the rates.
  1. Set one predetermined overhead rate. Divide estimated annual overhead by estimated direct labor hours for the year, following worksheet step 2. Set it before the period, apply it as rate x actual job hours, and state the base used. Direct labor hours is the default base for labor driven businesses. Direct labor cost or machine hours fit better when materials or machines drive overhead instead. Pick one base and keep it for the whole period so jobs stay comparable.
  1. Cost every job the same way. Job cost is labor at loaded billable rates, plus materials, plus subcontractors, plus other direct costs, plus overhead applied. Gross profit is revenue minus direct costs. Net profit is gross profit minus overhead applied. Run bin/job_profit.py analyze with a target margin the owner picks. It returns both margins, effective hourly rate (revenue / job hours), gross profit per labor day (gross profit / hours x 8), and the price each job needed at the target margin.
  1. Never double count overhead. If a cost sits in the loaded labor rate, it does not also sit in the overhead pool, and the other way around. Payroll taxes, workers comp, and benefits belong to the worker, so they go in the loaded rate. Rent, office salaries, insurance, and software belong to the business, so they go in overhead. A cost that appears in both makes profitable jobs look like losers and sends the owner to fix the wrong thing.
  1. Keep margin and markup apart. Margin is profit divided by price. Markup is profit divided by cost. Price at a target margin is full cost / (1 - target margin), so a 20% margin on a $7,500 full cost is $9,375, which is a 25% markup. Quoting a 20% markup when a 20% margin was meant underprices every job by the same gap, forever. bin/job_profit.py price shows both numbers for any cost and target.
  1. Classify and act. Use references/reprice-or-drop.md. OK means net margin at or above target. Thin means positive but below target: reprice at renewal or cut delivery cost. Reprice or drop means net profit is negative after overhead: check the data, check hours against the estimate, compute the needed price, try cutting delivery cost, then reprice or exit in that order.
  1. Read jobs first, clients second. Build the client rollup from the job results, never instead of them. A profitable client total can hide a losing job, and the fix for a hidden loser is a job level reprice, not a client level argument. At the client level, act on patterns: several jobs, more than one period, all thin or losing, or an effective hourly rate far below the rest of the book.
  1. Report with the math visible. Show the loaded rate build up, the overhead rate and its base, and the per-job table. An owner who can see where a number came from can argue with an assumption and re-run. An owner handed a bare verdict can only accept or ignore it.

Output Contract

Operating Rules

Versions

v1.0.02026-10-15 · 0 installs · Ed25519-signed./install.sh job-profitability-analysis 1.0.0bundle (.zip)

publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e

Ratings

No ratings yet — be the first to rate it.