Eliminate Non-Billable Hours in a US Tax Practice
Chasing documents, collecting 8879 signatures, sorting bank statements into Schedule C categories, retyping invoices. These are the hours nobody pays you for. Here is the workflow that removes them, plus an honest account of what the software does and does not do.
By Rashad Bayram | Published: 7/29/2026
Short answer: four things eat the hours you can't bill. Collecting client information. Chasing documents and signatures. Turning bank statements into Schedule C categories. Retyping finished work into an invoice. Each one is a handoff, a spot where information already exists but can't move without a person carrying it. Close the handoffs and the hours come back. Working faster inside them doesn't help. Updated for tax year 2025. TaxFormify is practice management software for US accounting firms. It ties client intake, e-signature, document exchange, AI-assisted expense categorization and invoicing to one client record. It doesn't file returns and it isn't a general ledger. What follows is how the pieces connect. The feature list and pricing live elsewhere. Your hours split two ways. Some a client pays for. Some keep the engagement moving and show up on no invoice. Preparation, review, advisory: billable. Emailing a client a fourth time about a missing 1099: not. Neither is retyping answers off a returned PDF, or opening a word processor after the return is filed to rebuild the engagement details as an invoice. The good news about that second pile is that it's structural. Structures can be changed. Where the hours actually go Worth naming the sinks precisely. "We waste time on admin" has never produced a fix for anyone. The double red rule marks the point where information stops moving on its own and somebody has to carry it. Every one of those carries is unbillable. Handoff What happens Why you can't bill it Question → Answer You email a questionnaire, they return a PDF, someone retypes it into your system Transcription. The client already typed it once Request → Documents You email a checklist, they send three of eight items, you email again across five threads Chasing is coordination. No client accepts a line item for it Authorization → Sign Print, scan, email, wait, remind, receive a photo of a page shot at an angle, file it None of it produces work product Statement → Categories A bank statement arrives and someone maps every line to a Schedule C category by hand Keying rows in is setup for the real work Desk → Invoice The engagement closes and someone retypes scope, rates and totals into a billing tool You already hold every one of those facts One note on sourcing before we go on. Several sections below link to write-ups by Rashad Bayram, who founded TaxFormify and writes separately about practice mechanics at rashadbayram.com. That's the same author's own site, not independent corroboration, and it's cited for practical detail only. On why document collection outranks preparation speed as a bottleneck, his Stop Chasing Clients for Tax Documents goes deeper than we will here. The loop Five stations and a connective layer in the middle. It's a loop because the last station feeds the first: the same client comes back next year, and by then the setup work is already paid for. Notify is the event layer that carries each station to the next without you writing a message. The red arc is next year, when the assets you built are free. # Station What it removes 01 Ask Retyping client answers off a returned PDF 02 Sign Print, scan, email, remind, file 03 Share Per-client emails and manual attachment filing 04 Categorize Line-by-line transaction entry 05 Bill Retyping scope and rates into a separate tool hub Notify The "did you get it / did you send it" email 01 Ask The intake questionnaire is identical every year and costs the same every year. You email a PDF. The client fills it by hand or types into a form field. They email it back. Someone transcribes. And half the questions never applied to that client, so they either answered anyway or left blanks, and you can't tell which from looking. Build the questionnaire once instead. Alongside your own forms there's a library of default forms published centrally, versioned, read-only until you duplicate one to edit. They're scoped by country, so a US practice sees US templates. Conditional logic keeps clients from seeing questions that don't apply. That matters more than it sounds, for an unobvious reason: the branching rules run through one shared evaluator that both the browser and the server use. When a form builder keeps two separate implementations, they drift. Required questions get waived and a submission arrives with blanks you didn't know were reachable. Two ways to get a form out: Assign it to a connected client, one at a time or in bulk. Quick Share, a permanent reusable link you can hand to anybody. No pre-entered email, no expiry. The client's email gets collected when they open it rather than baked into the URL, opens are counted, and you can switch the link off without minting a new token. Answers are encrypted at rest. You get a notification when one lands. What comes off the unbillable pile: questionnaire assembly, transcription, and the extra round a client triggers by answering questions that were never theirs. Designing the questionnaire so it produces fewer rounds is the other half of this problem. The tax client questionnaire that builds its own document request covers that side. 02 Sign An e-filed return generally needs a signed authorization on file, which for most preparers means Form 8879. The professional work took minutes. The signature takes days: print, sign, scan, email, remind, receive a photo of a page shot at an angle, then file it somewhere you'll find it again under examination. Upload the PDF, drop signature fields where they belong, generate a link. Your signer doesn't need an account. They pass an identity gate, sign on a canvas in the browser, submit. The signature gets embedded into the PDF and you get a completion notice. Two details behind that matter more than the convenience does. The signing endpoints carry their own CSRF verification, because a public endpoint that changes state without it is a live hole rather than a theoretical one. And completion runs through a compare-and-set, so two submissions arriving together can't both mark the same document complete. Now the boundary, because it's a real one. This is a general document-signature workflow that you point at your authorization forms. Whether a particular signature satisfies IRS requirements for a particular form is a question about IRS rules. Our software doesn't answer it. Which authorization form applies depends on what you're e-filing. The IRS pages for Form 8879 and Form 8878 are in the sources below. What comes off the pile: printing, scanning, chasing, filing. 03 Share Your firm sends broadly the same package to every client of a given type. Engagement letter, checklist, prior-year worksheet. The package is identical. The sending isn't: forty individual emails, each assembled by hand, each spawning a reply thread, each needing a mental note about who has answered. Then the responses arrive scattered across those threads and somebody downloads, renames and files each one. So keep a document library instead. Folders of templates that live once, at firm level, versioned properly. Upload a new version to the same document and the counter increments. The old version stays. Every version carries its own integrity hash. From there you can push: One document to one client, or to a set of them. A whole folder to many clients in a single action. The folder name gets snapshotted at push time, so the client keeps seeing the package grouped the way you sent it even after you rename things on your side. With a due date per assignment, so the deadline lives on the request instead of in your head. Revocable when scope changes. Access ends. The record that you shared it doesn't. Every assignment carries a status of its own: assigned , then opened , then responded . That's your chase list, built for you. No reconstructing who replied by scrolling an inbox. The return path is the part that closes it The client's upload lands in their own document vault, a folder structure they own, organized by tax year. The file then links itself back to the assignment that asked for it. Request and response become one record rather than two facts you correlate by hand. You get a notification. Uploads get content-scanned on the way in. File type is checked against magic bytes rather than trusting the extension, and the payload goes through virus scanning. An .exe renamed to .pdf doesn't become your problem. Access is enforced per file rather than by unguessable URL, and asking for a document that isn't yours returns a not-found rather than a forbidden, so nobody can use the API to map what other firms hold. What comes off the pile: request assembly, follow-up composition, response tracking, downloading, renaming, filing. 04 Categorize, and what the AI really does Most of the hours are here. So is most of the loose talk about AI, so we'll be specific, including about the edges. A client sends a 14-page PDF bank statement. Or a CSV with columns in an order nobody else uses. Or a scan with no text layer at all. Somebody has to turn 340 rows into categorized expense lines mapped to real Schedule C lines, then decide which lines are personal and drop them. At fifteen seconds a transaction that's over an hour per statement before anyone has made a judgment call. You upload the file. That part is manual on purpose. You pick what goes in. Processing happens on a queue, not in a chat window. The upload request comes back right away and the job streams progress to the page while it works through extraction, client resolution, categorization and saving. A new file usually lands inside two minutes. A dense multi-page PDF takes longer, and the PDF-reading stage gives up at four. Re-uploading something you've sent before doesn't shortcut anything: it gets recognized by hash and held as a duplicate, and if you confirm you want it anyway the whole pipeline runs again at full cost. Reading a PDF is model work, and it takes several calls. We'd like to claim one tidy AI call. It isn't true. Every PDF goes to the model, because the old Tesseract and text-layer path is gone; PDFs now go to Claude's PDF interface and come back as structured rows. Dense statements get split and extracted in parallel chunks. Another call reads the totals the statement itself prints. Another resolves which client, form type and tax year the document belongs to, and that one always runs. The call that does get skipped is the inspection pass, reused from cache when the file was already inspected once. Then categorization runs in batches, which is model work again. Spreadsheets and CSVs skip all of it and get parsed deterministically. No model decides what happens next. Order of operations, deduplication, job creation, saving: fixed code, same every time. The accuracy net is fixed code too. Parsed totals get reconciled against the totals printed on the statement, and on bank and card statements a mismatch is a hard gate the model can't argue past. On document types that print no totals, that check runs advisory instead, because there's nothing to compare against. That split, model for reading and fixed code for sequencing, replaced something worse. An earlier version let the model drive the whole sequence as a chain of tool calls: analyze the document, list the jobs, match or create the client, create the job, validate. On real bank statements it took several round trips and, by our own note at the time, ran past three minutes. It's not how uploads work now. The older conversational route survives as a fallback for when the queue can't be reached, so there's always a degraded path rather than no path. Categorization isn't one model call either. A rule-based classifier runs. So does a vendor registry built from what your firm has categorized before, cross-firm vendor consensus, duplicate detection by file hash, and summary-line filtering. The model contributes one input among several. What the chat panel is for The chat is a separate surface, and narrower than we'd like to pretend. Two things it does well: Answers questions about the job in front of it. The expense items are preloaded into its context, so it isn't hunting. Recategorizes when you tell it to. Say "these are contractor expenses" and it applies the change, then extends it to other items from the same vendor in that job. That extension is where the time actually goes. It also has tools for validation, sales-tax reporting, deduction summaries and report export. Those are wired in and they're the least exercised part of the whole system. Treat them as a convenience, not something to build a process on yet. It is not an autonomous operator you hand a folder to. It won't go find your clients' statements, decide what to do with them and file the results. You upload, you review, you export. What the reference material covers The categorization step can pull reference material on Schedule C lines, home office, vehicle expenses, self-employment tax, the qualified business income deduction, estimated tax, meals and entertainment, capital gains, and state-level variation. It loads on demand instead of riding along in every request. Think of it as a well-briefed assistant's working knowledge. The IRS instructions are the authority and you're the one signing. For line assignments and percentages, the IRS Schedule C instructions are the authority and they're in the sources below. Separately, if you want a practitioner's read on which categories generate the most repeat corrections in practice, Schedule C Expense Categories and Where Do Software Subscriptions Go on Schedule C? are worth an hour before you decide what conventions to teach the system. Where it learns Three mechanisms, all live: Corrections. Override a categorization and it gets recorded against the normalized vendor, then fed into later sessions as context, framed to the model as observations rather than instructions. Correct the same vendor enough times and the pattern gets promoted to a rule. Memory. Preferences persist per accountant and per client across sessions, so it stops asking what you already told it. Confidence calibration. The confidence number you see gets adjusted against your firm's own correction history for that form type and category, over a rolling window. High model confidence in a category your firm keeps fixing gets pulled down. Your review attention goes where it's earned rather than where the model feels sure. Guardrails Document text is wrapped in delimiters and labelled to the model as untrusted, so a statement can't smuggle in instructions. There's a hard per-turn token ceiling, an iteration cap, a detector for the model re-firing the same call, a per-tool timeout, and a server-side cancel checked before every model call. Stopping it stops it, and finished work stays saved. Verification runs server-side. Before that gate existed, "validate before export" lived in the system prompt, which means a model lapse or an instruction hidden in an uploaded document could produce an unverified export. Now the export tools refuse to generate files for a job with hard verification failures, and there's deliberately no override flag for the model to set. Only a person who has looked at the flagged issues can export anyway, through the interface. The model has no way to. It runs on your own API key, encrypted at rest, resolved through one code path that denies by default. There's no shared server key. If you haven't added a key, nothing runs. What comes off the pile: line-by-line entry and bulk vendor recategorization. The manual version of this workflow is worth knowing as both a baseline and the standard you hold the tool to: How to Turn a Bank Statement Into Tax-Ready Expense Categories . 05 Bill Engagement's done. Now somebody opens a separate tool and retypes the client's legal name, billing address, taxpayer identification number, services performed, rates and terms. Then picks an invoice number and hopes it isn't a duplicate. Then a client says "I never got it," and there's no way to know whether that's true. Invoicing runs off the same client record as everything above. A service library scoped to your country. Tax and accounting services with suggested average rates, filtered server-side, so a US firm sees US services. Adopt what fits and set your own rate. The suggestion is a starting point rather than a price. Billing profiles that prefill. Legal name, billing email, address, tax registration number, default terms, currency. Stored per client, dropped into the invoice. You confirm instead of retyping. Gapless numbering per firm. A per-firm counter with a uniqueness constraint at the database level, and drafts don't consume a number. Numbers get assigned at send. No gaps from abandoned drafts, no collisions. This is the thing auditors ask about. Snapshots frozen at send. Bill-to details, your branding, payment instructions, all frozen onto the invoice when it goes out. Changing your address next year won't rewrite an invoice you issued last year. Delivery and view tracking. A viewable version plus a PDF, and the first view is timestamped. "I never got it" becomes answerable. Partial payments as a first-class thing. Payments recorded with method (cash, check, transfer, other), amount, date, reference, note. The invoice tracks paid and due, and status moves through draft, sent, viewed, partially paid, paid. Receivables without a spreadsheet. A firm-level summary splits invoices into outstanding, overdue and paid, plus a view by client. Void and reissue done properly. A sent invoice never gets deleted. It gets voided with a reason and a timestamp, and a reissue carries a link back to the original. We keep issued invoices for seven years. Your own retention obligations are a separate question, and the IRS guidance on how long to keep records is in the sources below. What comes off the pile: invoice assembly, detail retyping, number tracking, payment spreadsheets, delivery arguments. The hub: emails you stop writing Every station above emits events, and the events hold the loop together. Form assigned. Form completed. Form rejected. Deadline coming. Document assigned, uploaded, signed. Connection requested. Invoice delivered. Each one reaches the right person without you composing anything. For actual outbound mail there's a bulk layer: reusable templates, per-recipient delivery status on each job, HMAC-signed unsubscribe tokens, and consent handling built for CAN-SPAM rather than bolted on later. The queue handles attachments and retention instead of your outbox. Least glamorous part of the loop. Possibly the highest leverage. "Did you get it" and "did you send it yet" add up to a startling share of a season. Why year two costs less Each station leaves something behind. Ask leaves a questionnaire with its branching built. Sign leaves a document with its fields placed. Share leaves an assembled package and a vault structure your client already knows how to use. Categorize leaves corrections, memory and calibration, so the vendors you fixed stay fixed. Bill leaves a billing profile and a configured service catalog. No y-axis values on purpose. The claim is directional. Run your own before-and-after on a fixed client cohort if you want a number. The manual workflow costs the same every year. A connected one costs less each year, because the expensive part is encoding your firm's conventions and you only pay that once. Do the arithmetic on your own practice Be skeptical of any vendor quoting you an hours-saved figure, this one included. Firm size, client mix and current tooling vary far too much for a published average to say anything about you. Run it on your own numbers. For one filing season: Line Your number A. Clients in the engagement type ___ B. Minutes assembling and sending each questionnaire and package ___ C. Follow-up rounds per client × minutes per round ___ D. Minutes collecting and filing each signature ___ E. Minutes categorizing each client's statements by hand ___ F. Minutes assembling and tracking each invoice ___ Unbillable minutes per season A × (B+C+D+E+F) Divide by 60 for hours. Multiply by your rate for the opportunity cost, meaning the billable work those hours displaced. Use the number to find which of B through F dominates your total, because that tells you which station to close first. C and E usually run away with it. For the same ground as a working day rather than a formula, tax workflow automation, before and after tells it from the practitioner's side of the desk. If you're comparing against your current stack, the comparison page covers the boundaries. Practising in Canada? There's a Canadian edition of this article with the same workflow and Canadian references. Where to start Don't try to close all five at once. Partial adoption works fine, and the order matters. Build one questionnaire and one document package for your most common engagement. An afternoon, and the best-spent hours on this list. Push to ten clients, not four hundred. You'll find what the package is missing while it's still cheap to fix. Move signatures next. Clearest before-and-after, least judgment involved. Run categorization on statements you already did by hand. You know the right answer, which makes it a real accuracy test instead of a demo. Fix what it gets wrong; those corrections are the training signal. Turn on invoicing once your service catalog is set. Rates once, then bill from the record. Re-run the same cohort next cycle and compare. That's the only number about your practice that means anything. How we checked the claims in this article Everything above about how the software behaves was verified against the running codebase in July 2026. None of it came off a marketing sheet. Three claims in earlier drafts were wrong and got corrected in the process, which is why this section exists. The first draft said one AI call handled each upload. Reading the code, a PDF takes several. The second said the client-and-form-type call gets skipped when a heuristic already knows the answer. It doesn't. It always runs, and the call that gets reused from cache is the inspection pass. The third said a re-uploaded file is near-instant, which is wrong: duplicates get blocked, and a confirmed re-run costs full price. That last one came from a stale string in our own interface, which we're fixing at the source. Tax references below come from the IRS directly. If something here doesn't match what the product does, tell us and we'll correct it. Frequently asked questions What counts as a non-billable hour in a tax practice? Time on an engagement that reaches no invoice. Mostly coordination rather than judgment: assembling and sending questionnaires and document requests, following up on missing items, collecting and filing signature authorizations, filing inbound attachments, keying bank statement transactions, and building invoices after the work is done. Preparation, review and advisory are billable. The logistics wrapped around them usually aren't. Does the AI upload and process my clients' statements automatically? No. You upload the file. From there the request returns immediately and the work runs on a background queue that streams progress to the page, usually under two minutes for a new file and longer for a dense multi-page PDF. A PDF gets read by the model across several calls: extraction, split into parallel chunks when the statement is dense, a read of the totals the statement prints, a structured pass to resolve client and form type and tax year, then categorization in batches. Spreadsheets and CSVs get parsed deterministically instead. The sequence itself is fixed code, as is a reconciliation gate comparing parsed totals against printed ones. No model decides what happens next, and none goes looking for documents or picks what to process. What is the AI agent chat actually for? Two things reliably. Answering questions about the expense job in front of it, and recategorizing items when you tell it to, including extending a change to other transactions from the same vendor in that job. The extension is where the time saving lives. It also has tools for validation, sales-tax reporting, deduction summaries and report export, which are conveniences rather than steps to build a process on. Can the AI agent export work that hasn't been verified? No. Verification is enforced on the server rather than requested in the prompt. The export tools refuse to produce files for a job with hard verification failures, and there's deliberately no override parameter for the model, because an instruction hidden in an uploaded document could otherwise set it. An accountant who has reviewed the flagged issues can still export through the interface. That call belongs to the professional. Does the platform use my client data to train an AI model? Processing runs on your firm's own provider API key, encrypted at rest, so inference happens under your account rather than a shared one. Be clear about what that does and doesn't mean, though. To read a PDF statement the document itself goes to the model provider, which is inherent to the approach, and whatever appears on that statement goes with it, including account numbers and addresses. Redaction applies to some text-based helper calls and not to the document sent for extraction. Whether the provider trains on it is governed by your contract with them rather than by us. Any firm with confidentiality obligations should read the current privacy policy and their provider's data-handling terms before uploading client documents, and should treat that as a deliberate decision rather than an assumption. Can clients sign documents without creating an account? Yes. Upload the PDF, place the fields, generate a link. The signer passes an identity gate, signs in the browser and submits. The signature gets embedded into the PDF and you get a completion notification. No account needed on their side. Whether that signature meets IRS requirements for a particular authorization form is a question about IRS rules rather than about the software, so check the current guidance. Can I push a whole folder of documents to several clients at once? Yes. A library folder can be assigned to a set of clients in one action. The folder name gets snapshotted at push time, so each client keeps seeing the package as you sent it even if you rename the folder later. Each assignment tracks its own status of assigned, opened or responded, and can carry a due date or be revoked on its own. What happens to an invoice if a client relationship ends? We keep issued invoices for seven years as financial records. What you are separately obliged to retain is a different question, and the IRS guidance is in the sources below. A sent invoice never gets deleted. It can be voided with a recorded reason and timestamp, and a reissue carries a link back to the original. Bill-to and bill-from details are snapshotted at send, so the document stays complete on its own even after the client record changes. Does the reference material replace the IRS instructions? No, and using it that way would be a mistake. The categorization layer carries working knowledge of Schedule C lines, home office and vehicle expenses, self-employment tax, the qualified business income deduction, estimated tax, meals and entertainment, capital gains and state variation. It exists to make a first pass fast and consistent. The IRS instructions are the authority, and a person signs the return. Disclaimer This article is for general informational purposes and describes software workflow, not tax treatment. Tax laws change frequently and individual situations vary. TaxFormify does not provide tax advice. Consult a licensed CPA or enrolled agent for guidance on your specific circumstances. Any time or cost figures shown are worked examples using placeholder values, not measured results; substitute your own practice's numbers. Updated for tax year 2025. Sources Internal Revenue Service, About Schedule C (Form 1040), Profit or Loss from Business. https://www.irs.gov/forms-pubs/about-schedule-c-form-1040 Internal Revenue Service, About Form 8879, IRS e-file Signature Authorization. https://www.irs.gov/forms-pubs/about-form-8879 Internal Revenue Service, About Form 8878, IRS e-file Signature Authorization for Form 4868 or Form 2350. https://www.irs.gov/forms-pubs/about-form-8878 Internal Revenue Service, Qualified Business Income Deduction. https://www.irs.gov/newsroom/qualified-business-income-deduction Internal Revenue Service, How long should I keep records? https://www.irs.gov/businesses/small-businesses-self-employed/how-long-should-i-keep-records Internal Revenue Service, Instructions for Schedule C (Form 1040). https://www.irs.gov/instructions/i1040sc Practitioner write-ups by TaxFormify's founder, cited inline above for practical detail rather than independent corroboration, are collected at https://www.rashadbayram.com/blog .