GUIDE

How to send estimates and get paid for service jobs

One scope, entered once, from the first bid to the money in your account, without re-typing it into a second tool.

Updated June 2026 · 7 min read

Most small service shops lose money in the seams between tools. You quote in one place, schedule in another, invoice in a third, and chase the payment by phone, and every hand-off is a chance to retype a number wrong, drop a line item, or forget the deposit you agreed to.

ServCTRL closes those seams by keeping the whole loop connected: the bid you send is the same record you dispatch, invoice, and collect against. This guide walks that loop for a small plumbing, electrical, HVAC, appliance, garage-door, or handyman shop: a flat-rate estimate, a link the customer e-signs, the accepted bid becoming the contract, the visit dispatched, the invoice drawn from that contract, and payment by card, ACH, check, or cash. No time sheets. No re-typing.

The estimate starts from the price book

An estimate in ServCTRL is built from a Rate & Price Book, a single-price catalog of the work you actually do. "Replace 40-gallon water heater." "Upgrade panel to 200A." "Replace garage-door torsion spring." You priced the task once; pull it onto a bid and the price comes with it, the same on every truck.

That suits the trades that run on service calls. A plumber quoting a water-heater swap, an electrician quoting a panel, an appliance tech quoting a compressor: known jobs with known prices, no square footage to measure. (If your work is measured-area takeoff like roofing, drywall, or fencing, or a recurring route like lawn care or pest control, this whole model is the wrong shape, and ServCTRL says so plainly.)

An estimate takes three line types: a price-book item that carries its own price, a Standard Labor line that pulls the right hourly rate from your settings, or a Custom Labor line for the one-off. There are no square-foot or linear-foot takeoffs. That's by design. Build the catalog once in the Rate & Price Book, then quote from it every time.

Why the price book pays off

When every tech quotes the panel upgrade from the same book, the price is the same whether you bid it or your lead does. Consistent pricing is consistent margin, and far fewer arguments about why two customers got two numbers for the same job.

The customer accepts and e-signs a link

A PDF emailed back and forth is a dead end: you can't tell if they opened it, you chase a signature by phone, and you still have to ask when they're free. ServCTRL sends the estimate as a link instead.

With estimating software built for this, the customer opens a clean estimate, accepts or declines online, and e-signs by typing their name. That typed signature is captured with a timestamp and IP, a real record of acceptance, not a drawn squiggle on a pad. On the same screen they can pick up to three preferred appointment windows, so you learn when they're available before you ever touch the schedule.

Need to change the scope before they sign? A revision deep-copies the estimate into a new version and supersedes the old one, so the customer always sees the latest and you never lose the thread.

A deposit, when the job warrants it

For a big material order, a high-end water heater, a softener system, a garage door, you may want cash before you buy parts. You set a deposit intent on the estimate: none, a percentage, or a fixed dollar amount.

That deposit is collected on its own invoice as unearned cash. When you bill the final invoice, it shows as a visible credit line and is netted against the total, never double-counted, never forgotten. You took the money up front, and the customer sees exactly where it landed on the final bill.

The accepted bid becomes the contract

This is the part that removes the retyping. The moment the customer accepts, the estimate becomes the contract, and everything that follows stays connected to it: dispatch, change orders, invoices, notes, all in one place. The scope you bid is the scope you bill, and nobody re-types it into a separate invoicing tool.

In ServCTRL the job's status is derived from what's actually happened (quoted, scheduled, in progress, completed, invoiced, paid), not a field someone has to remember to flip. The job moves because the work moved.

Dispatch runs off the same job

Now it's scheduled. You drop the trip on a day and a tech, and the customer's preferred windows are already on the record, so there's no phone tag. The board gives a plain verdict as you assign (Free, Tight, or Booked) and flags a red double-booked block if you stack two jobs on one tech. It warns you; it never blocks you, and you can always override.

