Key takeaways
- Variance is actual minus estimate, so a positive number is over. On an invented 11.2 kW roof job, the original scope ran 433 USD (3.7%) over: 12,035 against 11,602 USD.
- Leave the change order cost in the same comparison and the job shows 1,235 USD (10.6%) over. Most of that gap is extra customer work, not an estimating error (example figures).
- Labour caused 208 USD of the 433 USD. Rate explains 132 USD and extra hours 76 USD (example).
- Example margin: 22.1% estimated and 19.2% actual on the original scope. With the change order priced it is 20.3%. Unpriced, 13.8%.
- Of 6 company pages read, 3 name job costing: Jonas, Acumatica and FOUNDATION. NetSuite, Payaca and Simpro name related functions only.
To track estimate against actual per job in software, compare the best solar EPC project management software (job level) or the best solar ERP software (company-wide).
Job costing at a glance
Job costing answers one question for each job: did it make the money the estimate said it would? Wikipedia defines it as accounting that tracks costs and revenues by job.
| Item | Detail |
|---|---|
| Unit of work | One job or contract, such as a roof install, a ground-mount phase or a service visit. |
| Cost groups | Labour, materials, subcontractors, equipment and overhead. Autodesk’s construction guide lists the same five. |
| Core formulas | Variance = actual - estimate. Margin = (revenue - cost) / revenue. |
| Standard or rule | None for solar. How to treat overhead or revenue in your accounts is a question for your accountant. |
| In software | Construction ERP, project tools and some solar suites. See the software table below or the best solar ERP software. |
Why does job costing matter for installers?
Company accounts hide weak jobs inside a healthy total. Job costing shows which jobs, job types or crews lose margin. It also feeds real figures back into the next estimate.
Payaca’s blog (25 August 2026) says install businesses often cost jobs from the quote, not from what was spent. It says the gap usually opens up in materials. It is a company blog, so treat it as a view, not a measurement.
Job costing draws on several records. Part lists come from the bill of materials and bill of quantities. Hours come from crew management and the work order. Stock draws come from inventory management. When cash moves is a separate view. See cash flow analysis.
How do you cost a job? Six steps
Fix the estimate first. Record every cost against the job as it happens. Then compare by cost group.
- Freeze the estimate by cost group. It is the baseline, so do not rewrite it later.
- Code every cost to the job: timesheets, supplier invoices, subcontractor bills and equipment hire. See purchase orders for the buying side.
- Allocate overhead. Wikipedia describes applying overhead with a rate and an allocation base, such as direct labour hours. Autodesk says it is often a percentage of direct costs or a fixed rate per job.
- Log each change order at once, with its own revenue and cost. Autodesk advises documenting the financial impact right away and updating the budget.
- Compute variances by group, then split labour and materials as shown below.
- Close out by comparing actuals with the estimate, as Autodesk advises. Use the gaps to fix the next estimate.
Linking costs to your ledger is covered on accounting integration.
How do you calculate variance and margin?
Variance is actual cost minus estimated cost. Split a labour or materials variance into a price part and a quantity part. They have different fixes.
OpenStax’s managerial accounting text (section 8.3 and 8.2) gives these formulas for standard costs in manufacturing. This page applies them to job estimates, as its own adaptation. OpenStax’s hours variance uses the standard hours allowed for the actual output. Our "estimated hours" equals that only for a fixed-scope job. If scope changes, use the change order’s own column.
- Labour rate variance = (actual rate - estimated rate) x actual hours.
- Labour hours (efficiency) variance = (actual hours - estimated hours) x estimated rate.
- Materials price variance = (actual price - estimated price) x actual quantity.
- Materials quantity variance = (actual quantity - estimated quantity) x estimated price.
The two parts add up to the total. OpenStax shows favourable results as negative numbers, and so does this page. Margin divides profit by revenue. Markup divides profit by cost. Buildertrend’s page (no date shown) shows a 20% markup as a 16.7% margin. It says a true 20% margin needs a 25% markup. Quote one or the other, and name it.
Worked example: an 11.2 kW roof job, estimate against actual
Every cost group ran over the estimate, and equipment had the largest percentage gap.
All inputs are example. That includes the 14,900 USD contract price, the loaded labour rates and an overhead rate of 22 USD per labour hour. The job is 28 modules of 400 W. Change order CO-1 (example) adds 1,200 USD of revenue and 802 USD of cost. It has its own column.
| Cost group (example) | Estimate (USD) | Actual, original scope (USD) | Variance (USD and %) | CO-1 cost (USD) |
|---|---|---|---|---|
| Labour (64 h at 38 estimated, 66 h at 40 actual, CO-1 6 h) | 2,432 | 2,640 | +208 (+8.6%) | 240 |
| Materials | 6,512 | 6,563 | +51 (+0.8%) | 180 |
| Subcontractors | 900 | 960 | +60 (+6.7%) | 250 |
| Equipment | 350 | 420 | +70 (+20.0%) | 0 |
| Overhead allocated (22 USD per labour hour) | 1,408 | 1,452 | +44 (+3.1%) | 132 |
| Total | 11,602 | 12,035 | +433 (+3.7%) | 802 |
Next, split three of the lines. The rail line is one materials item: 36 lengths at 14.50 USD estimated, 40 at 15.20 USD actual (example).
| Variance part (example) | Working | Result (USD) |
|---|---|---|
| Labour rate | (40 - 38) x 66 h | +132 |
| Labour hours | (66 - 64) x 38 | +76 |
| Rail price | (15.20 - 14.50) x 40 = 0.70 x 40 | +28 |
| Rail quantity | (40 - 36) x 14.50 | +58 |
| Overhead, from extra hours | (66 - 64) x 22 | +44 |
The rail line is 86 USD over. Cable and fittings came in 35 USD under, so net materials are 51 USD over. A net figure can hide a line that is wrong. The 44 USD of overhead is not extra cash spent. It shows up only because each of the two extra labour hours carries 22 USD.
| Case (example) | Revenue (USD) | Cost (USD) | Profit (USD) | Margin |
|---|---|---|---|---|
| Estimate | 14,900 | 11,602 | 3,298 | 22.1% |
| Actual, original scope | 14,900 | 12,035 | 2,865 | 19.2% |
| CO-1 alone | 1,200 | 802 | 398 | 33.2% |
| Whole job, CO-1 priced | 16,100 | 12,837 | 3,263 | 20.3% |
| Whole job, CO-1 not priced | 14,900 | 12,837 | 2,063 | 13.8% |
Figure 1. On an example job, an unpriced change order cuts margin to 13.8%, but pricing it lifts the job to 20.3%, against 19.2% on the original scope alone.
- Change orders need their own column. Without it, the headline overrun (1,235 USD, 10.6%) blames the estimate for extra scope.
- The overhead rate sets the margin level but barely moves the points lost. At 0, 22 and 44 USD per hour (example), the estimated margin is 31.6%, 22.1% and 12.7%. The loss on the original scope is 2.6, 2.9 and 3.2 points.
- The 33.2% on CO-1 is one example job, not a benchmark. It depends on how the change order was priced and on its overhead share. The 22.1% estimated margin equals a 28.4% markup on cost.
Check your own job
Enter your price, estimate, actual and change order figures. It opens with the example job above. It then prints the variance table, the labour split and four margins.
If the calculator does not load, open the job cost variance and margin calculator on its own page.
How solar software handles job costing
Of the three solar-focused companies, only Jonas names job costing on the page we read. Payaca and Simpro name related functions only. The table covers six company pages read in October 2026, one page each. "Yes" means the page names job costing. "Partly" means it names related functions but not job costing. Companies may document more elsewhere. The ERP page explains what these systems cover.
| Software | Job costing | Budgets and change orders | Page read |
|---|---|---|---|
| Jonas Construction | Yes | Budgets: named. Change orders: named. | Energy and solar contractors page. Last modified 4 December 2025 per metadata. |
| Acumatica | Yes | Budgets: named. Change orders: named. | Construction ERP page. Last modified 6 April 2026 per metadata. |
| FOUNDATION | Yes | Budgets: named. Change orders: named. | FOUNDATION modules guide. Shows 10 September 2026. |
| Oracle NetSuite | Partly | Budgets: named. Change orders: Not stated. | NetSuite modules page. Dated 13 February 2026. |
| Payaca | Partly | Budgets: Not stated. Change orders: Not stated. | UK features page lists "Project costing" under Finance and reporting. No date shown, copyright 2026. |
| Simpro | Partly | Budgets: Not stated. Change orders: Not stated. | Solar and renewable page names contract profitability reports and cost tracking by phase, not job costing. No date shown. |
Not stated: the page we cite does not say. Acumatica, FOUNDATION and NetSuite are general or construction tools, not solar-specific. For ranked tools, read the best solar ERP software and best solar EPC project management software lists. For ERP scope and licence wording, read ERP.
Common mistakes with job costing
FAQs
What is the difference between a budget and job costing?
The budget is the plan. Job costing records what each job actually cost and compares it with that plan. Without the estimate frozen as a baseline, the comparison means little.
How do you calculate job margin?
Subtract total job cost from revenue, then divide by revenue. In our example case, 14,900 USD of revenue less 11,602 USD of estimated cost leaves 3,298 USD, or 22.1%. Say whether overhead is in the cost.
Is allocated overhead a real cost on a job?
It is a share of company costs, not extra cash spent on that job. In our example only 44 USD of the 433 USD variance came from overhead. That came from two extra labour hours.
How do change orders affect job margin?
An unpriced change order adds cost with no revenue. In this example’s job it cut the margin to 13.8%. Priced at 1,200 USD, the whole job ended at 20.3%.
Is job costing the same as project costing?
Mostly yes: the practice is the same and companies use both terms. Payaca’s features page lists "Project costing", while Jonas and Acumatica name "Job Costing". That is why the table rates Payaca Partly.
What is a good job margin for a solar installer?
We found no sourced benchmark, so we give no figure. Compare each job with your own recent margin for the same job type, with overhead treated the same way each time.
Related terms
- Change order: a signed change to scope and price.
- Subcontractor management: tracking outside crews and bills.
- Accounting integration: how job costs reach the ledger.
Next step: run one closed job through the calculator above, then check whether your current system can split change orders from the original scope. If not, start with the best solar EPC project management software or the best solar ERP software.
Sources
- Wikipedia: Job costing. Definition and overhead rate with an allocation base. No date used. Checked October 2026.
- Autodesk: Job costing in construction. Shows "Updated: March 25, 2026". Checked 30 October 2026.
- OpenStax: Compute and evaluate labor variances and materials variances. Principles of Accounting, Volume 2. Published 14 February 2019 per the page. Checked October 2026. Formulas are for standard costs.
- Buildertrend: Margin vs markup in construction. No date shown. Checked October 2026.
- Payaca: Job costing for solar installers. Company blog, 25 August 2026. Checked 30 October 2026.
- Jonas Construction: Energy and solar contractors. Last modified 4 December 2025 per metadata. Checked 30 October 2026.
- Acumatica: Construction ERP. Last modified 6 April 2026 per metadata. Checked 30 October 2026.
- FOUNDATION: The ultimate guide to FOUNDATION modules. Shows 10 September 2026. Checked 30 October 2026.
- NetSuite: NetSuite modules. Dated 13 February 2026. Checked 30 October 2026.
- Payaca: Features. No date shown. Checked 30 October 2026.
- Simpro: Solar and renewable business software. No date shown. Checked 30 October 2026.
Last updated 30 October 2026. Next scheduled review: 30 January 2027.