A field-service business came to us with a pipeline that looked clean. Jobs were finishing on time. Reviews were thin. Invoices went out late. The work was done. The closeout was not.

Every completed job still needed a person to sit down and wrap it: generate the invoice, drop photos into the client folder, flip the CRM status, ping bookkeeping, and remember to ask for a review a few days later. That last step usually did not happen. The tech had already moved to the next site.

This is not collections. That is a different problem, the Friday aging-report chase. This is the 15 to 25 minutes after "complete" that nobody owns as a process, so cash and reputation wait on whoever has a spare moment.

The before: done was not actually done

When we mapped a typical close, it looked like this:

  • Job marked complete in the scheduling tool, often from a phone in the van
  • Invoice built later from notes, line items, and whatever photos made it back to the office
  • Client folder updated by hand, if the files were not still sitting on someone's camera roll
  • CRM status flipped whenever someone remembered, so reporting lagged reality
  • Review request sent only when the owner thought of it, usually weeks later or never

At roughly eight completed jobs a week, that is two to three hours of wrap-up admin. None of it required judgment. All of it required a human to carry data across tools that did not talk to each other.

The expensive part was not the minutes. It was the delay. Invoices that sat until Friday. Reviews that never went out because the moment had passed. A CRM that said "in progress" on work that finished Tuesday.

The build: complete is the trigger

The workflow starts when a job status changes to complete. From that moment, closeout is a sequence, not a favor someone does when they get back to the desk.

  • Invoice is generated from the job record (client, line items, tax) and sent the same day, with a copy to bookkeeping
  • Photos and closeout notes are pulled into the client folder and tagged to that job
  • CRM moves to closed, with the completion date stamped so reports match the field
  • Day 2: a short review request goes out while the result is still fresh, with a direct link
  • Exceptions only: if the amount is blank, over a set threshold, or the send fails, the owner gets a ping with the record. Everything else runs without a person

The review wait is deliberate. Asking on-site, while the tech is packing up, gets polite yeses and no clicks. Asking two days later, after they have lived with the result, gets the reviews that actually land.

If the client replies with a problem, the review sequence stops. You do not want an automated "how did we do" sitting on top of an open complaint.

The after: cash and reviews stopped waiting on memory

Invoices started leaving the same day the job closed, not when someone caught up. The team stopped rebuilding line items from memory. Bookkeeping stopped chasing the office for "is this one billed yet."

Review volume went up because the ask became automatic and timed. The owner still handled the one-star exceptions and the relationship work. They stopped being the person who had to remember to ask in the first place.

The quieter win was trust in the board. When complete meant complete in every system, weekly reporting stopped being a reconciliation exercise.

What this kind of build actually requires

This was not a new operations philosophy. It was the close they already did on the good weeks, written as a trigger: job complete, then invoice, file, update, wait, ask, stop on a complaint.

The scheduling tool, the invoicing tool, and the inbox already existed. What was missing was the connection layer after the status change. Same pattern as intake, quotes, and appointment reminders. Different trigger. Same idea.

If your jobs finish on time but money and reviews lag, look at the hour after complete before you look at your pricing or your ads. Closeout is a process. Treat it like one.

The build pays for itself in faster invoices and reviews that actually get requested. Then it runs every time a job is marked done.