How to Price Excavation Work: Hourly, Per-Load or Fixed, Checked With AI

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for How to Price Excavation Work: Hourly, Per-Load or Fixed, Checked With AI.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for How to Price Excavation Work: Hourly, Per-Load or Fixed, Checked With AI.

Price excavation hourly when the ground or scope is uncertain, per load when the job is mostly spoil removal, and fixed when quantities and ground are known. Build all three from machine hour cost, operator, haulage, tip fees and margin, adding contingency to a fixed price. AI can check those sums and compare the methods. It cannot see the ground.

An online calculator multiplies a volume by a rate somebody else set. It does not know how many hours your machine bills in a year, how long your haulier's round trip takes or what the tip charges this month, and those three numbers decide whether a job pays. Everything below is built from the costs of one invented 8-tonne machine, so replace each input with your own.

Follow me on Instagram@sagnikteaches

Volumes are in cubic metres (1 m³ is about 1.3 cubic yards, and the arithmetic is identical if you measure in yards). All prices are USD and every figure is invented for illustration.

Connect on LinkedInSagnik Bhattacharya

Machine hour cost: ownership, running costs and chargeable hours

Start with the machine on its own. Ownership costs run whether or not it moves: depreciation, finance, insurance, yard space and inspections. Running costs only happen when it works: fuel, servicing and repairs, and wear parts such as tracks, teeth and bucket edges. Divide the yearly ownership cost by the hours you actually bill, not the hours on the engine meter.

Subscribe on YouTube@sagnikteaches
LineWorkingYearlyPer chargeable hour (1,000 h)
Depreciation($95,000 - $45,000) / 5 years$10,000$10.00
Finance6% of the $70,000 average value$4,200$4.20
Insurance$2,400$2.40
Yard and inspections$1,200$1.20
Ownership$17,800$17.80
Fuel$14.00
Servicing and repairs reserve$9.00
Tracks, teeth, bucket wear$4.00
Running$27.00
Machine hour cost$44.80

The chargeable-hours figure moves the answer more than any other input. The same machine costs $35.90 an hour to own and run if it bills 2,000 hours a year, $38.87 at 1,500, $44.80 at 1,000 and $52.43 at 700. If your rate was set when the machine was busy and the work has since thinned out, the rate has been losing money for months without anyone noticing. Take billed hours from last year's invoices, not from the meter.

The Complete Excel Course with AI Integration thumbnail

The Complete Excel Course with AI Integration

From formulas and pivot tables to Power Query, DAX, VBA and AI with Copilot, ChatGPT and Claude — hands-on from the first lesson.

By Sagnik Bhattacharya and Virginia Thorn, Primetime Emmy Award winner

Buy now

The operator and the overhead need the same treatment

An operator on $30 an hour with 25% on-costs looks like $37.50. But they are paid for 1,800 hours a year and only about 1,000 of those are chargeable; the rest go on weather days, yard time, travel and maintenance. Their real cost per chargeable hour is $30 x 1,800 x 1.25 / 1,000 = $67.50. This is the mistake that makes jobs look profitable on paper while the bank balance says otherwise.

Add overhead (office, business insurance, vehicles other than the machine, software, accounting): $18,000 a year over the same 1,000 hours is $18 an hour. Machine $44.80 plus operator $67.50 plus overhead $18.00 is a cost of $130.30 per chargeable machine hour. At a 20% margin on the price, $130.30 / 0.8 is $162.88, so the hourly rate for machine and operator is $163. The tutorial on working out a tradesman's hourly rate covers the same build for work without a machine.

This is the prompt I would give an assistant, and the thing to watch is that it divides every yearly cost by chargeable hours:

Work out the cost per chargeable hour of an 8-tonne excavator with an operator.
Machine: bought $95,000, sold after 5 years for $45,000, finance 6% on the average value,
insurance $2,400 a year, yard and inspections $1,200 a year.
Running costs per chargeable hour: fuel $14, servicing and repairs reserve $9, wear parts $4.
Operator: $30 an hour, paid 1,800 hours a year, on-costs 25%.
Business overhead: $18,000 a year. Margin: 20% of the selling price.
Show each line with its formula. Use chargeable hours for every yearly cost, never engine hours.
Then show the cost and the selling price per hour at 700, 1,000 and 1,500 chargeable hours.

Expect a table close to this (illustrative):

