Field notes
Build a Job Pricing Spreadsheet That Covers Overhead, Card Fees, and Margin
Build a three-tab contractor estimate spreadsheet with reusable rates, job assemblies, card fee inputs, and actual cost checks.
Published October 23, 2026
If you start each quote from an old estimate, an outdated material cost can follow you into the next job. This three-tab workbook gives you one place to update costs, reuse common work, and check the finished job against the quote.
- Rates holds your current costs.
- Assemblies groups the inputs for one unit of repeat work.
- Estimate applies those units to a job, calculates its price, and records actual results.
Copy the headings and formulas into Excel. All example quantities and prices below are illustrative. Enter your own costs and payment terms.
1. Enter current costs in Rates
Put these headings in row 1:
| A: Item code | B: Description | C: Unit | D: Unit cost | E: Last updated |
|---|---|---|---|---|
| LAB-OWNER | Owner labor | hour | Enter your cost | Enter date |
| POST-4X4 | 4x4 post | each | Enter your cost | Enter date |
| TRAVEL | Travel allowance | trip | Enter your cost | Enter date |
| OH-JOB | Overhead allocation | job | Enter your cost | Enter date |
Include your labor cost when you will do the work. In this layout, labor belongs in an assembly, travel is charged by trip, and the per job overhead allocation is added once on Estimate. Count each cost once.
2. Build repeat work in Assemblies
Put these headings in row 1. This hypothetical assembly lists the inputs for one fence section; replace the quantities with your own estimate.
| A: Assembly code | B: Item code | C: Quantity per unit | D: Unit cost | E: Cost per unit |
|---|---|---|---|---|
| FENCE-SECTION | POST-4X4 | 1 | Formula | Formula |
| FENCE-SECTION | LAB-OWNER | 2 | Formula | Formula |
In Assemblies!D2, pull the current cost for the item code in B2:
=XLOOKUP(B2,Rates!$A:$A,Rates!$D:$D,"Missing rate")
Excel XLOOKUP returns a value from the matching row. In E2, enter =C2*D2. Copy both formulas down the assembly rows. Resolve a “Missing rate” result before quoting.
Keep the per job overhead item out of an assembly priced per fence section. Otherwise, each section would add another full job allocation.
3. Set up one job in Estimate
Describe the scope before entering quantities. Put these headings in row 1 and use rows 2 through 11 for job lines:
| A: Scope | B: Assembly code | C: Job quantity | D: Cost per unit | E: Estimated cost | F: Actual cost |
|---|---|---|---|---|---|
| Describe the work | FENCE-SECTION | Enter sections | Formula | Formula | Fill after job |
In Estimate!D2, total the costs for the assembly code in B2:
=SUMIF(Assemblies!$A:$A,B2,Assemblies!$E:$E)
In E2, enter =C2*D2. Copy both formulas down for other job lines. Check each code against Assemblies: an unmatched code can return zero.
Use column A for the labels below and column B for their values. These cell addresses make the quote formula copyable. If you add job lines beyond row 11, move the summary below them and update its references.
| Cell | Label | Enter or calculate |
|---|---|---|
| B13 | Estimated assembly cost | =SUM(E2:E11) |
| B14 | Number of travel trips | Enter the estimated trips |
| B15 | Estimated travel cost | =B14*XLOOKUP("TRAVEL",Rates!$A:$A,Rates!$D:$D,"Missing rate") |
| B16 | Estimated overhead | =XLOOKUP("OH-JOB",Rates!$A:$A,Rates!$D:$D,"Missing rate") |
| B17 | Other estimated job costs | Enter costs outside the assemblies, or 0 |
| B18 | Full estimated cost before fees | =B13+B15+B16+B17 |
| B19 | Target margin | Enter a percentage, such as 25% |
| B20 | Applicable card fee rate | Enter a percentage, such as 2.9% |
| B21 | Fixed card fee | Enter the charge for one transaction, such as 0.30 |
| B22 | Quoted price | Formula in the next section |
| B23 | Estimated payment fee | =B22*B20+B21 |
| B24 | Estimated margin after fee | =(B22-B18-B23)/B22 |
Check that B18 includes all expected labor, materials, travel, overhead, and other job costs. A “Missing rate” error means you need to add or correct a Rates row.
4. Calculate the fee aware quote
This calculation assumes one card transaction, with a percentage fee on the entire quoted price and one fixed fee. It works when the card fee rate plus your target margin is less than 100%.
In Estimate!B22, enter:
=ROUNDUP((B18+B21)/(1-B20-B19),2)
Here, B18 is the full estimated job cost before payment processing, B20 is the percentage fee, B21 is the fixed fee, and B19 is the target margin after that fee. Enter the rates as percentages in their cells, and check that B19+B20 is less than 100% before quoting.
For an illustrative $300 job cost, 2.9% fee, $0.30 fixed fee, and 25% target margin, the unrounded result is about $416.50. ROUNDUP makes the quoted price $416.51 so it meets at least the target margin to the cent.
Stripe lists 2.9% plus 30¢ per successful domestic-card transaction under its standard online card pricing. That is an example input, not your rate. Replace both fee cells with your terms. If only part of the price incurs a fee, or the job has multiple transactions, adjust the calculation for those payments before using it.
Margin uses the selling price as its denominator. A 25% markup does not produce a 25% margin. For the broader lesson on job costs and margin, see How to Price Cleaning Jobs and Quote Them Profitably.
5. Save the quote and check the finished job
Before sending the quote, duplicate the Estimate tab or workbook. Name the copy with the job and date, then paste values over its formulas. This preserves the amount you sent when you update Rates for a later job. Keep a working copy for the next estimate.
After the job, put the actual cost of each assembly line in F2:F11. Add these fields below the quote calculation:
| Cell | Label | Enter or calculate |
|---|---|---|
| B25 | Estimated labor hours | Enter the hours used in the estimate |
| B26 | Actual labor hours | Enter the hours worked |
| B27 | Actual travel cost | Enter the cost |
| B28 | Actual overhead allocation | Enter the allocation counted for this job |
| B29 | Other actual job costs | Enter costs outside the assembly lines |
| B30 | Actual payment fee | Enter the fee charged |
| B31 | Actual total cost | =SUM(F2:F11,B27:B30) |
| B32 | Realized margin | =(B22-B31)/B22 |
The realized margin formula assumes you collected the quoted price. If you collected a different amount, use the amount collected in place of B22 in both parts of that formula.
Compare estimated and actual labor hours, materials, travel, fees, and total cost. Then update the relevant rate, assembly quantity, or job cost assumption before the next similar quote. For a review beyond one job, use the trades financial health checklist.
Start with one service you quote often. Build its assembly, run a current job through Estimate, and save the dated quote before sending it.
Keep going
Want to talk through what you just read?
Tell us how your business runs today, and we’ll talk through how this applies to it.