Schedule & notify emails the customer a confirmation with an arrival window. The trip lands on the tech's phone in the field app, where they tap through scheduled, en route, on site, in progress, and done. The office sees each status update on the board when it refreshes, not a live ticker, just the current picture every time you look. There's no GPS tracking and no in-cab card terminal: the field app navigates with Google Maps, and the money is handled by the pay link, next.

Extra scope becomes a change order

Once the tech is on site, the wall comes open and the real job shows up. A garage-door tech finds a bent track. An electrician finds aluminum wiring. ServCTRL is built so you don't eat that work and don't quietly add it without a paper trail.

A change order is an additive, e-signed scope change to an already-accepted, in-progress job. The tech proposes it from the field with a price and photos; the customer approves it through a public link. Approved change orders add to the contract total, so the extra work is captured and signed before you bill it. (A change order is different from revising a bid: the revision happens before acceptance, the change order after.)

The invoice comes from the contract, and the customer pays

Because the accepted estimate plus approved change orders is the contract, the invoice is already built. You're not retyping line items into a separate tool and hoping the totals match. Bill the whole thing, a deposit, a progress draw, or a retainage release, your call, all from the same record. (Retainage is a per-invoice percentage held out of the collectible total, then released with one retainage-release invoice at the end.) Invoices stay editable, and there are no hours to reconcile because there are no time sheets.

Then collect. The customer pays by card or ACH on a public pay link, and the money lands in your own Stripe account (connecting Stripe takes about five minutes; until you do, online payment is off). On site, the tech can record a check or cash against the balance right at the truck and capture a typed sign-off, or send the customer that same pay link to settle by card or ACH. Payments post against the contract and the job closes itself out.

That's the full loop on one record, contract invoicing with nothing re-typed between the bid and the bank. When the bookkeeper needs the numbers, you export a date-range CSV of every invoice and payment.

Keep the payment story straight

There is no tap-to-pay terminal in the truck. On site the tech either records a check or cash, or sends the customer the pay link; card and ACH happen on that public link, and only once the shop has connected Stripe. The money lands in your account, not ours.

Key takeaways

  • ServCTRL quotes from a Rate & Price Book, so the same job carries the same price on every truck, no hourly guessing, no takeoffs.
  • Estimates go out as a link the customer e-signs (typed name, timestamp, IP), and where they pick appointment windows.
  • The accepted bid becomes the contract, so dispatch and invoicing reuse the same scope with no retyping.
  • The invoice is drawn straight from the contract, whole, deposit, progress draw, or retainage release, with no time sheets to keep current.
  • Payment is by card or ACH on a pay link into your own Stripe account, or a check or cash recorded on site once Stripe is connected.
FAQ

Questions, answered.

How does the customer actually sign the estimate?

They open the estimate link and accept by typing their name. That typed signature is captured with a timestamp and IP as the record of acceptance. There is no drawn signature pad. No account or app install is needed on their end.

Do I have to re-enter the estimate to create an invoice?

No. The accepted estimate plus any approved change orders is the contract, and the invoice inherits its lines directly. You bill the same scope you quoted without re-typing it into a separate tool, which is where most billing mistakes come from.

Can the technician take a card payment on site?

Not through an in-cab terminal. That does not exist. On site the tech can record a check or cash against the balance, or send the customer the pay link. The customer then pays by card or ACH on that link, which works once the shop has connected its Stripe account.

Where does the money go when a customer pays online?

Into your own Stripe account. ServCTRL uses Stripe Connect (about a five-minute setup), so card and ACH payments land directly with you. A shop cannot accept online payments until it connects Stripe.

Is this workflow a fit for every home-services business?

It fits shops that run on service calls and flat-rate quotes: plumbing, electrical, HVAC, appliance repair, garage door, handyman, irrigation, and water treatment. It is not built for recurring-route or subscription trades (lawn care, pest-control routes) or measured-area takeoff trades (roofing, drywall, fencing), and it does not do recurring or subscription billing. If you are solo with no crew, the sibling tool PayPolka may fit better.

Run the whole job from one place.

Start free today — no credit card, no demo call.