Chargeable hours a yearMachineOperatorOverheadCost per hourPrice at 20% margin
700$52.43$96.43$25.71$174.57$218.21
1,000$44.80$67.50$18.00$130.30$162.88
1,500$38.87$45.00$12.00$95.87$119.83

Read the spread before the figures: the same business needs $218 an hour at 700 chargeable hours and $120 at 1,500. Utilisation is the whole story. Check three things in whatever the assistant returns. It must divide the operator's yearly cost of $67,500 by chargeable hours, not by the 1,800 paid hours. The resale value must come off the purchase price once, in depreciation, and nowhere else. And the margin must be applied by dividing by 0.8, not by multiplying by 1.2, which would give you 16.7%.

Haulage and tip fees: price a loaded round trip, not a distance

A tipper truck earns nothing while it waits, drives or tips, so price the whole cycle. Twenty minutes waiting to be loaded, 25 minutes each way and 10 minutes at the tip is 80 minutes, or 1.33 hours. At $70 an hour for truck and driver that is $93.33 before any tip fee. If you run your own trucks, the tutorial on cost per mile from your own statements shows where the $70 comes from.

The tip fee is charged by the tonne or by the load, varies with the material (clean soil costs less to dispose of than mixed or contaminated waste) and changes over time. Phone the site, write the price and the date next to it, and do not take a figure from an AI model. To estimate tonnes per load, use your own weighbridge tickets. Six recent tickets for loaded soil read 11.2, 12.8, 12.1, 13.4, 10.9 and 12.6 tonnes, an average of 12.17, and the heavy 13.4 was from a wet day. At an assumed $15 a tonne, a 12-tonne load costs $180 at the tip.

Then count the loads. Ground swells when it is dug: one widely used reference table gives 20% to 30% for sand, 15% to 25% for loam and 20% to 40% for clay, and other tables give different figures, so take the figure from your own loads. At the 30% this firm's own clay loam loads have shown, 28 m³ in the ground becomes 28 x 1.30 = 36.4 m³ loose. With 8 m³ of loose soil per load, that is 4.55 loads, so five trips, with the fifth carrying 4.4 m³. Tip fees follow weight, so the part load costs less at the tip, but the truck time is the same. I price five full tip fees anyway and treat the difference as a small cushion. For volumes taken from drawings rather than a site measure, the tutorial on cut and fill volumes with AI covers what an assistant can and cannot calculate.

One loaded round trip therefore costs $93.33 for the truck and $180.00 for the tip: $273.33 a load.

One driveway base, priced hourly, per load and fixed

The job: dig a 7 m by 10 m driveway area 0.4 m deep, trim it level, and take all the spoil away. That is 7 x 10 x 0.4 = 28 m³ in the ground. The machine's own logs on similar ground show about 8 m³ an hour including loading trucks, so 3.5 hours of digging, plus 1.0 hour of trimming and levelling and 0.5 hours of set-up: 5.0 machine hours. Delivering and collecting the machine takes a low-loader for 2 hours at $95.

LineWorkingCost
Machine and operator, overhead included5.0 h x $130.30$651.50
Machine delivery and collection2 h x $95$190.00
Haulage5 loads x $273.33$1,366.67
Total cost$2,208.17

Now three ways to turn that cost into a price, all at a 20% margin:

MethodHow it is builtPlanned price
HourlyMachine 5.0 h x $162.88 = $814.38; haulage at cost / 0.8 = $1,708.33; delivery $190 / 0.8 = $237.50$2,760
Per loadCost per load $2,208.17 / 5 = $441.63; / 0.8 = $552.04, quoted as $552 a load for 5 loads$2,760
Fixed($2,208.17 x 1.10 contingency) / 0.8 = $3,036, quoted as $3,040$3,040

At the planned conditions the first two agree to the dollar, because both are cost plus the same margin. The fixed price is higher because it carries a 10% contingency. The differences appear when the ground disagrees with the plan, which the next section tests. First, a warning about the shortcut people reach for: a rate per cubic metre from another job. If the last job paid $85 per m³ in the ground (short haul, open access), 28 m³ gives $2,380, and the margin on this job would have been 7.2%. A per-volume rate carries everyone's conditions except the ones you are about to dig in.

What each method does when the ground disagrees

Hold the three prices and change the ground. The table gives the margin each method delivers on the price it was quoted at, with your cost recalculated for each scenario from the same inputs: machine hours at $130.30, five or six loads at $93.33 for the truck plus the tip, and $190 for the move.

