TL;DR: A 24-person residential plumbing company in San Diego invoices 2,800 jobs per year. The billing process: a plumber writes job details on a clipboard, the clipboard rides in a van folder, the folder arrives at the office days later, and an admin deciphers the handwriting and enters it into ServiceTitan. Average time from job completion to invoice sent: 4.2 days. Thirty-four job sheets lost last year ($8,000-$12,000 in uninvoiced work). Fifteen to twenty percent of jobs have materials consumed but not listed ($18,000-$28,000 in annual leakage). We designed a four-stage agent: mobile completion form filled on-site in 3 minutes, validation that checks materials against job type while the plumber is still parked at the house, automatic invoice generation via ServiceTitan API, and a dashboard tracking completion-to-invoice time and materials variance. Invoice delay: 4.2 days down to 22 minutes. Running cost: $29-$90/month.

Thursday, 3:45pm, Kearny Mesa

Mike finishes a water heater replacement. He pulls out the clipboard. Writes: "Resi WH replacement. 50gal Rheem. Removed old unit. Installed new. Pressure relief valve replaced. Expansion tank inspected, OK. 3.5 hrs on site."

He takes a photo of the completed work on his phone (it stays on his phone). He notes the materials: "1x 50gal Rheem Pro, 1x PRV, copper fittings, Teflon, solder." He doesn't note the exact quantity of copper fittings because he's already thinking about the next call across town in Pacific Beach.

The clipboard goes in the van folder. Friday is busy: three calls, two emergencies. Saturday, two more. The van folder doesn't make it to the office until Monday morning.

Monday, 8:30am. Lisa opens the van folder. Four job sheets from Thursday and Friday. Two from Saturday. One from the previous Wednesday that fell behind the seat.

She starts with Thursday's water heater. Mike's handwriting is, in Lisa's diplomatic assessment, "interpretive." Is that a 50-gallon or a 30-gallon? She texts Mike. Mike is already on a Monday morning call. He responds 2 hours later: "50."

