Estimating, quotes and invoicing

Quote any run in one click, and bill what really happened

ServiceProof prices a pickup and delivery the way a transportation company actually charges for one: the driver’s time or a flat rate, the truck that runs it, the extras like a liftgate or wait time, and a fuel surcharge that follows the government’s weekly diesel price. You set the rules once, the quote works out every line, and each line says how its number was reached.

When the customer says yes, the work lands on your dispatch board with every stop in place, or becomes a recurring agreement if it runs every week. When work the customer accepted on a quote is billed by the hour, the invoice is priced from the hours your driver actually worked. And the same engine prices HVAC, plumbing and electrical work, crane rentals and permits included.

This is a module. Take it for quoting alone and keep invoicing where it is, or take both. It runs on your pricing profiles and your charge catalog; it does not need the field app, though a quote is much better when a technician or driver fed it.

Quote a pickup and delivery in one click

Open a quote’s Pricing tab and describe the run: the truck it needs, the stops in order with their pickup and delivery windows, how long loading takes at each one, and any extras. Press Measure legs and every drive between the stops is timed and measured on the map with live traffic, routed as a truck for box trucks and anything bigger.

The Pricing tab on a courier quote: a cargo van, a one-off run on 10/20, and three legs in order - a pickup at the pharmacy's downtown store, then drop-offs at its Lititz and Ephrata stores, each with its window, handling minutes and the measured drive into it (25.8 minutes and 8.62 miles, then 18.8 minutes and 8.09 miles) - with a liftgate charge ticked below.

One pickup, two drop-offs, every drive measured on the map, and a liftgate at the drop.

Then press Price it. The quote works out the base by the method the customer’s pricing profile sets — hourly, flat, per mile, per stop, or hourly plus miles — rounds the time up to your billing increment, holds it to your minimum, adds each charge, takes off any negotiated discount, and puts the fuel surcharge on a line of its own.

The price on the same quote: a base line for a driver on a cargo van, 1.5 hours at $80.00 for $120.00, explained as 44.6 minutes of driving plus 45 minutes of handling over 3 stops rounded up to the 15-minute increment; a liftgate at $35.00 from the catalog; and a fuel surcharge of $25.80 for the week of 10/12 at $6.471 a gallon of Central Atlantic diesel, a 20 percent band plus a 1.5 point local adjustment.

Every line says how it was worked out, down to the week’s diesel price and the band it fell in.

  • Change the truck, a stop or a window and the quote tells you it needs pricing again before you send it.
  • A typed address is found on the map as you save it, so a stop does not have to be a saved site first.
  • Lines you type yourself stay exactly as you wrote them; the engine only ever touches the lines it priced.
  • The PDF your customer receives prints the units, like 1.5 hrs × $80.00, and the fuel line names the week, the price and the region it used.
The quote and the invoice are priced by the same engine, so the number the customer agreed to is the number your own rules produce.

Pricing profiles that cascade

A pricing profile is how a customer is priced and billed: hourly or flat, the rate for each kind of hour on each type of truck, the minimum charge and minimum hours, the billing increment, discounts on the base and on extras, how fuel is treated, which hours count on an hourly invoice, and the parts price level. Nobody types a price; the profile decides it.

Profiles cascade, so you only write down what is different. Your company default prices everything. A customer can have a profile of their own, a site can have its own for that customer, and an agreement carries its own for the work that runs under it, so a change-out project at every site prices as the project rather than as break-fix. A profile can also inherit from another one and set only the two or three things that differ.

A demo bank's profile, Example Savings Bank, in the pricing profile editor, with one hourly rate of its own counted on its Hourly rates tab. It inherits from the courier default, so its hourly method, $45.00 minimum charge, one-hour minimum and 15-minute increment each say which profile they come from, while fuel is set to exempt and the hours that bill are set to the time between the customer's own stops on this profile.

A bank’s profile sets its own rate, fuel and hours rules and inherits the rest, and every blank says where its value comes from.

🚚

Rates by truck type

