Job costing
Revenue is what you charged. Cost is what it took. The gap between them is the only number that tells you whether a job - or a whole type of work - is worth doing again.
Professional and up. Reading it takes the budgets permission; the Profitability report takes the reports permission.
What counts as a cost
Job costing is its own ledger of what each job cost, computed from the documents you already keep. It’s only as good as what’s tied to the job:
- Labor - from time tracking. Settled time clocked against the job (including admin-corrected entries), at each person’s rate. If you’ve turned on overtime rules, labor also includes the overtime premium, shown as its own line under Labor (see below). Crew still on the clock show as a separate “on the clock” line on the job, never inside the total, so a job’s number doesn’t tick.
- Materials and other spend - expenses tied to the job (pinned, split across jobs, or split by line), bill lines, vendor credits (which give a cost back), categorized bank transactions split to the job, and the job’s own materials list.
Revenue is what you billed to the job - invoice lines less credit memos, net of tax. A job that was never invoiced falls back to its completion total, then its estimate, and the job says which one it’s showing.
Two things are deliberately not in the number: equipment usage (no per-job machine cost is computed) and payroll burden (labor is time × rate; wages posted through payroll are the same money and never count twice). Overhead is not allocated.
If a cost was never attached to a job, it isn’t in that job’s number. That’s the whole discipline: attach as you go. Attaching a cost to a job - or moving it to another one - is a job-costing change, not a bookkeeping entry: it never touches your books, so it works in a closed period too.
In Reports, the three job reports - Job Summary, Estimated vs. Actual and Profitability - sit in their own Job costing group and carry the Job costing claim, so a job’s margin is never read as a books figure. All three read this page’s engine, so a job’s number here and there is the same number, whether your books are native or in QuickBooks. So do the dashboard’s job-profitability card and the actuals on the Budgets page. See which reports follow the basis.
Estimated vs. Actual prices what a job was supposed to cost from the estimate itself: each line’s quantity times the cost breakdown (labor, materials, equipment, dump) on the service it names, straight from your catalog. A custom line carries a price and no cost, so a job whose estimate has one shows n/a for its estimated cost rather than a partial figure - and so does the report’s total row unless every job’s estimate can be costed.
Overtime premium
With the weekly or daily overtime rule on under Settings → Automation → Overtime, the hours past a threshold cost more than the base rate, and job costing prices that in. The premium is only the extra: overtime minutes × the person’s rate × (the multiplier − 1). The base wages are already in Labor, so a 1.5× overtime hour is the base rate plus a half-rate premium, and the two lines add up to the full overtime cost.
- Each rule has its own multiplier. Weekly overtime uses the weekly multiplier, daily overtime the daily one, and double time its own. An entry flagged as overtime by the crew or the office uses the weekly multiplier, or the daily one if only the daily rule is on. With neither overtime rule on, there is no premium.
- It’s a property of the week, not of one job. Overtime is counted per person over the Monday-start week on your workspace’s clock, using all of their settled time, not just the time on one job. The overage is then shared across that week’s hours in proportion to their minutes, so a Saturday job doesn’t carry the whole week’s overtime just because it was clocked last. Two jobs worked in the same overtime week each carry a share, and the shares add up to the cent.
- It settles when the week is over. Another entry later in the same week can change how the overage is shared, so a job’s labor can shift until that week ends. A completed job saves its labor when it’s completed, then LawnLedger saves it again once the week has closed (8 days after completion), so the saved figure includes the whole week’s overtime. After that it doesn’t change - an edit to old time shows on the job’s live costing, not in the saved figure.
- It’s the same number everywhere. The job’s cost lines, the Job Costing list and drawer, Profitability, Job Summary, the dashboard card, Budgets actuals and the Crew Performance report all include it.
Crew still on the clock are shown at their base rate, since the week’s overtime can’t be known until the time settles. The payroll export splits the same hours by the same rules, so what payroll pays and what the jobs cost line up.
Reading it
Open Books → Job Costing. For each job you get revenue, cost by type, and the margin left over.
What to look for:
- A job with negative margin. Either it was underpriced or it went badly. Both are worth knowing before you quote the same work again.
- Labor much higher than estimated. The estimate was optimistic, or the crew hit something unexpected. Ask which.
- Jobs with no cost at all. Almost always missing attachment, not free work.
Making it accurate
The number is downstream of habits, not settings:
- Crews clock in against the job, not just for the day.
- Material purchases get the job attached when categorized.
- Cost rates on your team are set to something real - wage plus payroll burden, not just the hourly wage.
Tips
- Compare like to like. Cleanups and mowing have different margins by nature; the useful comparison is one cleanup against another.
- Look at it monthly, not per job. One bad job is noise. A pattern across a service type is a pricing decision.