The accountant's edition: what to build so a US tax preparer brings their clients to us
Chapter 12 found the customer: not the small business, but the person who signs its return. A US tax preparer has between fifty and three hundred clients, chooses the accounting software those clients use, and spends January to April doing work that is mostly data janitorial — chasing documents, categorising transactions, and turning a year of bank lines into a trial balance that a tax package will accept. This chapter is the build order for making Ledger123 the place that work happens: what a season actually looks like, what the competition gives away, which twelve modules to build and in what sequence, what has to change in the hosting itself, and what to charge.
Sell to the practice, not to the business: one preparer decides for a hundred datasets, and the timing is unusually good, because Intuit is retiring QuickBooks Online Accountant during 2026 and replacing it with a new suite whose upper tier costs $149 a month. What a preparer will move for is not features in general but four specific hours: chasing documents, categorising bank lines, building the trial balance, and getting it into Drake, Lacerte or UltraTax. So the first wave is a practice console, a trial balance with adjusting entries and form-line mapping that exports in those packages’ own import formats, a client request-and-question queue, and a bank-statement importer with rules — roughly ninety days of work, most of it already specified in chapters 1, 6 and 7. Chapter 15’s Swiss fork has already solved a surprising amount of this — a Ledger Doctor, a suspense-account rebooking screen, per-user period locks, row-snapshot logs and a chat thread on every booking — and section 13.6 lists what to port and what to rebuild. The hosting has to change too: staff seats and per-client billing, MFA on every login, an audit log, self-service backup and restore, a US region, and a security package the preparer can staple into the written information security plan the FTC Safeguards Rule now requires of them. Price per client dataset, not per seat: $9 a month against QuickBooks Simple Start’s $38 and Keeper’s $8–10 leaves room to be the cheapest serious option in the practice’s stack while a fifty-client firm still pays us $4,440 a year.
13.1The customer changes shape
Every earlier chapter of this book sold to a business. This one sells to a practice, and the difference is arithmetic. A small business buys one dataset, decides slowly, and churns when it fails. A preparer buys fifty to three hundred datasets, decides once, and each client that arrives brings a year of recurring revenue with no marketing cost attached. The same fact makes them a harder sale: they are choosing what they will live inside for four months of every year, and switching cost is measured in client anxiety.
| Selling to a business | Selling to a practice | |
|---|---|---|
| Datasets per sale | 1 | 50–300 |
| Who does the data entry | the owner, badly, in arrears | trained staff, to a deadline |
| What they are buying | invoices, VAT, a look at the bank balance | hours removed from January to April |
| What they pay for it | tens of dollars a month | hundreds of dollars a month, spread across clients |
| How they are reached | search, content, word of mouth — chapter 10 | the same, plus one channel that does not exist for businesses: the practice-management and preparer communities |
| Why they leave | the business closes | a season goes badly — which is why the first release must land in May, not February |
The economics from chapter 12 section 9 are the argument. A preparer bills $185 to $280 for a simple 1040, $500 to $2,500 for a company return, and $150 to $450 an hour for everything else. Two hours saved on a client is worth $300 to $900 of capacity in a season when capacity is the binding constraint. Against that, software at $9 a client a month is a rounding error — but only if it removes hours that are actually being spent, which is what the next section is for.
13.2Where a season’s hours actually go
A US tax engagement for a small business runs the same twelve stages every year. Read the third column: it is the entire product specification.
| Stage | What the preparer does now | What would remove the hour |
|---|---|---|
| 1 · Engage | Engagement letter, §7216 consent if any work goes offshore | Templates in the portal, e-signed and filed against the client — a small thing that anchors everything else |
| 2 · Ask | Sends an organiser and a document list; chases it by email for six weeks | A request list the client sees on one page, with upload, status and reminders that send themselves |
| 3 · Intake | Receives statements, receipts, payroll reports, 1099s in a dozen formats | An inbox that accepts everything, deduplicates by hash and files it against the period |
| 4 · Import | Loads bank and card activity, often by hand from PDFs | CSV, OFX and QIF import with per-account column memory, then feeds for those who will pay for them |
| 5 · Categorise | The single largest block of time: coding a year of lines to accounts | Rules that learn per client, and a suggestion engine — chapter 9 item 1 |
| 6 · Ask again | “What was this $940 to Home Depot?” — by email, one at a time | A questions queue: unknown transactions pushed to the client, answered in the portal, posted on reply. This is what Uncat sells for $9 a client a month |
| 7 · Reconcile | Bank and card reconciliations, payroll to the 941s, sales tax to the returns | A reconciliation screen that survives the year, plus the payroll worksheets of chapter 7 enhancement 2 |
| 8 · Close | Depreciation, accruals, prepayments, owner’s draws, loan interest splits | Fixed asset register and schedules — chapter 4 items 1 and 2 — and a closing checklist that remembers last year’s entries |
| 9 · Trial balance | Exports to Excel, adds adjusting entries in a side column, ties to prior year | A working trial balance with prior-year, adjustment and final columns, and the adjustments posted back as real journal entries |
| 10 · Map and export | Assigns each account to a tax form line, keys or imports it into Drake, Lacerte, UltraTax or ProConnect | Form-line mapping that remembers last year, and an export in each package’s own import layout — chapter 7 enhancement 1 |
| 11 · Review and file | A second pair of eyes, then the return goes out under an EFIN | Locked periods, a reviewed flag, and an audit log that shows what changed after review — chapter 1 item 7 |
| 12 · Deliver and plan | K-1s, copies, estimates for next year, the client’s questions in August | The estimates worksheet of chapter 7 enhancement 3, and a portal the client still has in August |
Only two of the twelve stages are tax work. The other ten are document logistics, categorisation and reconciliation — which is to say bookkeeping, which is to say the thing a general ledger is for. We do not need to become tax software to take this work; we need to be the best place in the world to arrive at stage 9 with clean books.
13.3What the competition gives a preparer, and what it costs
Two layers exist. The ledger the client keeps, which the preparer chooses and often pays for, and the practice tools the preparer buys for themselves.
| Product | What the preparer gets | Price in 2026 |
|---|---|---|
| QuickBooks Online Accountant | One login over every client file, a client list with status, a books-review tool, workpapers and a hand-off into Intuit’s own tax software; free to the firm, with the client paying the subscription | free — being retired |
| Intuit Accountant Suite | Its replacement during 2026: firms move to a free Core plan; the Accelerate tier and the books-close add-on became paid on 1 May 2026. The ProAdvisor programme is replaced by a new global programme in January 2027 | Core free · Accelerate 149 a month |
| QuickBooks Online, what the client pays | The ledger itself | 38 · 85 · 140 · 340 a month |
| Xero partner programme | Practice console, partner discounts, Hubdoc for documents | discounted by volume |
| TaxDome, Canopy, Karbon, Financial Cents | Practice management: jobs, deadlines, client portal, e-signature, invoicing | 828 – 1,704 per user a year |
| Keeper | Month-end review, client questions, a preparer-branded portal | 96–120 per client a year |
| Uncat | One job only: uncategorised transactions, asked and answered | 9 per client a month |
| Xenett | Close review and reconciliation on top of the ledger | 5,000–20,000 a year |
Every accountant in America is being moved off a product they knew this year, onto a suite with a new name, a new navigation and a paid tier — and their loyalty programme is being replaced in January 2027. Software migrations are the only moments practices reconsider anything. The release that matters is the one that is finished, documented and demonstrable before the 2027 season starts, which means before December 2026, which means the ninety-day plan in section 13.9 starts now.
13.4What we already have
More than it looks, because three of this book’s chapters describe code that exists in forks and can be ported rather than written.
| Capability | State | Where it is |
|---|---|---|
| One account, many client datasets, provisioned in one transaction | have | The panel: sign-up, dashboard, datasets/new, status, delete, backup download; provision_dataset creates the database, loads the schema and chart, and writes the login row |
| Per-dataset logins, roles, an access-control list | partial | member and session tables; acs is a menu filter, not enforcement — chapter 1 item 8 and chapter 2 item 1 |
| Full double-entry ledger, AR, AP, inventory, payroll, projects | have | SQL-Ledger itself |
| GIFI codes on every account — a form-line mechanism already in the schema | have | The hook chapter 7 enhancement 1 generalises to US forms |
| Document store with hash deduplication, drag and drop, ZIP queue | port | The Tekki fork, chapter 16 |
| Receipt inbox, JSON API, portal hooks, transaction log, Ledger Doctor | port | The Run my Accounts fork, chapter 15 |
| XLSX export on every report; database snapshots; GPG backups | port | The Tekki fork again — and XLSX is what an accountant actually wants |
| Customer and vendor portals | build | Chapter 14’s WordPress plugins, or the panel |
| Bank statement import and matching | build | Chapter 1 item 1 |
| A practice console | missing | Chapter 7 enhancement 4 sketches it; section 13.5 specifies it |
13.5The twelve modules, in dependency order
Three waves. Wave one is what a preparer needs before they will move a single client; wave two is what stops them leaving after the first season; wave three is what makes the product hard to leave at all.
aWave one — without these there is no sale
| Module | What it is | Touches | Effort |
|---|---|---|---|
| 1 · Practice console | A practice account on the panel that owns many client datasets: client list with year-end, status, last activity and open questions; staff seats with per-client access; one login that opens any client without a second password. Built on what the dashboard already does for one owner’s datasets | the panel, SL/Members.pm, one schema change on the registry | medium |
| 2 · Working trial balance | Prior year, current year, adjustments, final — four columns and a difference. Adjusting entries keyed on that screen post as real journal entries in a dated adjustment batch, so the books and the return agree afterwards. A locked period stops the client editing what was filed | SL/RP.pm, a new bin/mozilla screen, one schema upgrade for the batch and the lock | medium |
| 3 · Form-line mapping and export | Chapter 7 enhancement 1, finished to the point of a file another program reads: Schedule C, 1065, 1120-S and 1120 line maps, assigned on the chart, remembered per client, exported as the CSV that Lacerte and UltraTax import and as the workbook Drake imports. The published claim by tools that do this is thirty to sixty minutes a client down to five or ten | SL/AM.pm, SL/RP.pm, the US chart files | medium |
| 4 · Requests and questions | Two queues, one page each. Requests: the documents the preparer needs, with upload, status and automatic reminders. Questions: any transaction the preparer marks “ask the client”, answered in the portal, posted on reply with the answer stored against the line. This is the module that turns six weeks of email into a list | the panel or chapter 14’s portal, acc_trans plus one note table | medium-large |
| 5 · Bank import with rules | CSV, OFX and QIF, with a saved column map per bank per client, duplicate detection by date-amount-reference, and rules that learn: payee contains X, amount between Y and Z, post to account A. Chapter 1 item 1, with the rules made per-client | bin/mozilla/im.pl, one bankline table, a rules table | medium-large |
| 6 · Review, lock and log | A period lock the client cannot cross, a “reviewed by, on” stamp per period, and the mandatory audit log of chapter 1 item 7 — because the preparer’s question is always “what changed since I filed?” | SL/Form.pm audittrail, SL/AM.pm defaults, every posting path | medium |
bWave two — what keeps them after the first season
| Module | What it is | Touches | Effort |
|---|---|---|---|
| 7 · Migration in | “Bring your clients” has to be literal: import from QuickBooks Online and Desktop and from Xero — chart, customers, vendors, opening trial balance, and transaction history where the export allows. One screen, one file, a mapping step, a report of what did not import | bin/mozilla/im.pl, SL/IM.pm, a converter per source | large — and the highest-leverage large thing in the book |
| 8 · The January module: 1099s | Vendor tax flags and TINs, payments per vendor per calendar year by box, the IRIS CSV layout, and the W-9 collected in the portal. Chapter 1 item 11 and chapter 7 section 8 | SL/AP.pm, vendor screens, one schema upgrade | medium |
| 9 · Close pack | Fixed asset register with depreciation schedules, prepayments and accruals, and a closing checklist that carries last year’s entries forward as suggestions. Chapter 4 items 1 and 2 | SL/AM.pm, new tables, one report | large |
| 10 · Payroll to the forms | Date-effective tables and the 941, 940 and W-2 worksheets of chapter 7 enhancement 2 — the reconciliation a preparer does in April against what was filed in January | SL/HR.pm, bin/mozilla/hr.pl | medium-large |
| 11 · Documents and receipts | The fork ports: hash-deduplicated reference documents, the receipt inbox, and extraction into a draft entry — chapter 9 item 2. A receipt attached to the line is what survives an audit three years later | ported from chapters 15 and 16 | medium |
| 12 · Reports an accountant recognises | XLSX on every report, prior-year comparatives everywhere, a general ledger detail report that prints for a whole year, and the report library of chapter 2 item 5 | SL/Spreadsheet.pm ported from chapter 16, SL/RP.pm | medium |
cWave three — the moat
| Module | What it is | Why later |
|---|---|---|
| Bank feeds | A live connection through an aggregator, per chapter 6 item 3 | Money: aggregators quote around $0.30–$3.00 per connected item a month with four-figure minimums, and a median customer spends about $9,000 a year. Sell it as an add-on at cost plus margin once volume justifies the contract — file import first |
| Learning categoriser and anomaly review | Chapter 9 items 1 and 4 | It needs a year of the tenant’s own coded history to be any good. Ship rules first, learning second |
| API and MCP server | Chapter 6 item 1 and chapter 9 item 3 | Larger practices automate; it is also how a preparer’s own tooling and any AI assistant reach the ledger safely |
| White-label portal | The practice’s name, logo and domain on everything the client sees | Keeper charges for exactly this. It converts a tool into the practice’s own product |
| Multi-entity views | Combined statements across datasets — chapter 4 item 8 | For the client with three companies, and for the practice’s own reporting |
13.6The Run my Accounts dividend
Chapter 15 catalogues a Swiss fiduciary that has been running, since 2013, precisely the business a US tax preparer runs: hundreds of client datasets, salaried staff doing the books, documents arriving in every format, a filing deadline, and a client who answers questions slowly. It runs it on this codebase. That makes it the most valuable single source in this book for the present chapter — not as a competitor to imitate but as thirteen years of answers to questions we are about to ask. Two kinds of thing are there for the taking: code in the open fork, which can be ported, and designs in the closed platform, whose schema is documented well enough to rebuild.
aIn the fork, portable now
| What it is | What it does for a preparer | Where it lives | Module | Effort |
|---|---|---|---|---|
| Ledger Doctor | The triage list for a client you have just inherited: unbalanced journals, paid-versus-booked mismatches, orphan rows, blank rows, missing dates, bad line-tax rows — found and listed instead of discovered in April. This is the cleanup stage’s first screen, and it is already written | custom_am.pl | 2, 6 | small-medium |
| Extended transaction log | Every re-post and every delete copies the old header and its lines into ar_log, ap_log and gl_log. “What changed since I filed?” becomes a query rather than an argument — row snapshots, simpler and stronger than our audit trail | the fork’s log tables | 6 | small-medium |
| Clearing-account rebooking | The suspense-account screen: stand in the account ledger of the clearing account, see the open AR and AP invoices beside the unidentified lines, and rebook. Every US practice keeps an “Ask my accountant” account; this is the tool that empties it | cl.pl | 5 | medium |
| Per-user closing date, GL on hold, financial years | employee.closedto with Form::closedto_user locks the client and the junior out of a filed year while the reviewer still posts adjustments; gl.onhold parks a doubtful entry; financial_year rows carry OPEN, CURRENT and CLOSED. This is exactly the lock module 2 needs, with the per-user refinement we had not thought of | the fork’s employee and GL tables | 2, 6 | small |
| Default accounts on the counterparty | customer.income_accno_id and vendor.expense_accno_id, with chart.parent_id giving the chart a hierarchy. Half of categorisation is “this vendor is always that expense”; master data answers it before any rule engine runs | master-data columns | 5 | small |
| Generic CSV importer with a mapping step | IM::prepare_import_data parses any delimited file into the report structures and then reuses the standard import path — which is the per-bank, per-client column map module 5 was going to have to invent | SL/IM.pm | 5 | small-medium |
| The small habits | Last-used report columns (lastused, Form::get_lastused), searchable dropdowns on every select, and a dispatch method per customer and vendor so the batch queue knows who gets post and who gets e-mail. Nothing here is clever; all of it is what makes a junior fast on the fortieth client of the week | the fork’s usability layer | 1, 12 | small |
api.pl | A Mojolicious::Lite service over this same codebase whose POST /post_payment builds a $form and calls CP::post_payment. It is proof that the API of wave three can be written without rewriting the ledger — and the pattern for every endpoint after it | api.pl in the fork | wave 3 | small-medium |
bIn the closed platform, worth rebuilding
These are not portable — they live in the Mojolicious platform, not the ledger — but chapter 15 reads their schema off the database, and the design is the expensive part. Chapter 15 section 7 now carries that design as forty-one working mock screens with a build prompt per module; the rows below say which of them a US preparer needs.
| Their design | Why a preparer wants it | What we would build | Module |
|---|---|---|---|
Controlling checklist with a checked hash — xcontrolling_log carries a key, a hash of what was checked, and who checked it; xabschluss drives what the site sells as “the annual close in eighteen steps” | Review that survives change. A transaction ticked as reviewed is hashed; if anything in it moves afterwards, the checklist reopens it by itself. That is the difference between a review flag and a review | A reviewed stamp with a content hash on the transaction, a per-period checklist that carries last year’s steps forward, and a reopened-since-review report | 6, 9 |
Chat on bookings — a chat table of trans_id, message and employee, surfaced in the client portal | The questions queue of module 4, but anchored to the transaction rather than to an email thread: the answer lives where the entry lives, and is still there in an audit three years later | The same table, the client half in the portal, the preparer half in the account ledger, and an “open questions” count per client on the console | 4, 1 |
| Stations — the organisation modelled as stations, users assigned to them, sequential multi-level approval across document classes, with a document counter on each | A practice is a production line: intake, coding, review, filed. Stations give the partner a number per stage and the junior a queue instead of an inbox | A status per document and per period, a queue view per stage on the console, and the approval rules of chapter 4 item 3 behind them | 1, 6 |
| Scanning with recognition and human validation — machine extraction, then “validation by specialists”, sold at CHF 2 a document | It is the only honest shape for document intake: extraction is right most of the time, and a person confirms the rest. It also turns intake into a priced service rather than an unpaid chore | The receipt inbox of module 11, the extraction of chapter 9 item 2, and a validation queue where a person confirms a draft entry before it posts | 11 |
Bank import events and fuzzy matching — banking_import_event with status, IBAN, currency, totals and source; matching by full text and Levenshtein distance on the counterparty name, with legal-form tokens (AG, GmbH, Sàrl, LLC) seeded as words to ignore | Bank matching fails on names, not amounts. Their answer — strip the legal form, then fuzzy-match the rest against customers and vendors — is the one our importer should ship with, in a US stop list: LLC, Inc, Corp, Co, LP, Ltd | An import-event row per file so a re-import is idempotent, and a matcher with the same two stages | 5 |
| Live notifications and a daily dashboard — e-mail on incoming payments and on overdue invoices; a portal dashboard of liquidity, receivables and payables | What the practice console owes a partner who opens it on Monday: what moved, what is late, what is waiting on a client | Console signals: last activity, unanswered questions, unreconciled accounts, periods not closed | 1 |
| Two-factor authentication and a login log; two data centres and a daily snapshot | Everything section 13.7 says a US practice will ask us for, a Swiss fiduciary already had to answer for its own regulator | Confirmation, not novelty — build it first | hosting |
cThe part that is not code: how they charge
Run my Accounts does not sell software to businesses that keep their own books; it sells bookkeeping, with the software underneath, and it prices the work by the booking.
| Their tier | Monthly | Per booking | Reading |
|---|---|---|---|
| Startup, software alone | free | — | The ledger is the loss leader; the service is the business |
| S | CHF 0 | CHF 1.80 | Pay only for what is booked — the tier a new client can say yes to |
| M | CHF 35 | CHF 1.40 | Volume buys a lower unit price; the monthly fee buys the relationship |
| L | CHF 290 | CHF 0.95 | |
| Scanning | — | CHF 2 a document | Intake priced separately, because intake is labour |
For us that is a second, optional price list rather than a replacement for the one in section 13.8. Some practices want software and will do their own data entry; others — particularly the small preparer drowning in January — would rather hand the shoebox to somebody else and check the result. The second customer is the offshore practice of chapters 7 and 12 seen from the other end, and the per-booking price is how it is quoted without either side arguing about hours.
The structural lesson is in chapter 15’s last period: of the fork’s 474 recent commits, two-thirds are schema with no Perl consumer at all — SQL-Ledger has become the data layer beneath a Mojolicious platform that owns the screens, the portal and the integrations. Every module in section 13.5 should be built the same way: the preparer’s console, queues and portal in the panel over an API, the ledger left as the engine. It is the difference between a fork that must be maintained and a product that can be shipped weekly.
13.7What has to change in the hosting itself
The modules above are the ledger. This section is the service around it, and it is where a practice’s due diligence actually lands — because under the FTC Safeguards Rule the preparer must assess and contract with the vendors that hold their clients’ data, and must be able to show they did.
| Change | Why | State today |
|---|---|---|
| Practice accounts and staff seats | One firm, many staff, per-client access; a departing bookkeeper must lose access to sixty datasets in one click | one account owns many datasets; no seats |
| Multi-factor authentication, everywhere | Not optional: the amended Safeguards Rule has required MFA on every system holding customer information since June 2023, and IRS Publication 5708 expects it for every user, in-office included. A preparer cannot lawfully put clients on a system without it | missing — build first |
| Session policy, IP allowlist, SSO later | Timeouts, device list, forced sign-out; allowlisting for the firms that ask | sessions exist; policy does not |
| Access and change logs, exportable | “Who opened this client, and when” is a Safeguards question and an audit question. Pair it with chapter 1 item 7 inside the ledger | build |
| Self-service backup and restore | Backup download exists; restore, point-in-time copies and a sandbox clone of a client do not — chapter 4 item 6, and the Tekki fork’s snapshots | backup only |
| A documented US region | Firms ask where the data sits before they ask what it costs. Decide it, document it, and name the subprocessors | decide |
| A security package | One PDF: encryption in transit and at rest, backup and retention schedule, access controls, incident response and notification timetable, subprocessor list, and a completed vendor questionnaire. It is a sales asset — it drops straight into the firm’s own written information security plan | missing |
| Provisioning API and templates | A practice adding forty clients should not fill forty forms: bulk create from CSV, a chart-of-accounts template per client type, and an API key for the firms that automate | provisioning exists, one at a time |
| Sandbox and demo data | A practice will not migrate before it has rehearsed. Give every practice a free demo client with a year of transactions | build |
| Billing that fits a practice | Per client dataset, invoiced monthly to the firm, with volume tiers — and the option of billing the client directly where the firm prefers that | build |
| Status page and season support | Uptime history and an incident feed; and published support hours through January to April. A four-hour outage on 14 April is an existential event for a practice | build |
| Exit terms | A complete pg_dump and document archive on demand, and a written retention and deletion policy. Firms buy from vendors they could leave | backup exists; policy does not |
13.8What to charge
Price per client dataset, not per seat. Seat pricing is what the practice-management suites do at $828 to $1,704 a user a year, and it punishes exactly the firms we want — the ones with staff. Per-client pricing grows with the practice, is trivially comparable to what the client pays QuickBooks today, and lets the firm mark it up.
| Line | Proposed | Comparable |
|---|---|---|
| Practice account, console, staff seats | free | Intuit’s Core plan is free; charging for the console loses the argument before it starts |
| Client dataset, 1–10 | 9 a month | QuickBooks Simple Start $38; Uncat alone $9 |
| Client dataset, 11–50 | 7 a month | |
| Client dataset, 51+ | 5 a month | Keeper $96–120 a client a year |
| Migration of an existing file | 95 once, free above ten | The cost is ours in support time; the free tier above ten buys the whole practice |
| Bank feed, per connected account | at cost + margin | Only when the aggregator contract exists |
| White label | 49 a month per practice | Keeper charges for branding; practices pay for it |
| Optional: books kept by us, per booking | test at 0.60–1.20 | The Run my Accounts model of section 13.6c, for the preparer who would rather hand over the shoebox than staff it |
| What it costs the practice with us | A year |
|---|---|
| 10 clients at $9 a month | 1,080 |
| 40 clients at $7 a month | 3,360 |
| Total to us | 4,440 |
| The same 50 clients on QuickBooks Simple Start at $38 | 22,800 |
| Uncat at $9 a client, for the questions queue alone | 5,400 |
| One practice-management seat at the middle of the band | 1,100 |
| What we replace or undercut | 29,300 |
| Two hours saved per client at $150 an hour | 15,000 |
13.9Ninety days, in order
Sequenced so that something is demonstrable every fortnight, and so that the security work lands before the sales work — a preparer who asks about MFA and hears “it is on the roadmap” does not ask a second question.
| Weeks | Build | Done when |
|---|---|---|
| 1–2 | MFA on the panel and on dataset login; session policy; access log | A firm’s security questionnaire can be answered “yes” on every line about authentication |
| 3–4 | Practice account, client list, staff seats, per-client access | One login opens fifty clients; removing a staff member removes fifty accesses |
| 5–7 | Working trial balance with adjusting entries and period lock | A year is closed on screen and the adjustments exist as journal entries |
| 8–9 | Form-line mapping and the Lacerte/UltraTax CSV and Drake workbook exports | A real client’s trial balance imports into a tax package without retyping |
| 10–11 | Bank import with per-client rules and duplicate detection | A year of one bank account is coded in under an hour |
| 12–13 | Requests and questions queues, in the portal | A client answers three transaction questions without an email being written |
| — | In parallel, continuously: the security package PDF, the status page, the demo dataset, and one migration done by hand for a friendly practice | The first practice is running its own clients before we sell to a second |
Then the pitch writes itself, and it is the pitch chapter 10 says to make: not a feature list but a demonstration — here is a client’s year of bank lines, here it is categorised, here is the trial balance, here is the file your tax package imports, and the whole thing took eleven minutes.
13.10What we will not build
| Not this | Why |
|---|---|
| Tax return preparation, and transmission | Chapters 7 and 12: the return belongs in the signing firm’s software, and transmission needs an EFIN held by a US person. We produce what those packages import — which is also what makes us safe to adopt: we compete with nobody’s tax software |
| Practice management: time, billing, e-signature, CRM | TaxDome and Karbon are good and cheap enough. Integrate later; do not rebuild a suite to sell a ledger |
| Audit and attest tooling | A CPA-only market we cannot serve — chapter 12 section 4 |
| Our own bank aggregation | Regulated, expensive, and a commodity. Buy it when volume pays for it |
| A US entity of our own, at first | Chapter 11 prices that decision honestly; hosting can be sold from Pakistan, and the day an enterprise client demands a US contracting party is the day to revisit it |
Build a practice console, a working trial balance that exports into Drake, Lacerte and UltraTax, a client questions queue and a bank importer with rules; put MFA, an audit log, restores and a security package under them; charge $9 a client a month — and a preparer with fifty clients replaces $29,300 of subscriptions and a hundred hours of January.
13.11Glossary
| Term | What it is |
|---|---|
| Adjusting journal entry (AJE) | The entry a preparer makes at year end to move the books from what was recorded to what the return will say — depreciation, accruals, owner’s draws, reclassifications. |
| Cleanup | The trade’s word for taking a year of miscoded or uncoded books and making them presentable. Priced hourly, resented universally, and the single biggest hour-sink of a season. |
| MFA | Multi-factor authentication. Mandatory for systems holding taxpayer information under the amended FTC Safeguards Rule since June 2023. |
| PBC list | “Prepared by client” — the document request list that opens every engagement. |
| Practice console | The single screen a firm works from: every client, their status, who is on them, what is outstanding. |
| Safeguards Rule | 16 CFR part 314, the FTC rule under the Gramm-Leach-Bliley Act that makes tax preparers financial institutions for data-security purposes; the source of the WISP, MFA and vendor-oversight requirements. |
| SOC 2 | An audited report on a service provider’s security controls; the enterprise answer to “can we trust your hosting”, at $30,000–$100,000 for the first year. |
| Trial balance | Every account with its balance, debits equal to credits; the document the whole tax return is built from, and the hand-off point between bookkeeping and tax. |
| Wholesale billing | The arrangement where the practice, not the client, is invoiced for the client’s subscription — usually at a discount, and usually marked up in the firm’s own fee. |
| WISP | Written Information Security Plan — required of every US tax preparer; IRS Publications 4557 and 5708 are the guides, and PTIN renewal now asks the preparer to confirm one exists. |
13.12Sources
Vendor pages and current-year trade reporting for what the competition costs; the FTC and IRS for the security obligations; this book’s own chapters for every enhancement referenced by number. The prices in section 13.8 are a proposal, not a survey.
- CPA Practice Advisor and Insightful Accountant on the retirement of QuickBooks Online Accountant, the Intuit Accountant Suite Core and Accelerate plans ($149 a month from 1 May 2026) and the replacement of the ProAdvisor programme in January 2027 — cpapracticeadvisor.com · blog.insightfulaccountant.com
- Intuit, QuickBooks Online pricing after the August 2026 change; QuickBooks ProAdvisor programme — quickbooks.intuit.com/accountants/proadvisor/
- TaxDome pricing; Karbon, Canopy and Financial Cents per-user pricing as compiled by Financial Cents and Portico; Keeper and Xenett price bands; Uncat pricing — taxdome.com/pricing · uncat.com · xenett.com
- Trial balance import into Lacerte, UltraTax CS and Drake, and the reported reduction from 30–60 minutes to 5–10 — ledgeriq.ai/blog/how-to-import-a-trial-balance-into-tax-software · drakesoftware.com/products/conversions/
- FTC, Safeguards Rule: what your business needs to know, 16 CFR part 314, including the June 2023 MFA and qualified-individual requirements and service-provider oversight — ftc.gov/business-guidance/resources/ftc-safeguards-rule-what-your-business-needs-know
- IRS Publication 4557 Safeguarding taxpayer data and Publication 5708 Creating a written information security plan; the WISP confirmation on Form W-12 PTIN renewal — irs.gov
- Aggregator pricing indications for Plaid, MX and Finicity as compiled by Vendr, Capterra and comparison guides — treat as order-of-magnitude, since all three quote custom contracts
- SOC 2 Type II cost and timeline benchmarks for small SaaS, 2026 — sprinto.com · scytale.ai
- Chapter 15 for everything in section 13.6: the fork’s open code, the closed platform’s schema as read from the database, and the published price list of the bookkeeping service
- This book: chapter 1 items 1, 4, 7, 8 and 11; chapter 2 items 1 and 5; chapter 4 items 1, 2, 6 and 8; chapter 6 items 1 and 3; chapter 7 enhancements 1 to 4; chapter 9 items 1 to 4; chapters 15 and 16 for the fork features to port