An hour of driver time on a cargo van and on a box truck are different prices, and so are after-hours, weekend and emergency work. Rates are set by kind of hour, by truck type and by modifier, and a checker tells you which profile a rate came from.

📕

Price books and tiers

What a part costs and what it sells for, with tiers for the accounts that have earned one. An override on a single part is possible and is recorded as an override rather than as the price.

📈

Markup bands

The schedule every shop actually runs and almost none writes down: cheap parts carry more, expensive parts carry less. Bands, in a schedule, applied consistently instead of from somebody’s head.

A markup ladder open on the pricing screen: cost bands from zero upward for three price tiers, each with its markup percent, and a try-a-cost box showing what a part costing 250 prices at in each tier.

A cost band per tier, and what a $250 part prices at in each — all configuration.

And money is money. Stored to four decimal places as a decimal, never as a floating-point number. That sounds like an implementation detail until you meet a system where a total is 2441.5999999999999 and the reconciliation is off by cents nobody can find.

Fuel surcharges that follow the pump

Fuel is the cost that moves every week, so the surcharge follows the number the industry already uses: the weekly on-highway diesel price the U.S. Energy Information Administration publishes for your region. ServiceProof fetches it from the EIA, and you can always type a week’s price in by hand.

Each truck type gets its own surcharge schedule, and its band matrix is keyed on the week’s fuel price and on the size of the job, so a $90 delivery and a $900 one can carry different percentages, exactly as your rate sheet says. A schedule can charge a percent of the base, or dollars per hour, per mile, per stop or per job, with a cap if you want one.

A cargo van fuel surcharge schedule that reads the Central Atlantic diesel price and charges a percent of the base. Its band matrix has fuel prices of 5 to 6 dollars and 6 dollars and up down the side and job amounts of 0 to 100, 100 to 300 and 300 and up across the top, with percentages from 13 to 20 in the cells; below it, a local adjustment of plus 1.5 for the Lancaster city zone, for city congestion.

Fuel price down the side, job size across the top, and the city zone’s own plus 1.5 points on top.

Your own local adjustment

A plus or minus on top of the matrix for one zone or for the whole region, because a downtown run with its traffic and parking costs more than the open road. A preview works out what any job would be charged before you ever quote it.

Always its own line

The surcharge prints as its own line on the quote and the invoice, naming the week, the price per gallon and the region. A customer whose contract says no fuel is simply marked exempt on their profile, or held to a fixed or capped percentage.

Liftgates, wait time, cranes and permits

Everything a quote can add beyond the base lives in one charge catalog: a liftgate, inside delivery, wait time after the first fifteen minutes, an extra stop, a crane by the day, a permit at whatever the city charges. Tick the ones a job needs and the quote prices them.

  • Any unit — each, per stop, per piece, per pound, per mile, per hour, per quarter hour, per day, a flat fee or a percent of the base, each with a minimum, a maximum, a free quantity and a rounding step.
  • Counted from the run. A charge set per drop-off is added once for every delivery on the quote, so nobody has to count them.
  • A rate for each truck type, when a box truck’s liftgate costs more than a van’s.
  • Negotiated or waived per customer. A profile can give a customer their own rate for a charge or waive it, and a waived charge still shows at $0.00 so the customer sees what they were given.
  • Passed through at cost for permits and fees, with no markup and no discount, and you decide whether fuel rides on each charge.
A liftgate charge in the charge catalog: an accessorial, priced each at $35.00 with a cost of $10.00, the fuel surcharge riding on it, charged per drop-off, active and offered on new quotes, and below it a rate of its own for a box truck at $50.00 with a $50.00 minimum.

Charged once per drop-off, fuel riding on it, and a higher rate when a box truck does the work.

The customer says yes, and the work is on the board

Accepting a quote, whether in the office, on the technician’s phone or by the customer through their own link, turns it straight into the work it describes. Nobody retypes a stop, and nobody forgets one.

📍

A one-off run

