The challenge
The client is a 40-person accounting firm in Chicago serving mid-market clients on a mix of compliance and advisory work. Their month-end close was a nine-day slog, and the reason was not the accounting; it was the plumbing. Client financials lived in QuickBooks. The engagement and billing data lived in Salesforce. Payroll ran through a separate provider. And the practice-management tool that tracked who owed what work sat in its own silo.
Nothing talked to anything. Every month, three staff accountants spent their days exporting CSVs from one system and re-typing the numbers into spreadsheets that fed the next. The partners could not see close status in real time; they found out a client was behind when someone walked into their office. The firm was turning away advisory work, the profitable kind, because the team was buried in mechanical re-keying it should never have been doing.
What we found
We sat with the ops manager through one full monthly close, watching what actually consumed the days. Of the roughly 30 staff-hours per week the team spent closing, more than two-thirds was data movement, not judgment: pull a report, reconcile it against another report, type the result somewhere a third report could read it. None of that needed a CPA. All of it needed an API.
What made that fixable rather than merely visible: all four systems already had APIs the firm was paying for and not using. There was no integration to build from scratch; there was integration to finally turn on.
What we built
An internal ops dashboard, the firm's single source of truth for close.
- Integrations: Read connections into QuickBooks, Salesforce, the payroll provider, and the practice-management API. Each one normalized into a shared schema so a client looked the same no matter which system the data came from.
- Durable jobs: The syncs and reconciliations run on Temporal workflows. That mattered because these jobs touch four third-party APIs that rate-limit, time out, and occasionally go down. Temporal gave us retries, idempotency, and a clean audit trail for every run, so a failed payroll sync at 2 a.m. resumes itself instead of corrupting a close.
- The dashboard: A live close board showing every client's status, what is blocking it, and who owns the next step, with the underlying numbers pulled straight from source instead of re-keyed.
9 days
Four siloed systems, daily manual CSV re-keying
4 days
One dashboard, automated syncs on Temporal, zero re-keying
Results
(See the full headline-results grid at the top of this page.)
How the engagement ran
Shadow the close + map the data
Sat with the close team through a full cycle. Mapped every export, every spreadsheet, every hand-off. Confirmed all four systems had usable APIs.
Integrations + shared schema
Built the read connections to QuickBooks, Salesforce, payroll, and practice management. Normalized everything into one schema so a client is one record, not four.
Temporal jobs + reconciliation
Moved the syncs and reconciliations onto Temporal workflows for retries and idempotency. This is where the zero-re-keying number came from.
Dashboard + parallel-run
Shipped the close board and ran one full month-end in parallel against the old spreadsheet process to prove the numbers matched to the penny before cutover.
The numbers
The first close on the dashboard finished in four days against the prior nine. Manual re-keying dropped to zero; the only typing the team does now is judgment and notes. Across the close team, that reclaimed 22 staff-hours per week, time the partners redirected into the advisory engagements they had been turning down.
We were paying CPAs to retype numbers a computer should have moved. The dashboard gave us back roughly half a person's week, every week, and the close board means I finally know where every client stands without walking the floor.
What we learned
Most "we need new software" problems at services firms are actually "our software never got connected" problems. The firm already owned every API we used; the value was in the integration layer and durable jobs, not in replacing tools the team already knew. Build the boring plumbing well and the hours come back.
The hours a services firm loses to re-keying are almost never a software-shopping problem; they are a connection problem, and the time comes straight back once the systems finally talk. Talk to us about your back office: /contact.