ScenarioWhat changesYour costHourlyPer loadFixed
As planned5.0 h, 5 loads$2,20820.0%20.0%27.4%
Slower ground7.0 h, 5 loads$2,46920.0%10.6%18.8%
Slower and wetter7.0 h, 6 loads, tip fee up 10%$2,85020.0%13.9%6.2%
Faster ground4.5 h, 5 loads$2,14320.0%22.4%29.5%

Hourly holds its 20% in every row, because the customer pays for the time, the loads and the tip, which is why customers push back and ask for a range or a cap. Per load protects you against volume surprises, since every extra load brings its own revenue, but not against slow digging, heavier loads or a higher tip fee: at 7 hours the margin drops to 10.6%. Fixed gives the customer certainty and you all of the risk. In the slower-and-wetter case it falls to 6.2% even with the 10% contingency, and in a good case it climbs to 29.5%.

Read the table as a question: which surprise do you fear most on this job? If it is the digging rate, because the ground is hard or unknown, price hourly, or per load with a time-based extra. If it is volume, with known ground but an uncertain quantity, price per load, and print the tip rate the price assumes so a rise can be passed on. If it is neither, because trial holes are done, services are located and the soil is clean, fix the price.

Choose the contingency from your own overruns

A contingency should come from what your jobs have done. For twelve past fixed-price jobs, actual cost divided by estimated cost came out at 0.93, 0.97, 1.00, 1.02, 1.03, 1.05, 1.06, 1.09, 1.12, 1.15, 1.22 and 1.38. The median is 1.055, the average 1.085 and the 75th percentile 1.13. A 10% contingency would have covered eight of the twelve. The other four each had a named cause: a buried slab (1.38), groundwater (1.22), a tip that closed so the loads went further (1.15) and half a day waiting for a utility locate (1.12).

Here are 12 past fixed-price excavation jobs: job, estimated_cost, actual_cost, notes.
Calculate actual / estimated for each, then the median, mean and 75th percentile.
How many jobs would a 5%, 10% and 15% contingency have covered?
List the notes of the jobs above 1.10 and group them by cause.
Do not suggest a contingency yourself.
ContingencyJobs coveredJobs not covered
5%6 of 126
10%8 of 124: buried slab, groundwater, closed tip, utility locate
15%10 of 122: buried slab, groundwater

In a first-pass answer, check that the ratios use cost, not price, and that the causes are grouped from your own notes rather than invented. The last line of the prompt matters too. Choosing the percentage trades win rate against risk, and that is your decision, not the assistant's.

The four uncovered causes belong in the exclusions and the extra-over rates, not in a bigger contingency: "Price assumes no rock, buried structures, contaminated material or groundwater. Obstructions are charged at $163 an hour for machine and operator." A contingency large enough to cover a buried slab would price you out of every job that does not have one. The tutorial on checking building rates against past jobs uses the same ratio method on other trades.

Which cubic metre a rate is quoted in

Per-volume prices hide a unit trap: a cubic metre in the ground is not a cubic metre in the truck. This job's $2,760 is $98.57 per m³ in the ground (28 m³) and $75.82 per m³ loose (36.4 m³), which is the same money. A rival who says "about $80 a cube" may be quoting loose volume, in which case they are $4 above you, not $18 below. Ask which basis they mean before comparing, and if you quote per volume yourself, print the basis on the quote: "per m³ measured in the ground, before swell". An assistant can convert in either direction once you give it the swell figure. The risk is that it picks a basis silently, so name the one you want in the prompt.

Which method for which kind of dig

Match the method to the risk you are least able to see. Three jobs show the pattern.

A footing clean-out behind an old garage. You have not seen the ground and the old slab may go deeper than it looks. Price hourly, with a half-day minimum and a stated range ("expect 4 to 6 hours"), and agree that you will phone before going past the top of the range. Short jobs like this are also where the machine delivery line matters most, because $190 of delivery on a three-hour dig is a large share of the bill.

A spoil heap to clear from an open site. The dig rate is steady and the tip is the main cost. Price per load, with a waiting charge: after ten minutes of waiting for a truck or a gate, time is charged at the hourly rate. That keeps the per-load figure honest when someone else controls the access.

A pad for a shed on proven ground. Trial holes are dug, services are marked, the soil is clean and the quantity is measured. Fix the price, with the exclusions above, and keep the extra-over rate for anything you meet that the trial holes did not.