Becomes a job with every leg in order, each stop with its own address, window and loading time, waiting in the zone’s Unassigned column for a dispatcher to put into somebody’s day. The quote’s own job keeps its number.

📅

A few named dates

Become one job for each date, each with all of its legs and its promised windows, and each linked back to the quote that sold it.

🔁

A recurring run

Becomes a service agreement on the quote’s own pricing profile, with the schedule you quoted — every Tuesday and Thursday, say — and the customer’s stops covered, so the visits are generated from then on without anybody keying them. Recurring commitments →

A stop that was typed as an address becomes a site for that customer, so it is on the record and covered like any other. And a yes is never lost: if something stops the work being made, the acceptance still stands, and the work can be made again once the cause is fixed.

The terms travel with the work. The jobs remember the quote that sold them and the agreement carries its profile, so the invoice is priced on exactly what the customer accepted.

Hourly work, billed from the hours actually worked

For hourly work the customer accepted on a quote, the invoice is priced from the driver’s own clock rather than from the estimate. Every visit records when the driver set off, arrived, started and finished, and the invoice reads that clock for the whole job, so what you bill matches what the stops really took.

  • Which hours count is the profile’s choice: only the time at and between the customer’s own stops, or the drive out from the depot as well.
  • Rounded and held to your minimum. On a 15-minute increment a 70-minute run bills 1.25 hours, and a 45-minute one bills your one-hour minimum.
  • Or bill it the way you agreed: the hours you quoted, the actual hours with no minimum, or the actual hours capped at the quote.
  • The right rate and the right week. The hour is priced for the truck that actually ran the job, and the fuel surcharge uses the price for the week the work was done.
  • Billed once, and only when finished. A visit still under way is named rather than guessed at, and the same work cannot be billed twice, because a second invoice for it is refused when it is priced, made from the quote or posted.
  • A flat-rate job simply bills the price you quoted.

The visits and minutes behind every billed hour are kept with the invoice, so when a customer asks about a bill, the answer is already on the record.

The estimate is the promise and the clock is the proof, and the invoice is built from the proof.

The same engine for HVAC, plumbing and electrical

Couriers came first, but nothing here is courier-only. A trade quote prices a technician’s hour the way a courier quote prices a driver’s, and it carries the same charges, the same profiles and the same legs.

🏗

Cranes and rentals

A crane by the day or by the hour, a lift for the week, each with its own rate, minimum and cost, on the quote as its own line.

📜

Permits at cost

Passed through exactly as the city charges them, with no markup and no discount, and not taxed unless you say so.

🏢

Projects at every site

A change-out program across a customer’s buildings runs under its own agreement and its own profile, so it prices as the project while the same customer’s break-fix calls keep their usual rates.

📦

Parts runs and pickups

Any trade can quote legs: a run to the supply house, a pickup from a customer’s warehouse, a delivery to the job, each measured and priced like a courier’s.

⏰

After-hours and emergency

An after-hours, weekend or emergency hour is a modifier on the same rate, not a second price list to keep in step with the first.

🤝

Subcontracted labor

Set a subcontractor up like any driver or technician and mark them as a sub with their own pay rate. They are paid as a vendor, outside payroll taxes, and their work bills to the customer at the customer’s usual rate.

One document, two stages

A quote and an invoice are the same thing at two different stages of its life. So an accepted quote becomes the invoice — it is not retyped, re-priced, or rebuilt from memory by somebody in the office at nine at night. The number the customer agreed to and the number on the bill cannot drift apart, because there was only ever one of them.

Estimating has its own screen, because an estimator and a billing clerk are doing different jobs at opposite ends of the same chain. Every quote, and what stage each one reached.

The estimating screen: a strip of stages from live through draft, issued, accepted, lost, posted and void, over a list of quotes showing the customer, the site, when it was raised, when it lapses, which job it became and its value.

The estimate book, and the stage each quote reached.

Underneath, though, it is one record. A quote and an invoice are the same row at two points in its life — which is why the billing book shows both, and why an accepted quote is never retyped into anything.

