Tax document management software gives taxpayers one secure place to keep W-2s, 1099s and receipts, and gives their accountant a way to review, question and request those documents without email attachments. SpendifiAI v2.0, shipped on 31 March 2026, is exactly that: a tax document vault that classifies each upload into one of 25 form types with Claude, extracts the fields with a confidence score on each one, logs every access in a hash-chained audit trail, and connects it all to a portal for accounting firms.
Every figure here comes from the public SpendifiAI repository, including its milestone record and v2.0 requirements, which are committed alongside the code. v2.0 builds on the accountant accounts added in March and the tax deduction finder; the SpendifiAI overview covers the rest of the product.
What Is Tax Document Management Software?
It is software that stores tax paperwork by year and type, keeps a record of who touched it, and lets the people who prepare a return work on the same set of documents. For an individual, the pain it solves is a shoebox and an inbox search every spring. For an accountant, it is the chase: which clients have sent what, and what is still missing.
SpendifiAI already knew a lot about each user’s finances from their bank data. v2.0 connects that knowledge to the documents. If your deposits show freelance income, the vault can tell you a 1099 is probably missing before your accountant has to.
How the Tax Document Vault Stores Files
Uploads accept PDF, JPG and PNG, with the file type validated on the server rather than trusted from the browser. By default files are stored privately on the server, organized by user, year and category. A Super Admin can switch the storage driver to Amazon S3, enter credentials that are stored with AES-256 encryption, test the connection, and run a migration job with live progress.
- Signed URLs only. Every view or download goes through a time-limited signed URL, locally or on S3. There are no permanent links to a tax document.
- A status for every document. Each one moves through upload, classifying, extracting, ready or failed, so nothing sits in an unknown state.
- Soft delete. A user’s delete hides the document; only an admin can purge it.
Local storage or Amazon S3
| Local (default) | Amazon S3 | |
|---|---|---|
| Where files live | Private server storage, by user, year and category | Your S3 bucket and region |
| How files are served | Laravel temporary signed routes | S3 temporary URLs |
| Credentials | None needed | Encrypted with AES-256 in the database |
| Switching | Super Admin tests the connection, then runs a migration job with live progress | |
An audit trail you cannot edit
Every view, download, upload, delete, share and extraction is written to a tax_vault_audit_log table with the user, IP address and time. There are no update or delete routes for that table, and PostgreSQL rules block updates and deletes at the database level as well. Each entry also stores a SHA-256 hash of the previous entry’s hash plus its own data, so TaxVaultAuditService can walk the chain and detect any tampering.
The requirements forbid looking up a tax document by ID alone. Every access is scoped through the owner or an authorized accountant relationship, and cross-role tests prove a different accountant is blocked.
How Does AI Extract Data From Tax Documents?
In two passes, and the second one only runs if the first one is sure. The TaxDocumentExtractorService sends the document to Claude to classify it into one of the 25 form types. If classification confidence is below 0.70, extraction is skipped and the document is flagged for a person to look at. Above it, a second call extracts the structured fields for that specific form.
| Threshold | Value | What happens |
|---|---|---|
| Classification gate | 0.70 | Below: no extraction, flagged for manual review |
| Field auto-accept | 0.85 | Green badge in the review screen |
| Field review | 0.60 | Amber badge: check this field |
| Below review | under 0.60 | Treated as low confidence and surfaced for correction |
The 25 document types the vault recognizes
The category list is an enum in the code: W-2 and W-2G; the 1099 family (NEC, INT, MISC, DIV, B, R, G, K, S, SA, C, SSA-1099 and RRB-1099); Forms 1098, 1098-E and 1098-T; 5498 and 5498-SA; Schedule K-1; property tax statements; charitable donation receipts; general receipts; and other. The first four with full field extraction were the W-2, 1099-NEC, 1099-INT and 1098, the forms most households receive; the rest followed in the same phase.
Reviewing and correcting extracted fields
The document detail page is a split view: the PDF on one side, the extracted fields on the other, each with its confidence badge and inline editing. Extraction runs as a queued job with retries, so a slow API call never blocks an upload. The tests mock the Claude API entirely; nothing in the suite calls a live model.
What the vault refuses to store
Extracted data is kept in an encrypted column. Social Security numbers are reduced to the last four digits, and employer identification numbers are encrypted. Full SSN storage is listed as out of scope in the project’s own requirements, because the safest sensitive field is the one you never keep.
Email and a shared folder
how most returns still start
- Where documents live
- Inboxes and downloads folders
- Who opened what
- Unknown
- Missing forms
- Found when the accountant asks
- Data entry
- Typed by hand from the PDF
- SSNs
- In full, in every copy
SpendifiAI v2.0 vault
shipped 31 March 2026
- Where documents live
- One vault, by year and category
- Who opened what
- Hash-chained audit log
- Missing forms
- Predicted from bank transactions
- Data entry
- Extracted with per-field confidence
- SSNs
- Last four digits only
The Accountant Portal for Firms
March’s release let an individual accountant manage clients. v2.0 makes it a firm. An accounting firm registers with its name, address, phone and branding, accountants belong to the firm, and clients are managed at the firm level. The firm generates branded invite links for onboarding new clients.
Annotations, document requests and auto-fulfillment
Accountants can leave threaded comments on any client document. They can also request a document that is missing, with a description of what they need. The client sees each request as an alert with an upload prompt, and when they upload a matching document the request is fulfilled automatically, with no one having to mark it done.
Five email workflows
Each step of that loop sends mail: a branded firm invite, a document request to the client, a comment notification with a preview, an upload notice to the accountant, and a confirmation when a request is fulfilled. The accountant dashboard pulls it together with a client list showing document completeness and deadline tracking.
Cross-Document Intelligence
The last phase connects the vault to the bank data SpendifiAI already has. TaxDocumentIntelligenceService does three things:
- Predicts missing documents It cross-references transaction categories with the forms they imply. Freelance deposits above the $600 threshold (the reporting line for Form 1099-NEC) suggest a 1099 should exist; mortgage payments suggest a 1098 with no minimum.
- Flags anomalies It compares documents with each other and with the bank, for example W-2 wages against actual deposits.
- Links transactions to documents A 1099 is tied to the deposits it covers, so the numbers can be checked both ways.
Each missing-document alert explains why the document is expected, so the user is not left guessing what “1099-INT missing” means.

