Accounting Firm Workflow Software: What to Build When Karbon, Email and Spreadsheets Stop Scaling
If your firm coordinates work across Karbon, Outlook and a wall of tracking spreadsheets and you are past roughly 12 to 15 staff or two service lines, a custom workflow layer usually pays for itself in one busy season: expect $40,000 to $90,000 for a focused first release shipping in 10 to 14 weeks, with fuller practice platforms landing between $100,000 and $250,000. Below that size, configuring Karbon properly is the cheaper honest answer.
What actually breaks in a CPA firm running on Karbon, email and spreadsheets
Picture a 22-person firm in the second week of March. Around 1,100 individual returns, 240 business returns, 38 monthly client advisory services (CAS) engagements. Work items live in Karbon. Client conversations split between Karbon triage and three partners' personal Outlook inboxes, because the partners never fully moved over. The real due date list is an Excel file called Master Tracker 2026 v7 FINAL, rebuilt from a Karbon export every Monday by the tax manager. It takes her three hours and it is stale by Wednesday.
Karbon is genuinely good at what it sells: shared inboxes, work templates, client tasks. The damage comes from everything it cannot see. E-file acknowledgments sit inside UltraTax. Signed 8879s sit in SafeSend. Engagement letters sit in Ignition. Workpapers sit in SmartVault. When a partner asks where the Hendersons stand, the honest answer requires opening four systems and one spreadsheet, and the systems disagree.
So the firm compensates with people. An admin spends half her week re-keying status between tools. Seniors keep private side lists because they stopped trusting the tracker two seasons ago. Every year adds one more spreadsheet, one more color code, one more Saturday. The question this guide answers is whether a custom build fixes that, or just becomes the fifth system nobody trusts.
The Monday status spreadsheet that is wrong by Wednesday
The export ritual exists because no single tool holds a return's status end to end. A 1040 moves through states your firm defined and no vendor did: waiting on documents, in preparation, in review, waiting on the 8879, e-filed, accepted, extended. Karbon knows some of those states. UltraTax knows others. SafeSend knows exactly one. The Excel tracker is a human-powered join across all of them, and it goes stale in about 48 hours during busy season.
Off-the-shelf software cannot fix this because the vendors do not cooperate. Karbon has a usable API, but it has no idea the IRS accepted a return, and UltraTax will not push that fact anywhere. No vendor builds deep sync into a competitor's ecosystem, so the gap is permanent by design.
A custom build attacks the join itself. The pattern Digital Heroes ships most often is a status service: it reads work item state from the Karbon API, ingests the acknowledgment exports your tax software already produces, pulls signature status, and resolves everything into one row per client engagement. The Monday ritual disappears because the tracker is now a screen instead of a file, current at 7 a.m. every day, including Saturdays in March.
Chasing missing client documents quietly consumes an admin salary
A client uploads six of fourteen documents to the portal, emails two more, and texts a photo of a 1099-INT to the partner's cell. The preparer opens the file, finds the brokerage 1099-B missing, parks the return, and the firm burns a second and third touch on a job that should have taken one. Multiply that across 1,100 returns and document chasing eats a full admin position between January and April.
Karbon client tasks help, but they are generic checklists. They do not know what this specific client provided last year, cannot recognize that the PDF uploaded on Tuesday is the missing K-1, and cannot escalate differently for the client who always delivers in the final week.
The custom version starts from prior-year source documents. Last year's return had four W-2s, two K-1s, a 1098 and a brokerage statement, so this year's request list builds itself. Reminders escalate on the firm's cadence, uploads are matched against the outstanding list, and the work item only flips to ready to prepare when the list is complete. Preparers open complete files. The chase becomes a system job instead of an admin's entire Tuesday.
Capacity planning in February is guesswork with a spreadsheet on top
By mid-February one senior is drowning at 68 hours while another sits at 41, and the scheduling spreadsheet knows neither number. Returns get assigned by memory of who handled the client last year. Budget-to-actual surfaces once, in the realization report after April.
Karbon can show work item counts and estimated minutes, but counts are the wrong unit. One 1040 is 90 minutes; another is 11 hours with a rental schedule, three brokerage accounts and a state credit mess. The complexity signal lives in prior-year actual hours inside the tax software and your time and billing history, places no practice management product can reach.
A custom capacity engine assigns each engagement a complexity score from prior-year actuals and form counts, tracks live load per preparer against it, and flags trends: this senior hits 70 hours by Friday at current intake. The tax manager rebalances on Tuesday instead of reading about the damage in May.
The CAS monthly close runs on tribal knowledge
Thirty-eight monthly clients, each with quirks: this one's Amex feed drops transactions, that one needs payroll accrued from a Gusto report, another expects the flux memo by the 10th. Those rules live in one manager's head and a scatter of Excel checklists. When she took two weeks off, three closes slipped and a client noticed before the firm did.
Karbon repeating templates can hold the task list, but a checkbox is not verification. Bank recs done gets ticked whether or not the operating account still shows 47 unreconciled transactions, because Karbon has no opinion about what is inside QuickBooks Online.
A custom close module does, through the QuickBooks Online and Xero APIs. It counts unreconciled transactions per account, detects broken bank feeds and unposted payroll, and refuses to mark a close complete while the ledger contradicts the checklist. A firm-wide dashboard shows every close by day count, so a stall is visible on day 12 instead of day 30. Tribal knowledge becomes system state, which is also what makes a CAS book sellable later.
Nobody trusts the client data in any of the five systems
A married couple with two S corps and a family trust is five Karbon contacts, three portal logins, four versions of one mailing address, and a Section 7216 consent filed under one entity but not the others. An engagement letter goes out in the name of the entity that dissolved in 2024.
Off-the-shelf contact records are flat because they have to work for every industry. Accounting reality is relational: households, entities, ownership percentages, authorized signers, and the divorced spouses who must never see each other's documents again. No general-purpose client relationship management (CRM (Customer Relationship Management)) layer models that, and none will.
In a custom build this data model is the spine, not a feature. Entities relate to households, people relate to entities with roles, and every document, consent and return hangs off the right node. Each person gets one portal login showing exactly the entities they may see. Consents and engagement letters are tracked per entity per year, with expiry dates that surface before busy season.
What custom accounting firm software costs and how long it takes
These bands come from Digital Heroes delivery experience across 2,000+ projects, not a pricing page. A focused first release runs $40,000 to $90,000 and ships in 10 to 14 weeks. That usually means the live status dashboard plus the document chase engine, integrated with the Karbon API, one tax package's exports, and QuickBooks Online. A fuller practice platform, adding a client portal, the capacity engine, the CAS close module and multi-office permissions, lands between $100,000 and $250,000 over five to eight months.
What moves the number up: each additional tax package, because Lacerte, UltraTax, Drake and CCH Axcess all export differently and none offers a friendly public API, so each is its own integration effort. A client-facing portal roughly doubles security and design work compared with internal-only tooling. Document classification, reading an upload and recognizing it as a K-1, adds real cost. And replacing Karbon outright rather than building on top of it can double the total.
One scheduling rule matters more in this industry than any other we build for: production freezes from late January through April 15. Plan to be live and stable by November, or plan for May.
Build vs buy: when staying on Karbon is the right call
Under roughly 10 to 12 staff, or with a single service line, do not build. Most firms that size with workflow pain have an unconfigured Karbon, not a missing product: templates never adapted to the firm's actual stages, triage half-adopted, client tasks unused. A few thousand dollars of setup work and partner discipline beats a custom build at that scale.
The signals that the math has flipped: someone exports Karbon to Excel every week to answer a basic status question. A person on payroll spends most of their time re-keying between systems. You run three or more service lines with genuinely different workflows. You sit at 25 or more seats, where Karbon's published $59 to $89 per user per month starts to compare with owning your own layer. Or you merged with another firm and now need one view across two stacks.
Our position after building for this industry: keep Karbon and build on top of it. Let Karbon keep email triage and task management, the things it is best at, and let the custom platform own cross-system status, document collection and the client data model. Rip-and-replace is where accounting firm software budgets go to die. The layered approach ships inside a quarter and proves its value before you commit another dollar.
How to choose a developer for accounting firm software
Four questions separate developers who have shipped for CPA firms from developers who will learn on your budget.
First, ask exactly how they will get data out of UltraTax or Lacerte. If the answer assumes a public API exists, end the call. The credible answer covers scheduled exports, report file parsing and print-to-file workflows, and is honest about which of those breaks when the tax software updates each fall.
Second, ask when they plan to release. Anyone proposing a February go-live has never worked a busy season. You want a code freeze from late January through April 15 written into the project plan before you have to ask.
Third, ask what IRS Publication 4557 requires and how the build fits your written information security plan (WISP). A developer who has done this work raises encryption of returns at rest, access logging and role separation without being prompted. One who searches for it later is a liability you will discover during a client records request.
Fourth, ask how they would model a married couple with two S corps and a trust. If the answer is a single clients table, keep looking. And whatever you sign, the contract must give you the code, the data and the cloud accounts outright. You are doing this to stop renting your firm's workflow. Do not rent it again from the people you hired to fix it.
The evidence behind this guide
Independent findings on why this investment pays off. Every link goes to the primary source.
- APQC's Open Standards Benchmarking data on the monthly financial close found median performers take about 6.4 calendar days to close the books, while top performers (top 25%) do it in 4.8 days or fewer and bottom performers (bottom 25%) take 10 or more days. Source: APQC (2018) →
- Gartner estimates RPA can eliminate up to 25,000 hours of avoidable rework caused by human errors in the finance function each year, equating to savings of roughly $878,000 for an organization with 40 full-time accounting staff (based on interviews with more than 150 corporate controllers and chief accounting officers). Source: Gartner (2019) →
- Nucleus Research's analysis of published analytics deployment case studies found business intelligence and analytics returned an average of $13.01 in benefits for every dollar spent, up from $10.66 three years earlier. Source: Nucleus Research (2014) →
- SaaS spend averaged $4,830 per employee (up 21.9% year over year), with large enterprises (10,000+ employees) spending roughly $284M annually and running about 660 apps, while organizations wasted an average of $21M annually on unused licenses. Source: Zylo (2025) →
Rohan advises mid-market and enterprise teams on ERP, CRM and custom software, and has led delivery on dozens of business-software builds.
Writes for Digital Heroes, shipping business software for 2,000+ brands across 55+ countries since 2017.