An assistant cannot walk the site. Photos let it list questions worth asking, such as overhead cables, access width and neighbouring structures, but those are prompts for a visit, not a survey. The person who has seen the ground decides which of the three descriptions fits.

Have AI read the quote before it goes out

With the price set, ask the assistant to read the quote the way a difficult customer would. Give it a checklist of what an excavation quote has to settle and ask it to quote your own sentences back, so you can see whether it is reading the document or making things up:

Read this excavation quote against the checklist below. For each item, copy the sentence
from the quote that covers it, or write "not covered". Do not paraphrase.
Checklist: site access and the machine's route; services and utilities located or not;
ground assumptions and what happens if they are wrong; groundwater; disposal of spoil and who
pays if the material turns out to be contaminated; reinstatement of surfaces; weather and
waiting time; minimum hire; machine delivery and collection; payment terms.

A reply might read, in part (illustrative):

ItemAssistant's answer
Services and utilitiesNot covered
GroundwaterNot covered
Disposal"All spoil removed to a licensed tip." Silent on who pays if the material is contaminated.
Waiting timeNot covered
Minimum hire"Half-day minimum, machine and operator." Covered.

Add the gaps: a line saying whether services have been located and who locates them, a groundwater clause, a contaminated-material clause with the extra-over rate, and a waiting-time rate. Then confirm the quoted sentences exist in your document. If the assistant quotes a sentence you never wrote, discard that answer and ask again with the quote pasted in plainly. The groundworks quote template carries wording for the dig, drain and base lines once the price is settled.

After the job: reconcile the actuals and update the rates

A rate only improves if you feed the result back. After each dig, put four things in the sheet: machine hours as billed, loads, tonnes from the tickets and the tip invoice. Suppose the driveway took 5.6 machine hours and 5 loads weighing 54.6 tonnes in total, and the tip bill was $819 (54.6 x $15), against $900 allowed for five full loads. The machine ran 0.6 hours over, which is $78 at $130.30 an hour. The tip came in $81 under. Net, the job landed within $3 of the plan, and if you only looked at the total you would conclude that the estimate was perfect.

The line variances say otherwise. Digging took 4.1 hours (5.6 less 1.5 for trimming and set-up), so the real rate was 28 / 4.1 = 6.8 m³ an hour against the 8 you assumed, about 15% slower. Two errors cancelled. After five jobs the averages should replace your assumed digging rate and your assumed tonnes per load. One job proves nothing, which is why the prompt below tells the assistant not to change anything on its own:

Here are my estimate lines for a finished dig and the actuals: machine hours, loads, tonnes,
tip invoice, delivery cost. Show the variance on each line in dollars and per cent.
Work out the actual digging rate in cubic metres an hour from the in-ground volume.
Say which input on my sheet each variance points to. Do not recommend changing a rate
until at least five jobs show the same direction.

Keep the output in the same sheet as the estimates, one row per job. After a season you will have the thing no calculator has: digging rates, loads and tip weights for your ground, your trucks and your tip.

Excavation pricing questions after the numbers

What should a minimum hire be for a small excavation job?

Build it from the smallest job you would accept: machine delivery and collection plus a half day of machine and operator. In the example the move costs $190 and four hours cost $521, so a half-day minimum starts near $889 at a 20% margin. Then compare the figure with your last five small jobs before you publish it.

Should I charge for moving the machine as a separate line?

Yes. Delivery and collection cost the same whether you dig for two hours or two days, so burying them in the hourly rate makes short jobs lose money and long jobs look expensive. In the example the move costs $190 and prices at $237.50, shown as its own line on all three quote types.

How often should I update my machine hour cost?

Once a year, and sooner when a big input moves: a new machine, a change in finance cost, a large jump in fuel, or billed hours landing well below plan. Re-run the same calculation with last year's billed hours from your invoices, not the engine meter, so the rate follows what actually happened.

Can ChatGPT tell me what the tip will charge?

No. Tip fees depend on the site, the material class and the date, so an assistant can only guess. Phone the site or read its current price list, write the figure and the date on your sheet, and give that number to the assistant as an input. Treat any fee an assistant volunteers as a prompt to check, not a price.

Further reads

Sources: Engineering ToolBox's table of bulking factors for soil and rock (other reference tables give different swell figures). All machine, operator, haulage, tip and job figures in the examples are invented for illustration.

Want your machine rates checked against real jobs?

On a 1:1 call we can walk through how you price digs today, find the one input worth measuring properly first, and set up a sheet and an AI check your team can run.

Book a 1:1 call with me