How v2.0 Was Built and Verified
The milestone ran as four phases and sixteen plans, each committed with its research, plan and verification notes: 72 commits between the deduction-finder release and the v2.0 tag. The final phase was a quality gate: 225 tests with 761 assertions, zero TypeScript build errors, and zero Laravel Pint formatting issues. The gate caught a real bug on the way: audit-log foreign keys set to cascade, which conflicted with the no-delete rules whenever a user or document was removed. They now set the reference to null, so the audit trail outlives the document.
Right after the milestone, a follow-up commit added household management (invitations, members, leave and remove flows), dependents with tax-relevant fields, and tightened authorization policies for household-aware access.
Dual sign-off between taxpayer and accountant, multi-accountant firms with roles, time-limited sharing packages and TurboTax or H&R Block export formats are planned for v2.1. Handwritten documents are not extracted, and SpendifiAI does not e-file with the IRS.
SpendifiAI
Source code for SpendifiAI, the AI-powered personal finance platform.
Frequently Asked Questions
What is tax document management software?
It is software that stores tax documents by year and type, controls who can see them, and records every access. Good tools also help the taxpayer and their accountant work on the same documents. SpendifiAI’s vault adds AI extraction and missing-document detection on top.
Is it safe to upload tax documents to a vault?
It depends on how the vault is built. SpendifiAI’s uses private storage, time-limited signed URLs for every access, encrypted extracted data, SSNs stored as last four digits only, and an audit log that cannot be edited or deleted.
How does AI read a W-2 or 1099?
SpendifiAI first asks Claude to classify the document into one of 25 form types. Only if that classification is at least 70% confident does it extract the form’s fields, each with its own confidence score, which you can review and correct next to the original.
What is a secure client portal for accountants?
It is a portal where an accounting firm and its clients exchange and discuss documents without email. In SpendifiAI, firms invite clients with branded links, comment on documents, request missing ones, and see each client’s completeness on a dashboard.
How does SpendifiAI know a tax document is missing?
It compares your bank transactions with the forms they imply. Freelance deposits over $600 suggest a 1099-NEC, and mortgage payments suggest a Form 1098. Each alert explains the reason.
What is a hash-chained audit log?
Each log entry stores a SHA-256 hash of the previous entry’s hash plus its own data. Changing or removing any past entry breaks the chain, so tampering can be detected by re-checking the hashes.
Handling sensitive documents in your product?
I designed SpendifiAI’s vault, extraction pipeline and audit trail, and the code is public for you to judge. Tell me what your users need to store and share; the first conversation is free.