Know Which jobs are actually making money

ProfitScout

We help contractors identify low-margin jobs, missed profit, and pricing issues fast.

ProfitScout Quick Check

Are you actually making money on this job?

Enter one completed or quoted job below and see your estimated profit, margin, and cost breakdown in seconds.

Enter Job Numbers

$
$
$
$
$

This is a quick estimate. It does not include taxes, owner salary, overhead allocation, or financing costs unless you add them under Other Costs.

Your Results

Be sure to enter your own numbers or fake ones where it says "e.g 1000"

function psFormatMoney(value) { return value.toLocaleString("en-US", { style: "currency", currency: "USD", maximumFractionDigits: 0 }); } function psFormatPercent(value) { return Math.round(value) + "%"; } function psGetNumber(id) { const value = parseFloat(document.getElementById(id).value); return isNaN(value) ? 0 : value; } function psSetBar(id, pct) { const safePct = Math.max(0, Math.min(pct, 100)); document.getElementById(id).style.width = safePct + "%"; } function calculateProfitScout() { const revenue = psGetNumber("ps-revenue"); const labor = psGetNumber("ps-labor"); const materials = psGetNumber("ps-materials"); const fuel = psGetNumber("ps-fuel"); const other = psGetNumber("ps-other"); if (revenue <= 0) { alert("Please enter job revenue before calculating."); return; } const totalCost = labor + materials + fuel + other; const profit = revenue - totalCost; const margin = (profit / revenue) * 100; const laborPct = (labor / revenue) * 100; const materialsPct = (materials / revenue) * 100; const fuelPct = (fuel / revenue) * 100; const otherPct = (other / revenue) * 100; document.getElementById("ps-empty-state").style.display = "none"; document.getElementById("ps-result-state").style.display = "block"; document.getElementById("ps-margin").textContent = psFormatPercent(margin); document.getElementById("ps-profit").textContent = psFormatMoney(profit); document.getElementById("ps-total-cost").textContent = "Total Cost: " + psFormatMoney(totalCost); document.getElementById("ps-labor-pct").textContent = psFormatPercent(laborPct); document.getElementById("ps-materials-pct").textContent = psFormatPercent(materialsPct); document.getElementById("ps-fuel-pct").textContent = psFormatPercent(fuelPct); document.getElementById("ps-other-pct").textContent = psFormatPercent(otherPct); psSetBar("ps-labor-bar", laborPct); psSetBar("ps-materials-bar", materialsPct); psSetBar("ps-fuel-bar", fuelPct); psSetBar("ps-other-bar", otherPct); const statusEl = document.getElementById("ps-status"); const insightEl = document.getElementById("ps-insight"); statusEl.className = "ps-kpi-status"; if (margin >= 30) { statusEl.textContent = "Healthy Margin"; statusEl.classList.add("ps-good"); insightEl.textContent = "This job appears to be priced well. Your margin is strong enough to protect profit after direct job costs."; } else if (margin >= 15) { statusEl.textContent = "Thin Margin"; statusEl.classList.add("ps-warning"); insightEl.textContent = "This job made money, but the margin is thin. A small labor overrun, material increase, or missed cost could wipe out a lot of the profit."; } else if (margin >= 0) { statusEl.textContent = "At Risk"; statusEl.classList.add("ps-warning"); insightEl.textContent = "This job is barely profitable. You may need to raise pricing, reduce labor hours, or build in more buffer on similar jobs."; } else { statusEl.textContent = "Losing Money"; statusEl.classList.add("ps-bad"); insightEl.textContent = "This job appears to be losing money based on the numbers entered. Pricing, labor, materials, or missed costs should be reviewed before quoting similar work."; } if (laborPct > 50 && margin < 30) { insightEl.textContent += " Labor is taking up more than half of revenue, which may be the biggest place to review first."; } else if (materialsPct > 50 && margin < 30) { insightEl.textContent += " Materials are taking up more than half of revenue, so supplier pricing or markup may need to be reviewed."; } }

Common Issues For Contractors

01.

No clear view of profits

You know revenue, but not always what’s left over after labor, materials, and other costs.


02.

Pricing is based on feel

A lot of jobs get priced off experience or habit instead of real margin data.


03.

Profit leaks are easily missed

Labor overruns, material costs, and small extras can quietly eat away at profit.

Most contractors know revenue — but not real profit

ProfitScout Takes the Guesswork Out of Job Profit

You don't want a huge tech stack or fancy software to learn. Just a window into how your jobs are performing. Within minutes, you can:

  • See which jobs are actually making money

  • Catch low-margin jobs before they stack up

  • Spot labor, material, and extra cost leaks

  • Price future jobs with more confidence

Built for those in the skilled trades

Ready to See the Full Dashboard?

The free job check above shows one job. The full ProfitScout dashboard adds deeper fields and insights so you can track every job, spot low-margin work, catch missed costs, and see where profit is leaking before it stacks up.

© ProfitScout. All rights reserved.