Tax Preparation Software: The Problems Off-the-Shelf Tools Leave You With, and What a Custom Build Fixes
If you file more than roughly 1,500 returns a season across two or more offices and your firm administrator still keeps a spreadsheet that outranks every system you pay for, building is usually the right call. In Digital Heroes delivery experience across 2,000+ projects, a focused first release covering return tracking, document intake and the signature-to-acknowledgment loop runs $60k to $130k and ships in 12 to 16 weeks. A full platform with billing, capacity forecasting and multi-year rollover runs $150k to $400k, phased over 6 to 12 months. Below that volume, keep Canopy or TaxDome and spend the money on staff.
Why return tracking makes or breaks a high-volume tax firm
It is March 22. Your firm administrator has a client on hold asking whether her 1040 is done. The answer requires three logins: UltraTax CS to see if the return has been prepared, SmartVault to see whether the brokerage 1099 ever arrived, and Karbon to see whether the reviewer signed off. None of them agree. The whiteboard behind the front desk says "waiting on K-1," which was true on March 4. The preparer who wrote it is on a different floor of a different office and has already moved on to eleven other files.
This is the shape of almost every firm doing 1,500 to 6,000 returns a season. The tax engine (Drake Tax, Lacerte, ProSeries, UltraTax CS, or CCH Axcess Tax) calculates the return and files it. The portal (SmartVault, TaxCaddy, Liscio, ShareFile) holds the documents. The practice tool (Canopy, Karbon, Jetpack Workflow, TaxDome, XCM) holds the tasks. SafeSend Returns or TaxCaddy handles delivery and the 8879. Outlook holds every actual decision anyone ever made. And one Excel file, usually maintained by a single person who cannot take a day off between February and April, is the only place where the real status of every return lives.
Run the arithmetic on your own season. If each return gets its status looked up eight times across intake, prep, review, signature chase and delivery, and each lookup burns three minutes of a person hunting across systems, that is 24 minutes per return of pure coordination. On 2,400 returns that is roughly 960 hours. At a $95 blended loaded cost, it is about $91,000 of your busiest people doing nothing that touches a tax position. That number does not include the returns that quietly sit for nine days because everyone assumed someone else owned them.
Problem: nobody can answer "where is this return" without three logins
Your tax engine has a status field. It is preparer-entered, it is per-return-per-year, and it means whatever the last person to touch it decided it meant. Canopy and Karbon have their own status, driven by task completion, which lags reality because preparers close tasks in batches on Friday. Neither knows that the client emailed a corrected 1099-B on Tuesday.
Off-the-shelf tools cannot fix this because none of them is allowed to be the authority. CCH Axcess and Karbon both want to own workflow, and integrations between them are shallow: they sync client names and due dates, not the state machine. So the state machine ends up in a human head.
A custom build starts with one record: taxpayer, tax year, entity type, engagement. Every stage transition (received, in prep, in review, awaiting client, signed, transmitted, accepted, delivered, billed) is an event with an actor, a timestamp and a reason code. You pull return status and e-file acknowledgments from the tax engine on a schedule and reconcile them against your own ledger, so disagreement becomes a visible exception rather than a phone call. The screen your administrator opens shows every return in the firm, filtered by office, preparer, reviewer, days-in-stage and days-to-deadline, and it is right because nothing else is allowed to be.
Problem: document intake is a shoebox with a login screen
The portal solved shipping, not sorting. A client uploads 43 pages as one scanned PDF titled "taxes.pdf." Someone on your team, often a $28-an-hour seasonal admin, opens it, figures out that pages 12 through 19 are a consolidated brokerage statement, splits it, renames it and files it. Then the preparer opens the file three days later and discovers the K-1 from the client's LLC is not there, and the missing-item email goes out, and the clock starts again.
GruntWorx and AutoEntry do extraction, but they hand you data and stop. They do not know what is missing, because they do not know what the client had last year.
AI pays for itself in exactly one place here, and it is specific. Classify every page on upload: W-2, 1099-NEC, 1099-B, 1098, K-1, closing statement, prior-year return, junk. Extract the fields that matter and attach them to the return record with a confidence score, routing anything under threshold to a human queue rather than pretending. Then do the part nobody sells: diff this year's document set against last year's filed return. If the client had three K-1s in 2024 and two have arrived, the system knows what is outstanding by entity name, generates the missing-items list without a preparer writing it, and chases it. Chasing runs at 7pm on a Tuesday by SMS with a one-tap upload link, escalating to the relationship partner only after the third silent attempt. In practice this is where firms recover the most hours, because the chase is the work.
Problem: the 8879 chase and the e-file reject nobody owns
Delivery is where a well-prepared return goes to die. The return is done on April 2. The 8879 goes out. The client does not sign. Nobody notices until April 12 because the signature status lives in SafeSend and the deadline lives in someone's head. Meanwhile a return you transmitted on March 28 came back rejected from Modernized e-File over a dependent SSN mismatch, and the acknowledgment landed in a shared inbox that three people half-watch.
SafeSend Returns is good at what it does and prices per return, which is fine until you understand that its status never reaches the one dashboard your partners look at. Reject codes are the sharper failure: a rejected return is not a filed return, and after April 15 the perfection window is short.
A custom build treats acknowledgments as first-class inbound data. You ingest ack files from the tax engine, map reject codes to a named owner and a required action, and open a timed exception that cannot be closed silently. Signature requests carry the identity verification your remote 8879s require, and unsigned forms age visibly: on a screen, by hours, sorted by deadline exposure, with automated reminders that stop the moment the signature lands. Your April 10 extension decision becomes a filter, not a fire drill.
Problem: you cannot see capacity until you are already underwater
Every firm owner makes the same February discovery: one office is drowning and another has a reviewer with slack, and by the time that is obvious it is too late to move work. Practice tools show you task counts. Task counts are not capacity, because a 1040 with a Schedule C, rental property and three states is not the same unit of work as a W-2 return.
Build a complexity score from data you already own: prior-year forms count, state count, K-1 count, entity type, whether last year required review rework. Weight each open return by it, sum by preparer and reviewer, and compare to remaining working hours before the deadline. Now the burn-down is real, and routing is a decision rather than a reaction. Forecasting here is honest AI use: a model trained on your own last three seasons predicts cycle time per return type per preparer, which tells you on February 8 that you will miss roughly 60 returns, while you can still hire, extend deliberately, or shift files between offices.
Problem: fixed fees quoted in December against work that mutated in March
You quoted $525 for a 1040 in the engagement letter. The client's bookkeeping was a mess, the preparer spent 2.4 hours cleaning it, and nobody re-priced because re-pricing in season means a conversation nobody has time for. Multiply by 200 clients and the leakage funds a partner's salary. Ignition handles the proposal, your tax engine handles the return, and nothing connects the scope you sold to the work you did.
A custom build ties the engagement's scoped items to the actual return record, flags in real time when work exceeds scope (extra states, extra K-1s, cleanup hours past a threshold), and puts an out-of-scope prompt in front of the preparer at the moment it happens, with a pre-written client message. Realization per return, per preparer, per office becomes a number you see weekly instead of a post-season autopsy.
What a custom build costs and how long it takes
Across 2,000+ projects, Digital Heroes sees this category land in two bands. A focused first release covering the return ledger, document intake with classification and the missing-items engine, the signature and acknowledgment loop, and one live dashboard runs $60k to $130k and ships in 12 to 16 weeks, deliberately timed to land before a season rather than during one. A full platform adding capacity forecasting, billing and realization, client-facing portal, multi-year rollover and multi-office reporting runs $150k to $400k, phased over 6 to 12 months.
What pushes price up in tax specifically: the number of tax engines you have to read from (a firm running both Lacerte and CCH Axcess after an acquisition roughly doubles the integration surface, and CCH Axcess data access is harder than Drake's); state e-file coverage; hosted environments like Rightworks or Citrix that constrain how you reach the data; the security work that the FTC Safeguards Rule and IRS Publication 4557 require, including your written information security plan, encryption at rest, access logging and MFA; Section 7216 consent tracking if you ever want to use return data for anything beyond preparing the return; and migrating five to ten years of prior-year documents so the year-over-year diff works on day one. That last item is routinely underestimated and is worth budgeting as its own line.
Build vs buy: take the position honestly
Buy if you are a single office under roughly 1,200 returns with one dominant service line. TaxDome or Canopy plus Drake will cover you, and a custom platform will cost more than the coordination it saves. Buy if your partners are three years from selling, because the acquirer will migrate you to their stack anyway. Buy if you have nobody internally who will own requirements: software built without a firm administrator in the room becomes shelfware by February.
Build when these signals show up together. Your administrator's spreadsheet outranks every system you license. You added a second or third office and reporting now means someone consolidating exports by hand. Your seasonal staff cost is climbing while return count is flat, which means coordination is eating the margin. You lost a client over a missed deadline that no system flagged. Or you have a real service edge, high net worth, multi-state, a specific industry niche, that the generic tools force you to describe in fields built for someone else's firm. At that point the off-the-shelf stack stops being the cheap option and starts being the reason your seasonal payroll keeps climbing.
How to choose a developer for tax preparation software
Make them diagram the domain in the first meeting, before you pay anything. If they cannot articulate why the primary key is taxpayer plus tax year plus entity, why an amended return is a new record rather than an edit, and how a joint return that becomes two separate returns after a divorce is handled, they will learn it on your money.
Make them prove integration reality, not integration slideware. Ask specifically how they would read return status and acknowledgments out of your engine: Drake, Lacerte, UltraTax CS and CCH Axcess each expose data differently, and some of it is export files rather than an API. A developer who says "we will integrate with your tax software" without naming the mechanism is guessing.
Test them on compliance as engineering, not as a checkbox. They should bring up the FTC Safeguards Rule, your WISP obligations under IRS guidance, e-signature identity verification for remote 8879s, audit logging on every view of taxpayer data, and retention policy, before you do. Ask where the data will be hosted and who on their team can access production.
Finally, insist on a delivery plan built around your calendar. Anyone proposing a go-live in February has never watched a firm in season. The right answer is a release that lands in September or October, gets run against extension season, and is hardened before January. And get the code and the repository in your name from commit one, with the deployment runbook written down.
The evidence behind this guide
Independent findings on why this investment pays off. Every link goes to the primary source.
- Citing Ardent Partners' State of ePayables research, manual invoice processing costs about $12.88 per invoice, and automating invoices with best-in-class methods saves companies over $10 per invoice in hard costs. Source: Bottomline Technologies (citing Ardent Partners) (2024) →
- Deloitte reports that modern ERP implementations aim to deliver reduced manual effort, greater transparency, a single source of truth, and increased productivity, but many organizations do not capture the full expected benefits (a significantly lower ROI) without disciplined strategy, change management, and data readiness. Source: Deloitte (2024) →
- Criteo's Global Commerce Review found retail apps convert at 18% versus 4% on mobile web (roughly 4.5x), and travel apps convert at 20% versus 6% on mobile web (about 3.3x). Source: Criteo (2017) →
- Median SaaS spend reached $9,455 per employee, and organizations leave an average of 36% of their SaaS licenses unused. Source: Zylo (2026) →
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.