TL;DR: A commercial HVAC company in Columbus was processing 800 service tickets monthly. Their office manager spent 15 hours weekly creating invoices manually—looking up pricing, applying contract terms, handling exceptions. They ran 5-7 days behind constantly. That delay meant $47K sitting in unbilled work at any given time. We built an agent that captures completed tickets, applies all 23 pricing exceptions correctly, generates invoices in QuickBooks, and queues them for one-click approval. Invoice errors dropped from 12% to 2%. Billing now happens within an hour of job completion.
"I'm Considering Quitting"
That's what Lisa told the owner during her review. She'd been the office manager for six years. Knew every customer. Knew the pricing backwards and forwards. Kept the whole operation running smoothly.
But the job had changed.
"This used to be about customer service. Talking to clients, solving problems, keeping relationships healthy. Now it's data entry. I spend three hours a day copying numbers from one system to another."
The company had grown. 45 employees now. 22 field technicians. 800+ service calls per month across Franklin, Delaware, Licking, Fairfield, and Pickaway counties. $6M in revenue.
Good problems to have. But the back office hadn't scaled with the field operations.
Every completed service ticket needed an invoice. Every invoice needed Lisa.
The 22-Minute Invoice
Here's what creating a single invoice looked like:
Tech completes a job and submits a ticket in ServiceTitan. Lisa gets a notification.
She opens the ticket. Reads the notes. Figures out what services were performed and what parts were used.
She opens another window. Looks up the customer. Are they on a service contract? Which tier? What are their specific terms?
She pulls up the pricing sheet. Standard labor rate? Or is this an emergency call? After 6 PM? Weekend? Holiday? Each has different multipliers.
She calculates parts markup. 35% standard. But OEM parts are 25%. And some contract customers have negotiated rates.
She opens QuickBooks. Creates the invoice. Enters line items. Double-checks the math. Applies the right account codes.
She drafts an email. Attaches the invoice. Sends.
She updates ServiceTitan to show invoiced.
Time: 22 minutes.
Now multiply by 40 tickets a day.
Lisa wasn't slow. She was drowning.

The Math That Was Killing Them
15 hours per week on invoice processing. That's Lisa plus occasional help from another admin when things got backed up.
12% error rate on invoices. Pricing exceptions are complicated. Contract customers would catch when they were charged the wrong rate. T&M customers usually didn't notice—but the company was leaving money on the table.
5-7 day delay between job completion and invoice sent. Lisa was always behind. Friday's jobs got invoiced Tuesday or Wednesday. Sometimes later.
8-day average from job completion to payment received. That's the delay plus customer payment terms.
$47,000 sitting in unbilled work at any given time. Work was done. Value was delivered. Cash hadn't arrived.
For a deep dive on how to calculate what delays like this actually cost, we've written about the hidden math.
The Complexity Nobody Mentions
Here's the thing about service business pricing: it's never simple.
This HVAC company had 23 pricing exceptions. Twenty-three. I'll list some so you understand what Lisa was keeping in her head:
Standard labor rate vs. contract labor rate vs. emergency rate
Emergency defined as after 6 PM weekdays, all day Saturday, all day Sunday
But Gold contract customers get emergency calls at standard rate
Silver contract customers get a 15% discount on emergency, not standard rate
Parts markup is 35%
Except OEM parts at 25%
Except for contract customers with negotiated parts pricing (4 different tiers)
Travel time billed for T&M customers outside 30-mile radius
Travel time not billed for contract customers
Minimum service charge of $185 except for Gold contracts
Diagnostic fees waived if repair proceeds
And so on.
Lisa knew all of this. She'd built the mental decision tree over six years. But she couldn't transfer that knowledge to anyone else without a month of training. And she couldn't move faster than her brain could process the exceptions.
The pricing rules weren't the problem. They made business sense. The problem was executing them consistently 800 times a month.

What We Built
The invoice processing agent has five stages.
Stage 1: Ticket Capture
Agent triggers the moment a tech marks a job complete in ServiceTitan. Pulls all ticket data automatically: customer, services performed, parts used, labor hours, service codes, tech notes.
No waiting for Lisa to notice a new ticket. No batch processing. Immediate.
Stage 2: Customer Classification
Looks up the customer in the system. Identifies: contract customer or T&M? Which contract tier? Any special terms? Pricing exceptions that apply to this specific account?
This used to take Lisa 3-4 minutes of clicking between screens. The agent does it in under 2 seconds.
Stage 3: Pricing Engine
This is where those 23 exceptions live.
The agent applies the correct labor rate based on customer type, time of service, and day of week. Calculates parts markup based on part type and customer tier. Handles travel time, minimum charges, diagnostic fees, all of it.
We built this as a decision tree with validation. The agent doesn't just calculate—it checks the result against historical invoices for similar jobs. If something looks unusual (way higher or lower than typical), it flags for review instead of assuming it got it right.
Stage 4: Invoice Generation
Creates the invoice in QuickBooks with all line items, account codes, and customer information. Drafts a customer email with the invoice attached. Everything ready to go.
Stage 5: Approval Queue
Sends a Slack message to Lisa with the invoice summary and a link to review. She can approve with one click, or open it to edit if something needs adjustment.
The critical insight: reviewing an invoice takes 30 seconds. Creating one took 22 minutes. The agent handles the 22 minutes. Lisa handles the 30 seconds.
The Honesty Section
Two things were harder than expected.
The pricing exceptions took three iterations to get right. The first version missed edge cases. Gold contract customer, emergency call, OEM parts—what happens when all three apply simultaneously? We had to work through dozens of combinations with Lisa to make sure the logic matched her mental model.
ServiceTitan's API had quirks. Certain fields populated differently depending on how the tech submitted the ticket. We had to build normalization logic to handle inconsistent inputs. Not complicated, but not documented anywhere either.
The build took about five weeks total. More complex than a basic automation, less complex than something with AI decision-making at every step. Most of the work was encoding business logic, not technical integration.
For context on what agent builds typically cost, we've broken down the economics here.

The Numbers
Before:
15 hours/week on invoice processing
12% invoice error rate
5-7 day delay in billing
$47K in unbilled work at any time
After:
3 hours/week on review and exceptions
2% error rate
Invoices sent within 1 hour of job completion
$47K recovered in cash flow
The surprise benefit: Tech documentation improved.
Weird, right? But it makes sense. Techs realized that clear ticket notes meant faster invoicing. Faster invoicing meant faster commission calculations. Self-interest kicked in. Notes got better across the board.
Lisa's take: "I actually like my job again. I'm back to customer service. When something's wrong, I fix it. But I'm not doing data entry anymore."
The Pattern
If your business runs on service tickets, you probably have some version of this bottleneck.
The symptoms:
Billing consistently runs behind job completion
One person holds all the pricing knowledge
Error rate is higher than you'd like but nobody has time to fix it
Cash flow feels tighter than revenue suggests it should
The core problem: the complexity of your pricing is appropriate for your business, but the process for applying it hasn't scaled.
The fix isn't simplifying your pricing. Your pricing exceptions exist for good reasons. The fix is systematizing how they get applied.
Next Steps
Want to see how this connects to collections? The receivables agent blueprint shows what happens after invoicing—chasing down payments that don't arrive on time.
Want to see 25 agent architectures across different industries? Download Unstuck—it includes this one plus blueprints for lead gen, scheduling, quoting, and more.
Think invoicing might be your bottleneck? Book a Bottleneck Audit. 30 minutes, no pitch. We'll map your current invoice flow and identify where the delays actually live.
by WB
for the AdAI Ed. Team