The billing screen with every document listed: quote and invoice rows interleaved, marked draft, accepted, posted and void, each with its customer, site, date, line count and total.

Quotes and invoices in one book — because they are one kind of record.

  1. It starts as a quote

    Priced by the customer’s own pricing profile, from your own rates, charges and parts. Built on the job it belongs to, so the photographs and readings the technician captured are already attached to the thing you are quoting from.

  2. It is issued

    And what goes out is stored as it went out. A document you re-render next year against today’s rate card and today’s address is a document the customer never received — and handing them that in a dispute is worse than having nothing.

  3. Somebody decides

    Won or lost, on the record, with a reason from a list you control.

  4. Won, it converts

    Same document, next stage, carrying every priced line with it. Hourly work is re-priced from the hours the visits actually recorded, so what you bill matches what happened rather than what the estimate guessed.

  5. Posted — and only then does it take a number

    An invoice number is allocated at post, not when the row is created. A half-finished document somebody abandons must not eat a number, because a gap in an invoice sequence is a question from an accountant every single year.

Every financial document stamps the customer, the site and the relationship between them as values, the moment it is created. So ending a relationship next year does not silently rewrite last year’s revenue.

The catalog and the supply houses

One catalog, whether the part is being quoted, bought, installed or counted. So the same item has one identity across the estimate, the purchase order and the van.

Parts

Code, description, category, cost and price — and each supplier’s own code for the same item alongside, because two supply houses have never agreed on a part number in the history of the trade.

⚠ Resist “Misc part” as a habit. It is the line that makes stock counts meaningless and margins unknowable, and it is always easier at the time.

Vendors

Who you buy from, and where — a parts counter you pick up from and a depot that delivers are different addresses with different hours, and the technician needs the first one.

The parts catalog: every part with its code, category, cost and price.

One catalog for quoting, buying and installing.

The suppliers screen listing eight supply houses, each with its code, payment terms, our account number with them, how many branches it has and how many parts it supplies.

Terms, your account number with them, and the branch the van drives to.

A picture on every part

A part carries its own pictures — the product on a plain ground, the box label with its nominal and actual size — and its documents beside them: the cut sheet, the install manual, the safety data sheet.

One of them is chosen as the picture, and that one shows wherever the part is picked: on the parts list, in the purchase order’s part picker and in the quote’s part search. So the buyer and the estimator choose the 20×25×1 filter they can see, not the code they half remember.

And a part takes notes and custom fields like every other record — Nominal size and MERV rating on a filter, declared once in setup, and every part has the blanks. Custom fields on anything →

A purchase order's part picker, headed What is being bought: a search box, then parts from the catalog - the pleated filter with its chosen picture beside it and the supplier's own code and last price, the others with an empty picture slot.

Buying it: the chosen picture sits beside the part in the picker.

One part, a 20x25x1 pleated filter: its chosen picture beside the part number, two custom fields - nominal size 20 x 25 x 1 in and MERV rating 8 - then its pictures, the box label marked as the picture and the front with a Use this one button, and below them the part's documents: a spec sheet PDF, the box label and the front photograph.

One part: the chosen picture beside its number, its custom fields, the other picture one press from taking its place, and the spec sheet filed with them.

Won, lost, and why

A quote that is decided is worth more than a quote that fades. Won or lost is recorded, and lost carries a reason from a list you maintain — price, timing, went with the incumbent, never heard back.

Which turns a pile of dead quotes into the only honest answer to “why are we not winning commercial work in the west zone?”

Most systems let a quote expire quietly. That is comfortable and it costs you the one piece of information you would actually have paid for.

The estimator’s bench

This is the screen somebody prices work on all day, so it holds everything that decision needs in one place — the lines, what the customer will actually see, the evidence, and what was found here last time.

A draft quote in the portal: who it is for, the lines with their kind and amount, a running total, and the sending panel.

One quote, with the customer, the lines and the total in one view.

A scratchpad that is on no total

Somewhere to park what you are still deciding. It is not on the quote, the customer never sees it, and the price is re-checked when you move it across — so a figure that sat there for a week never quietly becomes a figure somebody is quoted.

