If you run a contractor business and invoices go out late, reminders go out never, and you find out a customer didn't pay when you're doing the books in March, this is for you.
The fix is three automations: send the invoice the moment a job is marked complete, run a scheduled reminder sequence that stops the second payment lands, and reconcile payments back to jobs without a human typing numbers twice.
You can get most of the way there inside QuickBooks or Jobber. What those tools do badly is the glue between job tracking and invoicing, and that is where a small custom layer, usually $3K to $8K one-time, pays for itself in a few months of faster cash.
Where does contractor cash flow actually leak?
Most contractors I talk to know their margin on a job. What they don't track is the lag between "job done" and "money in the bank," and that is where the leak lives. A few patterns repeat:
- Invoices sent days or weeks after completion. The crew finishes Thursday, the office catches up on paperwork the following Wednesday, the invoice goes out Friday. Eight days of float handed to the customer before the payment terms even start.
- No reminders, or reminders that depend on someone remembering. The owner glances at the aging report once a month, sees a 45-day balance, and sends an awkward text.
- Estimates that never become invoices. A change order got approved by text, the extra two days of labor happened, and nobody billed for it.
- Payments that arrive but don't get matched. A check gets deposited, the invoice stays "open," and a reminder goes out to a customer who already paid. That's the one that damages relationships.
Rule of thumb: if your average days-to-paid is over 30 and you aren't in a commercial net-60 world, at least a third of that is self-inflicted process lag, not slow customers.
The three automations that matter: send, remind, reconcile
Send. The invoice generates and emails itself when a job hits "complete." Line items come from the estimate plus approved change orders, the payment link is embedded, and the trigger is the status change, not a person.
Remind. A fixed sequence of messages goes out on a schedule relative to the due date. It checks payment status before every send, so a paid invoice never gets a reminder. Tone escalates slowly. The owner gets pinged only when the sequence runs out.
Reconcile. When a payment lands (card, ACH, or a check scanned at deposit), it gets matched to the invoice and the job, the reminder sequence stops, and the books reflect it the same day. This is the one most contractors skip, and it breaks the other two when it's missing.
| Automation | Trigger | What it removes | Typical failure without it | |---|---|---|---| | Send | Job status set to complete | Days of invoice lag, retyping line items | Invoice goes out a week late or not at all | | Remind | Days before and after due date | Awkward manual follow-up, forgotten balances | 60-day receivables nobody noticed | | Reconcile | Payment received | Double entry, false reminders | Reminder sent to a customer who already paid |
QuickBooks, Jobber, or custom: which layer should you automate?
It depends on where your job data lives, and whether your gaps are inside one tool or between two.
QuickBooks Online does invoicing and payment collection well: built-in reminders on a fixed schedule, online payments, recurring invoices. What it does not know is when a job is done. It does not track job completion or change orders. If you run jobs in a spreadsheet and bill in QuickBooks, the gap is between those two things.
Jobber (or Housecall Pro, or ServiceTitan at the high end) owns the job lifecycle: quote, schedule, dispatch, complete, invoice. The completion trigger is built in. The tradeoff is a monthly cost per user, an opinionated workflow, and limited control over what the reminder sequence says and when. Reconciliation runs through their QuickBooks sync.
A custom layer is for when you already have a system you like for jobs (or want a simple one built around how you work) and want the send-remind-reconcile loop to run your way. Think a small internal tool: job board, completion button, invoice generation, reminder engine, Stripe or QuickBooks Payments for collection, and a QuickBooks sync for the books.
| Option | Best fit | Rough monthly cost, as of this writing | Completion trigger | Reminder control | Who owns the data | |---|---|---|---|---|---| | QuickBooks Online alone | Billing is the only gap | $35 to $200 | No | Low | QuickBooks | | Jobber or Housecall Pro | Want one tool, fine with its workflow | $50 to $300+, scales with users | Yes | Medium | The vendor | | Custom layer plus QuickBooks | Have a process that works, want it automated | $0 after the build (QuickBooks fee still applies) | Yes | Full | You |
My bias is obvious, but I'll say it plainly: if Jobber fits your business, use Jobber. Go custom when per-seat pricing gets painful, when your job flow doesn't match their template, or when you already have something that works and only the money part is manual.
What does a reminder sequence look like that gets paid without nagging?
Be boringly consistent. Customers pay faster when they expect the message, and nobody feels nagged by a system that behaves the same way every time. Every step exits if the invoice is paid.
- Day 0, job complete: invoice sent with a payment link, a one-line thank you, and the due date stated plainly. "Invoice 1042 for the deck repair at 14 Elm is attached. Due in 15 days. Pay online here."
- Day 10, five days before due: friendly heads up. "Quick note, invoice 1042 is due Friday. Link below if you'd like to take care of it early."
- Day 16, one day past due: neutral and factual. "Invoice 1042 was due yesterday. If it's already on the way, ignore this. Otherwise the link is below."
- Day 22, one week past due: direct, still polite. "Invoice 1042 is a week past due. Please pay by the end of the week, or reply and let me know what's going on."
- Day 29, two weeks past due: sequence ends, the owner gets notified with a one-click option to call or send a final notice. A human handles anything past this point.
A few details that matter more than they look:
- Send from the owner's name, not "billing@." Replies go to a person.
- Add a text on steps 3 and 4 if the customer has opted in. Contractors' customers live on their phones.
- Never send on a weekend or holiday. Push it to the next business morning.
- One sequence per invoice, not per customer.
Five touches over 30 days, zero manual effort, and the owner steps in only for the few that go the distance.
How do estimates, job completion, and invoices connect?
The data model is simple, whether it lives in Jobber or a custom tool:
- Estimate: line items, a customer, and a status (draft, sent, approved).
- Job: created from an approved estimate; carries the schedule, the crew, and a status (scheduled, in progress, complete).
- Change orders: attach to a job, each with its own approval and line items.
- Invoice: generated on completion from estimate lines plus approved change orders, minus any deposit already collected.
- Payment: attaches to an invoice and updates the balance.
The completion button is the keystone. When the crew lead taps "complete" on their phone, the system locks the line items, creates the invoice, sends it, starts the reminder clock, and pushes it to QuickBooks. One tap, five effects. If "job complete" isn't a real event in a system, only a conversation, that's the gap to close.
What does this cost and how fast does it pay back?
Three ways to price it:
Stay in QuickBooks, turn on reminders. Free beyond what you already pay. Fixes remind, not send lag or reconciliation to jobs.
Move to Jobber or similar. Roughly $600 to $3,600 per year depending on tier and seats, forever. Fixes all three layers if their workflow suits you.
Build a custom layer. The build described above typically lands between $3K and $8K one-time at Contriboot. First working version in days. You own the code, there is no required subscription, and optional 6 or 12 month support plans exist if you want them.
Payback math, as a rule of thumb rather than anyone's real numbers: a contractor billing $60K a month who cuts average days-to-paid from 40 to 20 pulls roughly $40K of cash forward permanently. That isn't new revenue, but it's working capital you stop lending to customers for free. Add the invoices that never went out and the hours of manual follow-up, and on that math a $5K build is paid for inside the first quarter.
FAQ
Can QuickBooks automatically send invoices when a job is done?
Not on its own. QuickBooks can send recurring invoices on a date schedule and can remind on open invoices, but it has no idea when a job is complete. You need either a field-service tool like Jobber that syncs to QuickBooks, or a small custom layer that creates the invoice on completion and pushes it to QuickBooks through its API.
How many payment reminders should a contractor send?
Four to five touches over about 30 days. One at send, one before due, one just after, one a week later, then a handoff to a human. More than that reads as spam and rarely improves results. Check payment status before each send.
Should I automate reminders by text or email?
Both, with email as the default and text for the past-due steps when the customer has opted in. Email carries the invoice and payment link; text gets read. Keep texts short and in business hours.
Is it worth building a custom invoicing tool instead of using Jobber?
If Jobber's workflow matches how you run jobs and the monthly cost isn't painful, use it. Build custom when per-seat pricing scales badly, your process doesn't fit their template, or you already have job tracking you like and only the billing loop is manual. A custom build is a one-time cost and you own it.
If your crew finishes jobs faster than your office bills them, describe the setup in the configurator and I'll send a quote, usually the same day. Or book a call and we'll map the three layers to what you already have.
// end of transmission
Want something like this built for your business?