Lisa enters the job into ServiceTitan. Looks up the Rheem 50-gallon price. Adds the PRV. Adds "copper fittings" at a standard markup (she doesn't know the exact quantity Mike used, and neither does Mike at this point, four days later). Generates the invoice. Sends to the customer.

Total time from job completion (Thursday 3:45pm) to invoice sent (Monday 11:20am): 4 days, 19 hours. The customer pays on receipt. If they'd received the invoice Thursday evening, the company would have had the payment by Saturday. Instead, the payment arrives Wednesday.

Multiply by 2,800 jobs per year. This is, when stated precisely, a billing system whose data format is a clipboard, whose transfer mechanism is a van, whose processing speed is limited by traffic on the I-8, and whose quality control is Lisa's ability to distinguish Mike's fives from his threes.

The Company

Residential and light commercial plumbing company in San Diego. Twenty-four employees. $3.4M annual revenue. Roughly 2,800 jobs per year across 14 plumbers.

The numbers behind the van folder:

Average time from job completion to invoice sent: 4.2 days. Jobs exceeding 7 days to invoice: 22% (roughly 616 jobs per year). Admin time per job (deciphering, entering, matching materials, generating invoice): 18-25 minutes. Total admin time on quote-to-invoice processing: approximately 1,050-1,170 hours per year. Lisa and her colleague spend 50-55% of their working week on this. They were hired as office administrators. Half their job is being a human OCR system.

Lost or illegible job sheets in the prior 12 months: 34. Estimated uninvoiced revenue: $8,000-$12,000. Work that was performed, materials that were consumed, time that was spent, and none of it billed because a piece of paper fell behind a van seat.

Jobs where the plumber forgot to list materials used: 15-20%. The company absorbs the difference. Estimated annual revenue leakage from unbilled materials: $18,000-$28,000. Mike used six copper fittings. He wrote "copper fittings." Lisa billed for a standard estimate. The gap between six and the standard estimate, multiplied by 2,800 jobs, is the most expensive rounding error in the business.

Late invoicing impact on cash flow: estimated $45,000-$65,000 in delayed receivables at any given time. The money isn't lost. It's late. And late cash flow compounds into credit line usage and the owner checking the bank balance Monday mornings (a habit Marcus in Houston knows well).

The Design

Four stages. The core insight: Mike's job is plumbing. The data about Mike's plumbing needs to arrive at the office at the speed of the internet, not at the speed of Mike's van.

Stage 1: Mobile job completion interface

A mobile form presented to the plumber at job completion, linked to the ServiceTitan job record. Pre-populated with: customer name, address, job type, dispatched materials. Mike adds: work performed (structured dropdown plus free text), actual materials used (searchable list from ServiceTitan inventory, with quantities), photos (attached directly to the job record), and follow-up notes. Auto-captures: completion time, GPS confirmation of on-site location, plumber ID.

Three minutes. While he's still parked at the customer's house. Less time than writing on the clipboard, because the dropdown and searchable inventory list are faster than handwriting from memory.

Stage 2: Validation and enrichment

The agent checks: are materials consistent with this job type? A water heater replacement without a PRV listed triggers a prompt: "Did you replace or inspect the pressure relief valve?" Do hours match the dispatch window? Are photos attached? Is any required field empty?

The validation happens while Mike is on-site and remembers everything. The clipboard has no validation. Lisa's clarifying text messages happen 4 days later, when Mike's memory of "copper fittings" has degraded from "six 3/4-inch elbows and two couplings" to "some."

Stage 3: Invoice generation

Validated job data pushes to ServiceTitan via API. Materials priced from the inventory list. Labour calculated from hours times rate. Invoice pre-generated and sent to Lisa's review queue. Lisa opens it, confirms or adjusts, and the invoice sends. Sixty seconds instead of 18-25 minutes. Because she's reviewing, not reconstructing.

Stage 4: Reporting and leakage dashboard

Tracks: average time from completion to invoice (target: under 30 minutes). Jobs submitted same-day versus delayed. Materials variance (estimated versus actual, catching unbilled materials before they become absorbed cost). Revenue per plumber per day. Cash flow impact of accelerated invoicing. Weekly report to the operations manager and owner.

Design Notes

The form has to be faster than the clipboard, or the plumbers won't use it. This was the constraint that governed the entire mobile interface design. Pre-populated fields reduce input. The searchable materials list is faster than writing from memory (Mike types "Rhe" and the 50-gallon Rheem Pro appears). Quantities are tap-to-increment, not typed. Photos attach with a camera button. If the form takes longer than the clipboard, the plumbers will use the clipboard. The measured time in the pilot: 2 minutes 40 seconds average, versus 3-4 minutes for a legible clipboard entry (and considerably less for the illegible ones, which is part of the problem).

The materials validation prompt prevented $4,200 in unbilled materials in the first quarter. The agent flagged 31 jobs where commonly required materials weren't listed. In 23 cases, the plumber had used the materials and forgotten to list them. Eight were legitimate (the existing part was inspected and fine). The prompt catches the forgetting while the plumber is on-site and can check. The clipboard catches nothing. Lisa catches what she can from experience, which is roughly 60% of the gaps.

The Pam pattern recurs. Pam in Denver had the same field-to-office documentation gap with roofing. Crews texted photos. The agent handled everything downstream. Mike's version is more structured (a form instead of a text message) because plumbing jobs have specific materials and quantities that roofing photo documentation doesn't require. But the principle is identical: capture at point of completion, not at point of return.

How to Build This

Recommended stack: n8n for orchestration. ServiceTitan API for job records, inventory, and invoicing (check your plan level; API access typically requires Pro or Titan). Mobile form via Jotform or Typeform with webhook output (fastest to deploy) or a custom React form on Netlify/Vercel (more control). Twilio for SMS notifications if needed. AWS S3 for photo storage. Claude Haiku for materials validation (minimal per-job cost). Postgres for tracking.

Step 1: Set up infrastructure (Days 1-2). Deploy n8n. Configure ServiceTitan API credentials. Set up mobile form platform (Jotform Bronze is sufficient; configure webhook to n8n). Set up S3 bucket for photos with pre-signed URL generation. Set up Postgres.

Step 2: Build the mobile form (Days 2-4). Fields: work performed (dropdown plus free text), materials (searchable list populated from ServiceTitan inventory via API on form load), quantities (number input), hours (auto-calculated from dispatch time if available, or manual entry), photos (multi-upload via S3 pre-signed URLs), follow-up needed (toggle plus notes). Pre-populate on load: customer name, address, job type, dispatched materials from ServiceTitan job record. Form submits to n8n webhook.

Step 3: Build the validation workflow (Days 4-5). Webhook receives submission. Fetch job record from ServiceTitan. Claude Haiku validation: "This is a [job type] completion. Materials listed: [list]. Common materials for this job type include: [reference list]. Are any commonly required materials missing?" If flagged: return prompt to plumber's phone. Check hours against dispatch window. Check minimum photo count (1 for standard jobs, 3 for installations). If all clear: proceed. If not: return specific prompts.

Step 4: Build invoice generation (Days 5-6). Push validated data to ServiceTitan via API. Materials priced from inventory. Labour calculated. Invoice pre-generated. Notify Lisa via Slack or email: "Job #[number] complete. Invoice ready for review." Lisa confirms in ServiceTitan. Invoice sends.

Step 5: Build dashboard and reporting (Days 6-7). Daily Schedule Trigger. Track: completion-to-invoice time, same-day submission rate, materials variance, photos per job, flagged validation prompts. Weekly report to ops manager. Monthly report to owner.

Step 6: Test and refine (Days 8-10). Pilot with 2-3 plumbers for one week, running mobile form and clipboard in parallel. Compare data accuracy. Verify ServiceTitan sync. Test photo upload on mobile networks (not just Wi-Fi). Adjust validation prompt sensitivity based on false positive rate. Roll out after successful pilot.

Estimated build time: 8-10 days for a competent n8n developer. 3 weeks if learning alongside. The mobile form is the most time-consuming component.

Cost Breakdown

Monthly running costs:

Component

Estimated Monthly Cost

n8n (Cloud Starter or self-hosted)

$25-$50

Claude API (Haiku validation, ~$0.15/month)

$1-$3

Mobile form (Jotform/Typeform)

$0-$25

Photo storage (S3, ~500MB/month)

$1-$2

Postgres

$0-$5

Total

$29-$90

Build costs if hiring: 8-10 days at $400-$600/day = $3,200-$6,000. Self-built: $0.

Year-one total: $3,548-$7,080 (with developer) or $348-$1,080 (self-built). Compared against $94,100-$130,740/year in unbilled materials, lost job sheets, admin data-entry time, and delayed receivables. The agent pays for itself in the first week of faster invoicing.

What Could Go Wrong

Plumbers won't use the mobile form. The form must be faster than the clipboard (target: under 3 minutes). Pre-populated fields and searchable lists reduce input. Show plumbers the direct benefit: "Your invoice goes out today. You get paid faster. Your materials get billed." Pilot with the most tech-comfortable plumbers first.

Mobile connectivity on job sites. Build with offline capability. Data saves locally, submits when signal returns. Most form tools support this. For custom builds: service worker with local storage and background sync.

Material list doesn't match what's on the van. Include a "custom material" free-text field for items not in inventory. Lisa reviews custom entries and adds them to the database. Track custom entry frequency; the top 10 become permanent inventory items.

Validation produces false positives. Prompts are suggestions, not blockers. "We noticed no PRV was listed. Did you replace or inspect it?" Plumber can respond "inspected, OK" and proceed. Track override rate; above 30% means the prompt is too aggressive.

ServiceTitan API access. Check your plan level. Most Pro plans include API access. If restricted, consider using ServiceTitan's CSV export as a fallback data source.

Photo upload size. Compress on upload (1MB target). Estimated annual storage at 2,800 jobs: 8-14GB. Under $5 per year at S3 pricing.

The Pattern

If your field team generates information on clipboards and your office team converts handwriting into system entries days later, the gap between the van and the office is costing you more than you've measured. Cash flow delay. Unbilled materials. Lost job sheets. Admin time spent deciphering instead of administering.

Your team is the software. Lisa is the data bridge between the van and ServiceTitan. The clipboard is the data format. The van folder is the transfer protocol. The 4.2-day invoice delay is the processing speed of a system that was never designed, just inherited.

The agent doesn't change what Mike does. He still does plumbing. It changes how the information about his plumbing travels from the job site to the invoice. Three minutes on a phone instead of three minutes on a clipboard. The same effort from Mike. A different outcome for the business.

This is Blueprint #49 in the AdAI series. Every week we publish the full architecture of a real AI agent design: the bottleneck, the build guide, and the costs. Free to read. Free to build from.

Want the next one? Subscribe to AdAI News. New blueprint every Thursday.

by TG
for the AdAI Ed. Team

Keep Reading