Good, better, best

Options on one document rather than three documents to keep in step. And lines that do not print, for the roll-up that shows a customer a number instead of a parts list — they still count toward it.

What the field already found here

Every answer a technician has ever captured at this site — readings, conditions, what they were told — on the quote, while you are pricing it. Not the job: the site, because a building outlives whoever is paying for it this year.

The prior work tab on a quote, listing answers captured at this site with what was asked, what came back, when, and who.

What was asked, what came back, when, and who — read-only, on purpose.

It is deliberately read-only. Pulling a year-old reading into a quote as though it were measured today is how a number nobody re-checked reaches a customer. You read it and you decide.

Evidence on the line itself

A quote line expanded to show its own evidence panel, for photographs of the specific item being quoted.

A photo of the site belongs to the quote. A photo of the part belongs to the line.

Making the PDF, and what was sent

One press makes the PDF and keeps it. Then you email it, with a line to go with it, to whoever is deciding.

The sending panel on a quote, showing the generated PDF with its size, buttons to open it or make a fresh one, and fields to email it.

The file is made and kept before anything is sent.

The file you sent is the record, and it is never re-drawn. Re-rendering last year’s quote against today’s rate card and today’s logo produces a document your customer never received — and then hands it to them in an argument as though it were the original. So the bytes are stored at the moment they go.

It also tells you what the customer will not see. If lines are marked not to print — the parts inside a roll-up, usually deliberately — it says so before it goes, not after.

And the job moves itself. A quote for a job goes out, and the job steps off the estimator’s column onto waiting on the customer. The customer says yes, and it lands in the unassigned column for a dispatcher to schedule, with every leg the quote described. Same job number the whole way — nobody retypes it and nobody forgets to move it. What a yes makes →

A quote you cannot prove you sent is a quote you are going to argue about.

Your name and your logo, at the top

Every quote, every invoice and every proof of work goes out under your name — not ours. Upload your logo once and it prints in the top corner of all three, with your address, your phone and the licenses you are required to show underneath.

The first page of a quote PDF: the customer's name as the title, the contractor's logo in the top right corner, and the contractor's name, address, phone, contractor license and sales tax permit beneath.

The customer is the title. Your logo sits opposite it.

A logo with a transparent background sits straight on the page — no white box around it. A huge one is shrunk to what paper can show, so a 4,000-pixel file does not make every invoice a slow download.

The company details screen: a preview of the letterhead exactly as a customer sees it, with the logo, the business name, address and licenses, and buttons to replace or remove the logo.

The preview is what the customer gets, on paper-white, even in dark mode.

Change it tomorrow and yesterday’s invoices do not change. A document you already sent keeps the header it went out with, because the file you sent is the record.

And the field half of it

The office is one end. The other end is a technician standing in front of the thing.

A finding on a preventive maintenance visit — photographs of the failed part, readings off the nameplate — raises an event, and the estimator’s queue lights up with the evidence already attached. That is the gap every field service company loses money in, closed with a rule instead of a phone call.

The field app home screen on a phone, with ESTIMATE sitting directly above BILLING among the day's buttons.

Estimate sits above billing, because you quote a job before you bill it.

A technician can raise the quote from the van. Same document, same pricing, same customer — started in front of the thing instead of described over the phone afterwards.

Building an estimate on the phone: parts and labor with a running total, a section for photographs and recordings, and field notes.

Parts, labor, photographs, recordings and notes — from the van.

What we saw takes a photograph, a voice note or a supplier’s PDF. The raw bytes go up and the server reads the metadata off them, because a picture shrunk on the handset has already lost the proof that it was taken where and when it says.

And a photograph can belong to one line rather than to the job. The cracked heat exchanger goes on the line asking to be paid for replacing it — so the estimator, and later the customer, can see what the money is for.

A line opened on the phone, showing a button to attach a photograph of that specific item rather than of the job as a whole.

Evidence for one item, not just for the job.