A professional services firm billing 60–80 clients monthly was running their entire invoicing operation through QuickBooks, a shared Google Sheet, and manual email drafts. Each billing cycle required two days of concentrated effort. We eliminated it.
A professional services firm billing 60–80 clients monthly was running their entire invoicing operation through QuickBooks, a shared Google Sheet, and manual email drafts. Each billing cycle required two days of concentrated effort - pulling project data, calculating billable hours, generating PDFs, chasing approvals, sending emails, and reconciling payments manually.
"The worst part was chasing approvals internally. A partner would be in client meetings for three days, and invoices would just sit there. Then we would send late, and then clients would pay late. The whole cycle was broken."
Professional services and consulting firms at the 20-80 person scale share a common billing pattern: billing is complex enough to require human judgment, but repetitive enough that doing it manually every month is genuinely painful. Clients have different billing terms, different approval chains, different preferred invoice formats, and different payment behaviors. The finance associate who understands all of this is usually the person holding the whole operation together - and when she is on leave, billing simply stops.
This firm had 60-80 active clients at any given time and billed on a milestone basis rather than a fixed monthly retainer. That made automation harder than a simple recurring charge setup, but it also made the manual process more time-consuming. Each invoice required pulling actuals from ClickUp, cross-referencing the agreed milestone scope, calculating any overages or write-offs, and then routing through an email approval chain that could take anywhere from two hours to four days depending on which partner was involved. They had previously tried building Zapier automations to handle parts of this, but the automations broke repeatedly when invoice formats changed or project structures were reorganized. The underlying issue was that Zapier's trigger-based model could not handle the exception cases that were actually common in their work.
We built a fully automated invoicing pipeline using n8n, integrated with their project management tool, QuickBooks, and email. When a project milestone is marked complete, the workflow automatically calculates billable amounts, generates a formatted invoice, routes it for Slack approval, and sends it on approval - all without human input.
The core pipeline runs on n8n, chosen because the approval routing logic required branching and conditional paths that are difficult to manage in simpler automation tools. The pipeline integrates ClickUp via API to pull milestone completion events and time tracking data, QuickBooks for invoice generation and payment status, Slack for approval routing, and Gmail API for client dispatch. Each invoice is generated as a QuickBooks invoice object rather than a PDF - this means payment tracking, reconciliation, and overdue reminders all happen natively within the accounting system rather than requiring a separate layer.
The Slack approval step deserved more engineering time than initially planned. We built a structured approval message that includes the invoice preview, the underlying calculation, and the client's payment history. A partner can approve, reject, or request amendment directly from Slack without opening any other system. Partial approvals - where a partner wants to adjust a line item before sending - route to a lightweight amendment form rather than requiring the finance team to regenerate the invoice manually. Exception handling covers disputed amounts, clients with outstanding balances, and invoices where the ClickUp actuals diverge significantly from the agreed milestone scope. Each exception path notifies the finance lead with the specific reason and suggested action.
The most significant discovery during the build was the approval threshold complexity. Not all invoices were routed to the same partner, and not all partners had the same approval authority. One partner handled all technology clients, another handled all retainer work, and a third handled any invoice above a certain value regardless of client type. These rules had never been written down. The finance associate held them in her head and routed accordingly. In the first discovery session, we mapped out every combination and encoded them as configurable routing rules - essentially a decision table that the firm could update themselves as their structure changed.
The second challenge was clients who regularly paid from a different entity than the one on the invoice. This caused reconciliation failures in QuickBooks because the payment did not match the invoice record. We added a client alias table to the pipeline that maps known alternate payer entities back to the primary client record before reconciliation runs. This had been a manual correction the finance team made every month - encoding it as a lookup table eliminated it entirely.
The billing cycle went from two days to approximately 20 minutes of exception handling. On-time invoice dispatch improved from 71% to 99%.
The downstream cash flow impact was significant. With invoices dispatching within hours of milestone completion rather than days or weeks later, average payment receipt time shortened by 11 days. The firm's DSO improved measurably in the first quarter post-launch. The finance associate now spends the time she previously spent on billing on financial analysis work that she had never previously had the capacity to do - specifically, building a client profitability model that the partners had been asking for for over a year. The system also exposed a pattern the firm had not previously seen: three clients were consistently paying late, and the automated overdue reminder sequence revealed that two of them had outstanding invoice queries that had never been addressed.
Invoice automation fails when it treats all invoices as identical. The value is in the exception handling - encoding the rules your team already knows but has never written down. Every professional services firm has a version of the undocumented routing logic described here. The discovery process of surfacing and formalizing those rules is often more valuable than the automation itself, because it forces the business to confront the institutional knowledge that lives in one person's head and builds it into a system that survives staff changes and growth.