Skip to main content

2026-08-06 · 7 min

How we’d automate invoice intake for a 10-person contractor

Teardown: the 11-step manual invoice flow at a 10-person contractor, the n8n + OCR + QuickBooks build that replaces it, and honest ROI math.

Picture a 10-person general contractor doing about $4M a year. Three crews in the field, two project managers, one office manager who runs payroll, permits, and — for roughly six hours every week — vendor invoices. Around 120 of them a month: the lumber yard, equipment rental, subcontractors, the fuel card.

This is a composite, not a client. But walk through invoice intake at almost any sub-$10M contractor and you’ll find this exact flow — the steps vary by one or two, the shape never does. Here’s the teardown, and here’s what we’d build instead.

The current flow: 11 steps, ~14 minutes per invoice

#StepTouch time
1Invoice arrives — emailed to whoever the vendor has on file, PDF attached, sometimes a photo of a paper ticket
2The office manager notices it between forty other things2–48 hrs of latency
3Downloads the PDF, renames it vendor-date-amount (when there’s time)1 min
4Keys vendor, date, amount, and invoice number into the tracking spreadsheet2 min
5Works out which job it belongs to2 min
6Digs up the matching PO or quote — email search, folder archaeology3 min
7Forwards to the PM: “is this right, and which cost code?”1 min
8Waits. Chases the PM on day 3. Chases again on day 5.days
9Enters the approved bill into QuickBooks, coded to the job3 min
10Files the PDF into the right Dropbox folder1 min
11Marks the spreadsheet — which now disagrees with QuickBooks slightly, forever1 min

Add it up: roughly 14 minutes of touch time per invoice across two people, plus days of dead air in the approval gap. At 120 invoices a month that’s about 28 hours — most of an office-manager week — spent moving the same numbers between an inbox, a spreadsheet, QuickBooks, and Dropbox. The industry’s own benchmarks agree the latency is normal: manual invoice approval averages 9–19 days end to end.

The target architecture: 5 stages, 2 human touches

Here’s what we’d build. One n8n workflow, self-hosted on a ~$20/mo VPS, wired into the tools this contractor already pays for. Nobody learns new software — the office manager’s job shrinks to working an exception queue, and the PM’s job shrinks to one button.

text

ap@yourcompany.com  (one address on every vendor file)
  → n8n email trigger (IMAP / Gmail node)
  → extraction: Claude reads the PDF or photo → structured JSON
  → validation: vendor table · PO match · duplicate check
  → QuickBooks Online: draft bill, coded to the job
  → approval request → PM’s Slack (Approve / Reject / Question)
  → archive to Dropbox, named vendor_invoice#_date.pdf
  → log row + weekly exception digest

Stage 1 — one front door

Every vendor gets the same instruction: send invoices to ap@yourcompany.com. Forwarding rules catch the strays that still land in personal inboxes. Paper tickets from the field get photographed and sent to the same address. The point is structural: intake becomes a queue with a timestamp, not an inbox that depends on someone noticing.

Stage 2 — extraction, with a confidence floor

Claude reads each attachment and returns structured data — about $0.01–0.03 per invoice at current API pricing, so roughly $3/mo at this volume. The output looks like this:

json

{
  "vendor": "Ridge Building Supply",
  "invoice_number": "INV-48213",
  "date": "2026-07-28",
  "due_date": "2026-08-27",
  "amount": 4380.50,
  "po_number": "PO-1107",
  "line_items": 14,
  "confidence": 0.97
}

Anything under the confidence floor — smudged photos, handwriting, a crumpled fuel receipt — skips straight to the exception queue for a human. The system never guesses its way into your books.

Stage 3 — validation before anything touches the books

  • Duplicate check: same vendor + invoice number + amount already in QuickBooks? Flagged, not entered. Duplicate payments are the quiet leak this catches in week one.
  • Vendor match: unknown vendor → exception queue. A human onboards each new vendor exactly once; after that the match is automatic.
  • PO match: amount within tolerance of the PO → proceed. Over by more than 2% → flagged, with the delta shown to the PM instead of buried in a line item.

Stage 4 — approval where the PM already lives

The workflow creates a draft bill in QuickBooks Online, coded to the job from the PO. Then the PM gets a Slack message: vendor, amount, job, PO delta, PDF attached — with Approve, Reject, and Question buttons. No login, no forwarded email chain, no “did you see the one from Ridge?” Unanswered after 48 hours, it reminds. After 96, it escalates to the owner. The chase — step 8 of the old flow, the one that ate days — is now software’s job.

Stage 5 — archive and audit trail

On approval, the bill finalizes in QuickBooks, the PDF lands in Dropbox under an enforced naming convention, and a log row records who approved what, when. The tracking spreadsheet — the one that always disagreed with QuickBooks — retires. There is one system of record and everything else feeds it.

What survives of the 11 steps

Two things. The PM taps Approve — 30 seconds, on their phone, usually same-day. And the office manager works the exception queue: unknown vendors, low-confidence scans, PO mismatches. Expect exceptions around 15–20% of volume in month one, falling as the vendor table fills in. Everything else — the downloading, renaming, keying, matching, filing, chasing — is gone.

The goal isn’t zero humans. It’s zero data entry — and an approval that takes 30 seconds instead of 5 days.

What it costs

  • Build: this is a single-workflow build with real integration depth — extraction, QuickBooks, approvals, archive. From our published bands ($2k–6k for a workflow build), expect $3,500–5,500 fixed, quoted in writing before we start. A simpler variant without PO matching lands near $2,500.
  • Running cost: self-hosted n8n means no per-task fees. The VPS is ~$20/mo, Claude extraction ~$3/mo at 120 invoices, and QuickBooks and Dropbox you already pay for. Typical total: under $40/mo.
  • Care plan, optional: from $500/mo if you want us monitoring it, patching it, and extending it as vendors and jobs change.

The ROI math, labeled honestly

These are typical numbers for this type of automation — not a client result. We label every number we don’t own, and we don’t invent the ones we wish we had.

  • Touch time: ~28 hrs/mo drops to ~6 hrs/mo of exceptions and approvals. Call it 22 hours back.
  • 22 hrs × $38/hr loaded office cost × 12 months ≈ $10,000/yr recovered — before counting the approval-latency and duplicate-payment effects.
  • A $4,500 build pays back in 5–6 months on labor alone. Industry benchmark for automated invoice processing: up to 67% lower cost per invoice.

The second-order effect matters more than the labor. Bills enter QuickBooks the day they arrive, so job costing is current while the job is still open — a PM can see a project drifting over budget in week 3 instead of discovering it at closeout. No spreadsheet delivers that, at any level of discipline.

What we would not automate here

  • The approval decision itself. Whether a $4,380 lumber bill is right for that job is PM judgment. Software prepares the decision; it doesn’t make it.
  • Vendor disputes. When an invoice is wrong, a human calls the vendor. The system just makes sure the thread and the paper trail are one click away.
  • The first invoice from any new vendor. A human verifies the vendor is real and the terms are right — once — before the pipeline trusts them.

If a step needs judgment, it stays human and the system feeds it context. That line is where automations stop paying and start breaking — and knowing where it sits is most of the job.